2009-02-27 54 views
2

比方说,我有一个这样的方法在我的业务层:哪个层应该说域模型?

// 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.  
} 

如果这些方法都将域模型的实例或者只是主键?

回答

2

我经常与此纠缠。我通常说你的业务/服务层应该将域对象作为参数。

如果我们在说网络,你的网络层将有ID。它可能会从服务层实例化或检索对象的一个​​实例。所以把它传递给你的服务层是有意义的。

但是,通常有时候你最终会重复检索对象。有时候你的服务会加载一个对象,因为一些额外的数据没有被捕获到web层中。我甚至有时候数据访问层必须加载依赖对象。缓存可以解决其中一些问题,重新构建数据/模型可以修复其他问题。当然。但有时候,考虑到性能或其他问题,传递身份证只是更有意义。

总而言之,更愿意将域对象传递给业务层。但是要意识到,由于其他原因,您最好传递身份证,而且不幸的是,您的规则需要例外。

1

凡是合理的地方,将策略与实施分离是合理的。我会说,如果你打算使用某种ORM,传递你的业务对象的实例。

相关问题