c# – 何时将某些实体分成不同的存储库?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 何时将某些实体分成不同的存储库?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1621字,纯文字阅读大概需要3分钟。
内容图文
我通常会尝试将所有相关实体保存在同一个存储库中.以下是两者之间具有关系的实体(标有缩进):
>用户
> UserPreference
因此,进入用户存储库是有意义的.但是,用户通常会链接到许多不同的实体,您将在以下示例中执行哪些操作?
>用户
> UserPrefence
>订单
>订单
>产品
订单与产品和用户都有关系,但您不会将所有4个实体的功能放在同一个存储库中.当您处理用户实体并收集订单信息时,您会怎么做?您可能需要有关产品的额外信息,并且ORM通常会提供延迟加载的功能.但是,如果您的产品实体位于用户实体的单独存储库中,那么这肯定会导致存储库之间发生冲突吗?
解决方法:
在Eric Evan的Domain Driven Design(http://domaindrivendesign.org/index.htm)中,你应该首先考虑一下你的Aggregates.然后,围绕这些构建存储库.
有许多技术可以处理彼此相关的聚合.我最常使用的那个是仅允许聚合通过只读接口相互关联. Aggregates背后的一个关键思想是,如果不通过root,就无法更改底层对象的状态.因此,如果产品和用户是模型中的根聚合,那么如果我通过用户 – >订单 – >产品获得产品,则无法更新产品.我必须从产品库中获取产品进行编辑. (从UI的角度来看,您可以看起来像用户 – >订单 – >产品,但是当您点击产品编辑屏幕时,您从产品库中获取实体.
当您从User-> Order-> Product查看产品(代码中)时,您应该查看无法更改产品基础状态的Product接口(仅获取没有集合)等等.)
根据您使用它们的方式组织您的聚合及其存储库.我可以看到User和Prodcut是他们自己的Aggregates并拥有自己的Repositories.我不能从您的描述中确定订单是属于用户还是独立.
无论哪种方式,当Aggregates关联时都使用readonly接口.当你必须从一个Aggregate交叉到另一个Aggregate时,从它自己的Repository中获取它.
如果您的存储库正在缓存,那么当您加载订单(通过用户)时,只从数据库加载产品ID.然后使用Product Id从Product Repository加载详细信息.您可以在加载订单时通过加载产品上的任何其他不变量来优化一点.
内容总结
以上是互联网集市为您收集整理的c# – 何时将某些实体分成不同的存储库?全部内容,希望文章能够帮你解决c# – 何时将某些实体分成不同的存储库?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。