繁体   English   中英

域驱动的设计可以重视对象的引用/嵌入实体

Domain driven design can value objects reference / embed an entity

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在理解ddd值对象时遇到了一个小问题,因此我的领域提出了几个问题,我确实需要帮助解决它们,

第一个问题:

可以说我有一个car实体和一个wheel值对象, wheel有两个实体,分别是rubberrims所以问题是车轮是否允许在其中包含实体?

例如:

namespace Domain\ValueObjects;

class Wheel{

    private $rim;

    private $rubber;

    public function __construct(Domain\Models\Rim $rim, Domain\Models\Rubber $rubber){
        $this->rim = $rim->toArray();
        $this->rubber = $rubber->toArray();
    }
}

第二个问题:

当我将car从基础结构映射到实际的领域模型时,如果我想说要返回轮辋,我将如何映射轮辋,换句话说,我将如何从车轮上构造轮辋类型的对象? 它是像public static function fromNative()静态函数一样的public static function fromNative()

注意 :

更具体地讲第二个问题,正如您在构造值对象时可能会注意到的那样,即将对象设置为array本机类型,因此我从ODM删除了映射责任,这是一种好习惯还是我应该将责任留给ODM

1 个回复

在回答您的第一个问题时,值对象表示一个没有身份的对象,并且只能通过其值进行比较。 实体具有同一性,因此即使它们的值相同,它们从根本上还是不同的对象。 因此,在您的方案中,一旦将实体包含在值对象中,便不再拥有值对象,因为您不能仅根据值进行比较。

但是,如果轮辋和橡胶是有价值的对象,那么拥有复合车轮有价值的对象就可以了。

对于第二个问题,如果您要问如何从数据层内部创建一个具有值对象的实体,那么我建议您从ODM中进行(如果可能)。 有时可能需要自定义映射,具体取决于它的复杂程度。 我绝对会避免将任何服务于基础结构问题的方法添加到域对象中。

2 域驱动设计中值或实体类型的存储库

我正在阅读有关域驱动设计中的存储库和Microsoft微服务体系结构模式的信息,他们都同意我每个聚合根都应该有一个存储库。 我通常对此表示同意,但是我有一个命名问题。 聚集到存储库为... 实体是??? 值是??? 在我的特定情况下,我在营销网站的上下文中有一个Prod ...

3 领域驱动设计 - 值对象的更新

我对 DDD 很陌生,我仍在阅读它。 在阅读时,我对聚合与其他聚合共享一些数据有一些疑问。 例如,假设我正在开发一个在线商店,我将对 Account 聚合和 Order 聚合建模。 现在,假设 Order 聚合确实需要 Account 聚合的某些数据来完成所有业务案例。 严格遵循 DDD,我应该对 ...

4 在域驱动设计中,存储库模式是否维护对对象的引用?

我了解到,存储库模式抽象了域对象的持久性,使开发人员可以从持久性存储中读取/写入/删除对象,而无需知道对象的存储方式(SQL,NoSQL,平面文件等)。 我非常喜欢存储库模式,并发现它在许多情况下都能很好地工作,例如,从持久性逻辑中抽象业务逻辑,允许在适当的地方延迟加载对象等。 但是,我 ...

5 域驱动设计:基础架构或存储库可以使用域对象吗?

考虑到域驱动设计,基础结构或系统可以使用域的对象(值,实体等),还是应将其应用于依赖倒置,以便基础结构仅依赖于自身定义的接口? 仓库呢? 是否同样适用? 是否违反基础架构,存储库或系统代码取决于域? (A)基础结构取决于域的示例代码: (B)基础结构不依赖域的示例代码 ...

6 实体,域驱动设计的更新

可以说我有一个已在UI上更新了一些值的订单(为了确保保存,它们可以/不能) 1.我们如何验证所做的更改? 是否应该验证将订单送回服务层的DTO的完整性? 验证完成后? 服务如何返回验证错误? 我们是否组成一个ReponseDTO对象并像这样返回它 ResponseDTO sa ...

7 实体框架和领域驱动设计

在花了几天时间尝试使用 EF 和 DDD 设置一个简单的应用程序后,我不得不说我感到非常沮丧,并认为我最好使用 Linq-to-SQL 而忘记了 DDD 和 EF。 与英孚 a) 你不能有合适的只读集合 b) 当您从一组子项中删除某些内容时,您经常会得到无法更改关系,因为一个或多个外键属性是不 ...

8 域驱动设计中实体的每个属性是否都是值对象?

我正在阅读“域驱动设计的模式,原理和实践”。 该书建议, Entity属性应为值对象,以便对域的通用语言建模。 我看过许多示例,例如EmailAddress或Age ,仅具有一个用于建模域概念的字段。 我对此感到困惑。 Entity的每个属性都是值对象吗? 当我们可以使用普通语言提供的 ...

9 AggregateRoot 可以是 DDD(域驱动设计)中实体的子级吗?

我继承了一个使用领域驱动设计架构的项目,我对 DDD 知之甚少。 我已经阅读了很多关于它的博客和文献。 目前,我有 3 个具有以下图形关系的域模型:父级 --> 有很多子级 --> 有很多 GrandChildren。 我正在使用 EF Core 2.1 来建立关系并将数据保存到数据库中 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM