我总是编写引用一个对象作为单个类的编码,如果我想获得该类的集合,我只使用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)
你对此有何看法?
谢谢
这听起来像是在询问使用内置集合是否更好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接口以添加新方法,而不会破坏当前仅像列表一样使用它的任何代码.
请注意,我没有测试过这种方法.因人而异.
但最重要的是,除非添加新功能,否则不应创建新类.推论:始终返回一个接口,该接口公开您愿意支持的最小功能.