假设我的业务层中有这样的方法:
// This is in the business layer
public Result DeleteSomeDomainObject( ???? )
{
//Enforce business logic here.
//Delete records in the database
DAL. DeleteSomeDomainObject( ??? )
}
// This is in the data access layer
public Result DeleteSomeDomainObject( ???? )
{
// Delete records from the database.
}
这些方法是应该采用域模型的实例还是只采用主键?
答案 0 :(得分:2)
我经常与此斗争。我通常会说您的业务/服务层应该将域对象作为参数。
如果我们在谈论网络,您的网络层将拥有该ID。它可能会从服务层实例化或检索对象的实例。因此将它传递给您的服务层是有意义的。
但是,有时您最终会复制对象的检索。有时,您的服务将加载对象,因为Web层中未捕获一些其他数据。我甚至曾经有过数据访问层必须加载依赖项对象的时间。缓存可以解决其中的一些问题,重新构建您的数据/模型可以解决其他问题。当然。但有时候,考虑到性能或其他问题,传递ID更有意义。
总而言之,首选将域对象传递给业务层。但是要意识到,出于其他原因,你可能最好不要传递ID,不幸的是,你的规则需要有例外。
答案 1 :(得分:1)
在合理的任何地方,将策略与实现分离是有意义的。我会说,如果您打算使用某种ORM,请传递业务对象的实例。