假设我的业务层中有一个这样的方法:
// 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.
}
这些方法应该采用域模型的实例还是仅采用主键?
最佳答案
我经常为此苦苦挣扎。我通常说你的业务/服务层应该将领域对象作为参数。
如果我们谈论的是 Web,您的 Web 层将具有 ID。它可能会实例化或从服务层检索对象的实例。因此将其传递到服务层是有意义的。
但是,有时您最终会重复对象的检索。有时,由于 Web 层中未捕获一些附加数据,您的服务无论如何都会加载对象。我什至有过这样的情况:数据访问层必须加载依赖项的对象。缓存可以解决其中一些问题,重新构建数据/模型可以解决其他问题。当然。但有时,考虑到性能或其他问题,传递 ID 更有意义。
总而言之,更喜欢将域对象传递到业务层。但要意识到,出于其他原因,您可能最好传递 ID,但不幸的是,您的规则需要有异常(exception)。
关于language-agnostic - 哪些层应该使用领域模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/596236/