我想知道从自定义集合类返回对象时的最佳模式是什么。为了说明我的问题,这里有一个例子:
我有一个客户类:

public class Customer
{
   //properties
   //methods
}

然后我有一个客户收集类:
public class Customercollection: Collection<Customer>
{

  public Collection<Customer> FindCustomers()
   {
     //calls DAL and gets a Collection of customers
     Collection<Customer> customers = DAL.GetCustomers();

     return customers;
   }
}

现在,此方法的另一个版本可以是:
public class Customercollection: Collection<Customer>
{

  public Collection<Customer> FindCustomers()
   {
     //calls DAL and gets a Collection of customers
     Collection<Customer> customers = DAL.GetCustomers();
     foreach(Customer c in customers)
     this.Add(c);
     return this;
   }
}

我想讨论哪一种方法更好?还有比两个以上更好的方法吗?

最佳答案

我建议第三种方法:
编辑:我已经更新了这个代码示例以反映下面的操作评论。

public class Customer
{
    public static ICollection<Customer> FindCustomers()
    {
        Collection<Customer> customers = new Collection<Customer>();

        foreach (CustomerDTO dto in DAL.GetCustomers())
            customers.Add(new Customer(dto));  // Do what you need to to create the customer

        return customers;
    }
}

大多数情况下不需要自定义集合-我假设这是其中之一。此外,还可以将实用程序方法添加到类型(在本例中为Customer类型),因为这有助于开发人员发现这些方法。(这一点更多的是一个品味的问题——因为这是一个静态方法,你可以自由地把它放在你想要的任何类型中,例如CustomerUtilityCustomerHelper)。
我的最后建议是从FindCustomers()返回接口类型,以便将来实现更改时具有更大的灵活性。显然DAL.GetCustomers()也必须返回实现IList<T>的类型,但是任何api方法(尤其是在数据层这样的不同层中)也应该返回接口类型。

07-26 05:16