在我们的系统中,我们的域只是一堆与沼泽标准相关的 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; }
}
现在说客户想要为自己获取 CostCode.Name 值的名称,在客户中有一个方法会更好吗?
public string GetCountryCostName()
{
return Address.Region.CountryCode.CostCode.Name;
}
或者这样做会更好吗,这样客户和其他对象就具有获取信息的功能
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 来水合它创建的所有代理,但是第二种方式如果我在延迟加载如何与 NHibernate 一起工作方面是正确的,它将在访问函数时创建许多较小的 sql 语句。那么从 OO 设计和性能的角度来看,哪种方法是最好的方法呢?
问候
光盘