2011-10-10 57 views
2

我注意到,我的存储库是否将对象或基元作为参数,或者CREATE方法是否只返回int(来自数据库的ID)或完整对象,实际上没有任何押韵或理由。储存库应该使用对象还是基元?

所以我的问题是,如果存储库传递并返回对象或基元?你可以就这件事提供什么建议?你能分享任何陷阱或经验吗?

例子:

public class ProductRepository : IProductRepository 
{ 
       // Pass in the whole object to the repo method...? 
    public int Add(Product product) 
    { 
     // return just the productId...? 
    } 

        // Pass in the individual primitive values...? 
    public Product Add(string productName, decimal productPrice, string description) 
    { 
     // return the whole Product object...? 
    } 
} 

那么如果从多个对象所需的信息?当然,从OOP的角度来看,最好在这里传递物体,不是吗? (我是面露这里...)

public int Add(int merchantId, Product product) 
{ 
    // database call needs merchant info... 
} 

public int Add(Merchant merchant, Product product) 
{ 
    var merchantId = merchant.ID; 
    // database call needs merchant info... 
} 

回答

2

存储库和工厂是不同的概念。工厂负责创建对象;一个存储库负责将已创建的其他对象添加到数据存储中。

从这个角度来看,存储库不应该负责创建对象,因此没有理由对原始值进行操作。

5

normaly很短的时间后,你会看到(如果你使用多个存储库),这是一个模式本身,并且可以在某种基类来重构(用于数据访问)。 但是为了做到这一点,您将无法为添加/更新等提供扩展参数(并且您也不应该 - 只需考虑具有10个以上属性的对象),而只需要使用对象本身的模式。

因此,使用选项1)

0

信息库的工作原理上的实体,而不是原始的领域。原始字段通常通过数据访问从实体中提取,这是存储库下的一个抽象层。因此,要回答您的问题,请始终使用对象 - 您的原始字段是数据访问层的实现细节,并且没有业务充当存储库接口中的参数,除非它们是查询过滤器的一部分。

相关问题