哪一种是实现业务对象的首选方式(为什么)?
没有单独的“上下文”
class Product
{
public string Code { get; set; }
public void Save()
{
using (IDataService service = IoC.GetInstance<IDataService>())
{
service.Save(this);
}
}
}
用法是:
Product p = new Product();
p.Code = "A1";
p.Save();
带有单独的“上下文”
class Product
{
private IContext context;
public Product(IContext context)
{
this.context = context;
}
public string Code { get; set; }
public void Save()
{
this.context.Save(this);
}
}
用法是:
using (IContext context = IoC.GetInstance<IContext>())
{
Product p = new Product(context);
p.Code = "A1";
p.Save();
}
这一切都发生在 BL 层(使用示例除外),与数据库等无关。 IDataService 是数据层的接口,用于将业务对象保存在“某处”。IContext 基本上以某种方式包装了 IDataService。实际的业务对象更复杂,具有更多的属性和相互引用(如 Order -> OrderRow <- Product)。
我的观点是第一种方法(太)简单,第二种选择在单个业务对象实例之外提供更多控制......?有没有这样的指导方针?