单班和班级收藏

dcp*_*ers 0 c# oop

我总是编写引用一个对象作为单个类的编码,如果我想获得该类的集合,我只使用Get()并返回列表.

public abstract class Customer
{
   private Int32 customerID;
   private String customerName;

   public abstract List<Customer> Get();
   public abstract bool Add();
   public abstract bool Update();
   public abstract bool Delete();
}
Run Code Online (Sandbox Code Playgroud)

现在......我收到了其他关于这个的评论,我应该创建另一个集合类来迎合这个.我也特别在ORM(对象关系映射)的东西中看到过这个但是不是太多了吗?

所以它会是这样的:

public abstract class CustomerCollection
{    
   public abstract List<Customer> Get();
   public abstract bool Add();
   public abstract bool Update();
   public abstract bool Delete();
}
Run Code Online (Sandbox Code Playgroud)

你对此有何看法?

谢谢

Dan*_*den 5

这听起来像是在询问使用内置集合是否更好List<Customer>,或者创建自己的CustomerList类.与这个问题分开,重要的是要确保你的单一Customer课程遵循良好的OO设计(你的Get()方法似乎......奇怪,至少).

除此之外,我的方法是始终使用内置集合接口,而不是内置集合.例如,任何返回Customers 集合的函数都应该返回一个IEnumerable<Customer>,ICollection<Customer>或者可能IList<Customer>,这取决于你是否需要能够循环遍历它们,计算它们,或者分别以随机顺序选择它们.

然后,您的初始实现可以List<Customer>像现在一样返回,但如果您需要更多特定功能,可以在以后轻松地将其替换为其他集合.

更新:如果您真的关心以后扩展它的想法,您还可以创建一个接口:

public interface ICustomerList : IList<Customer> { }
Run Code Online (Sandbox Code Playgroud)

而您的默认实现只是一个空子类:

public class CustomerList : List<Customer>, ICustomerList { }
Run Code Online (Sandbox Code Playgroud)

然后让你的所有类都返回ICustomerList(你实际上会返回CustomerList实例).然后在将来的版本中,您可以扩展ICustomerList接口以添加新方法,而不会破坏当前仅像列表一样使用它的任何代码.

请注意,我没有测试过这种方法.因人而异.

但最重要的是,除非添加新功能,否则不应创建新类.推论:始终返回一个接口,该接口公开您愿意支持的最小功能.