DAL:存储库边界问题

Posted

技术标签:

【中文标题】DAL:存储库边界问题【英文标题】:DAL: repository boundaries question 【发布时间】:2011-03-21 12:48:39 【问题描述】:

有一个 DAL 库公开了十几个存储库。每个实体一个存储库。有PersonRepositoryPhotoRepository

当我向存储库添加一个新方法并且方法处理实体时,很明显我必须把它放在哪里。如果我想要 CreatePerson 我会创建 PersonRepository::Create(...) 或者当我需要更新照片时我会创建 PhotoRepository::Update

但是当方法处理实体关系时,有时事情会变得一团糟。例如,我应该创建PersonRepository::AssignPhoto(PersonId, PhotoId) 还是应该创建PhotoRepository::AssingToPerson(PhotoId, PersonId)?

如果我很清楚(我认为 Person 是比 Photo 更重要的实体,所以我将创建 PersonRepository 方法),一些开发人员找不到合适的方法并倾向于在 PhotoRepository 中创建重复项。

您如何最大限度地减少此问题?

您可能同时创建了两种方法(PersonRepository::AssignPhotoPhotoRepository::AssignToPerson)(一个方法将调用委托给另一个实现它的方法)?或者我们是否应该在团队中有强大的存储库方法命名约定?或者我可能会改变存储库边界的方法?

【问题讨论】:

【参考方案1】:

在面向对象的世界中,我会拥有一个带有 AssignPhoto 方法的 Person 对象。

至少对我来说,在存储库上处理对象关系操作感觉像是一种程序方法。

【讨论】:

以上是关于DAL:存储库边界问题的主要内容,如果未能解决你的问题,请参考以下文章

具有存储库模式的实体框架 DAL、BLL

DAL 存储库模式使用 dapper 连接

为啥 DNN 中 DAL2 存储库的默认 GetById() 执行缓慢?

DAL 中的实体框架存储库模式,如何实现更新功能?

设计 DAL 和 BLL - 相关表的单个/多个数据存储库

ASP.NET MVC:BLL 和 DAL 到存储库设计