0

このクラスはhttp://wiki.fluentnhibernate.org/Getting_startedから のもので、いくつかのロジックが含まれており、これは単一責任の原則に違反していると思います。どう思いますか?どうやってこれを解決しますか?

私を悩ませているもう 1 つのことは、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);
  }
}
4

1 に答える 1

1

私の意見では、これは SRP の原則に違反していません。そして、パコが言ったように、それはまだ POCO クラスです。POCO は、オブジェクトにデータのみを含める必要があるという意味ではありません。

ただし、あなたが言及したように、コレクションで IList<> から IEnumerable<> に変更し、セッターをプライベートにします (コレクション用)。これは、nhibernate が処理する問題ではありません。これらの「追加」メソッドを使用することは、私の意見では、モデルのコレクションを処理するための推奨される方法です (それに関するブログ投稿)。

于 2010-01-18T10:01:49.243 に答える