【发布时间】:2012-10-26 13:14:17
【问题描述】:
我正在尝试生成如下所示的一些方法,添加crm 和human resources。但我想写 Crm、humanResources、SupplChain 等(5-6 个模块)如何简单地编写下面的代码(下面的代码是骨架:))
我先写了没有泛型,然后我写了泛型。第二种用法与第一种不同。
1) 清晰的阅读也被管理和消耗
2)给我一些性能优势。没有装箱和拆箱过程
你能教我泛型的优缺点吗?比较第一次和第二次使用?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace App.GenericsBaseClass.Diff
{
// View :
class Program
{
static void Main(string[] args)
{
new Crm().Add("Yapı Kredi");
Console.Read();
new HumanResources().Add("yusuf karatoprak");
Console.Read();
}
}
// Business
public class Crm : Customer
{
public override void Add(object obj)
{
if (obj is String)
{
base.Add(obj);
}
else
{
throw new InvalidOperationException("Customer Name must be string Format...");
}
}
}
public class HumanResources : Staff
{
public override void Add(object obj)
{
if (obj is string)
{
base.Add(obj);
}
else
{
throw new InvalidOperationException("Stuff Name must be string Format...");
}
}
}
// Dal
public class Staff
{
public virtual void Add(object obj)
{
new Db.Staff().Save((string)obj);
}
}
public class Customer
{
public virtual void Add(object obj)
{
new Db.Customer().Save((string)obj);
}
}
// Model
public class Db
{
public class Customer
{
public void Save(string Name)
{
Console.WriteLine("Customer : {0} is saved",Name);
}
}
public class Staff
{
public void Save(string Name)
{
Console.WriteLine("Staff: {0} is saved", Name);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace App.GenericsInstadofBaseMethod
{
class Program
{
static void Main(string[] args)
{
new Crm<string>().Add("Yapı Kredi");
Console.Read();
new HumanResources<string>().Add("yusuf karatoprak");
Console.Read();
}
}
// Business
public class Crm<T> : Customer<T>
{
public override void Add(T obj)
{
base.Add(obj);
}
}
public class HumanResources<T> : Staff<T>
{
public override void Add(T obj)
{
base.Add(obj);
}
}
// Dal
public class Staff<T>
{
public virtual void Add(T obj)
{
new Db<T>.Staff().Save(obj);
}
}
public class Customer<T>
{
public virtual void Add(T obj)
{
new Db<T>.Customer().Save(obj);
}
}
// Model
public class Db<T>
{
public class Customer
{
public void Save(T Name)
{
Console.WriteLine("Customer : {0} is saved", Name.ToString());
}
}
public class Staff
{
public void Save(T Name)
{
Console.WriteLine("Staff: {0} is saved", Name);
}
}
}
}
【问题讨论】:
-
你想通过使用泛型来实现什么?拥有通用的
Name对我来说似乎毫无用处。 -
应该是
Customer<T>和Staff<T>而不是Db<T> -
如果你想保存一个字符串名称,让你的方法接受一个字符串。创建一个您实际上无法履行的 API 合同有什么意义?由于持久性问题与不必要的深继承层次结构的混合,整个类型层次结构混乱。我建议看看一个不错的 ORM。
标签: c# .net generics architecture