2010-01-15 3 views
0

этот класс от http://wiki.fluentnhibernate.org/Getting_started у него есть некоторая логика в нем, и я думаю, что это нарушает Single Responsibility Principle, как вы думаете, как бы вы это разрешили?SOLID SRP и FluentNhibernate юридические лица

Другое дело, что меня беспокоит, почему в nhibernate всегда используется IList, а не IEnumerable, который имеет меньше функциональности?

public class Store 
{ 
    public virtual int Id { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Product> Products { get; set; } 
    public virtual IList<Employee> Staff { get; set; } 

    public Store() 
    { 
    Products = new List<Product>(); 
    Staff = new List<Employee>(); 
    } 

    public virtual void AddProduct(Product product) 
    { 
    product.StoresStockedIn.Add(this); 
    Products.Add(product); 
    } 

    public virtual void AddEmployee(Employee employee) 
    { 
    employee.Store = this; 
    Staff.Add(employee); 
    } 
} 
+0

Два вопроса: 1) Как вы считаете, ответственность этого класса должна быть? 2) Какие элементы этого кода, по вашему мнению, выходят за рамки этой ответственности? Он выглядит довольно чистым для меня - этот класс представляет информацию и процессы, связанные с Магазином; там нет кода пользовательского интерфейса, доступа к данным или других сквозных проблем ... –

+0

хорошо, я не был уверен, нарушает ли он SRP, поэтому я задал этот вопрос – Omu

+0

. Каковы две обязанности в соответствии с вами? – Paco

ответ

1

По-моему, это не нарушает принцип SRP. И, как отметил Пако, он по-прежнему является классом POCO. POCO не означает, что объект должен содержать только данные.

Я бы, как вы упомянули, однако измените с IList <> на IEnumerable <> на мои коллекции и сделайте сеттеры частными (для коллекций). Для nhibernate это не проблема. Использование этих методов «добавить», на мой взгляд, является предпочтительным способом обработки коллекций на вашей модели (blog post about that).

+0

Единственная проблема в том, что с IEnumerable вы не сможете легко добавить новый элемент в коллекцию в этом методе AddProduct, я думаю, вам придется использовать linq concat extension или что-то такое. – Omu

+0

Это не проблема. У вас просто есть частная коллекция как List <> или что-то с методом add и публикацией как IEnumerable <> (описано в сообщении блога, о котором я упоминал). –

Смежные вопросы