私たちのシステムには、ボグ標準関連の poco の集まりであるドメインがあり、NHibernate とすべての遅延読み込みなどを使用して、オブジェクト データをハイドレートして永続化します。
ドメインに構造があるとしましょう。(これは私がその場で作成した純粋な例です)
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Postcode { get; set; }
public Region Region { get; set; }
}
public class Region
{
public int Id { get; set; }
public string Name { get; set; }
public CountryCode CountryCode { get; set; }
}
public class CountryCode
{
public string Name { get; set; }
public string Code { get; set; }
public CostCode CostCode { get; set; }
}
public class CostCode
{
public string Name { get; set; }
public string Description { get; set; }
}
ここで、Customer が自分自身の CostCode.Name 値の Name を取得したいとします。Customer にこれを行うメソッドを用意したほうがよいでしょうか。
public string GetCountryCostName()
{
return Address.Region.CountryCode.CostCode.Name;
}
または、そうする方が良いでしょうか Customer と他のオブジェクトには、そのような情報を取得する機能があります
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public string GetCountryCostName()
{
return Address.GetCountryCostCodeName();
}
}
public class Address
{
public int Id { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Postcode { get; set; }
public Region Region { get; set; }
public string GetCountryCostCodeName()
{
return Region.GetCountryCostCodeName();
}
}
public class Region
{
public int Id { get; set; }
public string Name { get; set; }
public CountryCode Country { get; set; }
public string GetCountryCostCodeName()
{
return Country.GetCostCodeName();
}
}
public class CountryCode
{
public string Name { get; set; }
public string Code { get; set; }
public CostCode CostCode { get; set; }
public string GetCostCodeName()
{
return CostCode.Name;
}
}
public class CostCode
{
public string Name { get; set; }
public string Description { get; set; }
}
最初の方法では、Nhibernate は単一の SQL を作成して、作成するすべてのプロキシをハイドレートしますが、2 番目の方法では、遅延読み込みが NHibernate でどのように機能するかが正しい場合、関数がアクセスされると、より小さな SQL ステートメントが多数作成されます。では、オブジェクト指向の設計とパフォーマンスの観点から、どの方法が最善のアプローチでしょうか?
よろしく
CD