MVC アプリケーションを 3 タイヤ アプリケーションの UI レイヤーとして使用し、EF CodeFirst 5 を DAL として使用して、ASP.NET MVC C# アプリケーションを開発しています。
DAL -> DTL
DTL <- BLL -> DAL
DTL <- UI -> BLL
矢印は用途を意味します。(だからDALはDTLなどを使う...)
私は、EF Code First に沿ったデータ関連の検証を行うデータ転送オブジェクトとして POCO を使用しました。私の POCO には関係があり、関係にある POCO には関係があります。かなり標準的な...
BL のすべてのクラスは、単一の責任規則に従って、単一の POCO タイプを処理します。私を悩ませているのは、POCO が他の BL の関心事である関係を持っている場合 (単一の責任を維持するために)、POCO にビジネス ルールと検証をどのように適用するかということです。
簡単な例を挙げてみます:(これを擬似コードとして読んでください)
public class Customer{
public int Id { get; set; }
public string Name { get; set; }
public virtual Enumerable<Person> Users { get; set; }
}
public class Person{
public int Id { get; set; }
public string Name { get; set; }
public Customer BelongsTo { get; set; }
public virtual Enumerable<Property> Properties { get; set; }
}
public class Property{
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
public class CustomerBL{
private DALContext = new DALContext();
public void Add(Customer customer){
DALContext.Customers.Add(customer);
DALContext.SaveChanges();
}
}
public class PersonBL{
private DALContext = new DALContext();
public void Add(Person person){
if(person.Properties.Count() < 3)
throw new ApplicationException("Each person must have at least three properties");
DALContext.People.Add(person);
DALContext.SaveChanges();
}
}
したがって、私の質問は、新しい顧客を追加するときに、すべてのユーザー (顧客オブジェクトに設定されている場合) が、単一の責任ルールを破ることなく (または少なくともいい意味で壊してください)?
Person は、他の関係を持つ他の関係を持つことができ、すべてがビジネス ルールを持つ特定の BL を持つことに注意してください。「具体的な」例を提供しましたが、より一般的な解決策を探しています。ありがとうございました!