首页 / PHP / php – 域驱动设计,实体延迟加载
php – 域驱动设计,实体延迟加载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 域驱动设计,实体延迟加载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1440字,纯文字阅读大概需要3分钟。
内容图文
![php – 域驱动设计,实体延迟加载](/upload/InfoBanner/zyjiaocheng/762/c5ed2e62a1be433a8070e57dd79d74b8.jpg)
我对领域驱动设计(DDD)相当陌生,但我所理解的是你对应用程序服务说话,这是你的“模型”的入口.该服务可以与使用源(文件,数据库等)来获取数据的存储库进行通信.存储库返回一个实体.
这就是我所得到的全球理念.服务知道存储库但不知道实体等.
现在我有以下问题.
我有一个实体用户,它类似于以下内容(仅作为示例)
<?php
class User
{
protected $name;
protected $city_id;
public function getCity()
{
// return $city_entity;
}
}
getCity()函数返回城市实体.我希望此函数使用延迟加载,因此在使用用户存储库时注入CityEntity并不是非常懒惰的加载.
我带来了两个问题的解决方案.但我觉得两者都是针对DDD的负责人.
我提出的第一个解决方案是在用户实体中注入城市存储库,这有缺点:如果您需要更多存储库,则必须在实体中加载它们.它看起来像answer,但它看起来像是我的存储库的包装器.那么为什么不注入存储库呢?
第二种解决方案,您为实体提供服务定位器.这样做的缺点是除非您阅读代码,否则您不再需要哪些存储库.
所以现在问题是,在保持DDD原理完整的同时,提供延迟加载的灵活性的最佳方法是什么?
解决方法:
DDD的一个主要观点是,您的域模型应该只表达有界上下文的无处不在的语言来处理业务规则.
因此,在DDD实体中,延迟加载是反模式.有一些原因:
>如果聚合只包含确保业务不变量所需的数据,那么它需要全部且数量很少,因此eager loading更好.
>如果您延迟加载数据,您的客户端必须处理那些relevant in business terms的特殊路径
>您可以使用shared identifiers来处理聚合之间的引用
>使用专用查询进行投影目的很便宜(通常称为read-model)
恕我直言,你永远不应该使用DDD实体作为数据访问技术:使用DTO.
有关详细信息,请查看Vaughn Vernon的Effective Aggregate Design.
内容总结
以上是互联网集市为您收集整理的php – 域驱动设计,实体延迟加载全部内容,希望文章能够帮你解决php – 域驱动设计,实体延迟加载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。