Я бы предложил третий подход:
Редактировать: Я обновил этот пример кода, чтобы отразить комментарии ОП ниже.
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
), поскольку это помогает разработчику найти эти методы. (Этот вопрос больше относится к вкусу - поскольку это статический метод, вы можете поместить его в любой тип по вашему желанию, например, CustomerUtility
или CustomerHelper
).
Мое последнее предложение - вернуть тип интерфейса с FindCustomers()
, чтобы обеспечить вам большую гибкость в будущем для изменений в реализации. Очевидно, что DAL.GetCustomers()
должен будет возвращать некоторый тип, который также реализовал IList<T>
, но тогда любой метод API (особенно на другом уровне, например на уровне данных) также должен возвращать типы интерфейса.