存储库或业务层是否应更新所有表?

时间:2012-01-27 05:23:04

标签: design-patterns repository-pattern business-logic

在我的项目中,我有一个Customers表,其中有3个外键到Addresses表。一个用于MainAddress,一个用于BillingAddress,一个用于ShippingAddress。

我正在使用CustomerRepository和AddressRepository的工作单元和存储库模式。

有时候我需要自己处理这些地址,但大多数时候它们都会成为Customers域对象的一部分。

我的问题是最佳做法设计问题。业务逻辑层是否应负责调用CustomerRepository和AddressRepository来添加/更新,或者CustomerRepository是否足够智能以添加/更新地址,以便BLL只需要调用“AddCustomer”或“EditCustomer”以及所有地址表是自动添加/更新?

1 个答案:

答案 0 :(得分:1)

我会让CustomerRepository也处理地址的更新。我假设您正在使用一个对象模型,其中客户对象具有使用a的通用地址集合 “有”关系(即客户有地址)。如果您在存储库的底层使用ORM,它将处理此对象及其关系的更新。我认为让每个存储库处理此关系的各个对象或您的业务逻辑需要处理此关系的更新没有任何好处。我只在直接使用地址时才使用AddressRepository。这是我对这个简单的“有一个”关系的例子的建议。有时会出现更复杂的关系,您希望让业务逻辑为您而不是存储库处理此问题。一个例子可能是对象分布在不同的数据存储中。