0

我试图找到这个命名问题的解决方案,但我在网络上的任何地方都找不到类似的用法。可能是我们在域模型中有一个设计流程,或者我们根本没有为所谓的“ValueObjects”使用适当的名称。

请阅读下文..

我们使用具有 CQRS 模式的领域驱动设计。下面是域模型的设计方式。

在此处输入图像描述

PS 不相关,但供您参考,我们的应用程序使用 ASP.NET MVC 和控制器与服务层通信。DTO(数据传输对象)被传入/传出到 MVC 控制器,这不在上图中。

问题是我们没有正确使用“ValueObject”。根据 Martin Fowler 的定义,我们的 ValueObject 不是 ValueObject 的真实表示。 http://martinfowler.com/bliki/ValueObject.html

例如,我们的 ValueObjects 有一个身份。

public class NoteValue 
{
    public int Id { get; set; }
    public string NoteName { get; set; }
    public string NoteNumber { get; set; }
    public DateTime NotExpiry { get; set; }
}

这些值对象只是在命令、聚合根和域实体之间传送数据。例如,AggregateRoot 只是基于域实体创建 ValueObjects,并将这些 ValueObjects 返回给命令层。

以下不是完整的实现。只是一个简单的例子来展示交互

AggregateRoot 扩展方法:

 private static IList<NoteValue> ToValueObject(this ICollection<Note> source)
 {
    var values = new List<NoteValue>();
    if (source != null)
         source.ForEach(i => values.Add(i.ToValueObject()));

    return values;
 }

聚合根:

 Public IList<NoteValue> GetNotesValues()
 {
     return this._notes.ToValueObject();        
 }  

命令 :

  var motesValues = notesAggregate.GetNotesValues();

我们正在努力为这些所谓的“ValueObjets”找到合适的名称。它们似乎也不是 DTO,而且我们希望能够与服务层中使用的 DTO 区分开来。具体来说,我们想知道可以为这些类型的对象 (ValueObjects) 调用的适当名称。任何想法都非常感谢。

4

1 回答 1

3

我不知道这是否能回答您的问题,但我可能希望为您指明正确的方向。

Dan Berg Johnsson 对价值对象进行了很好的讨论:http: //www.viddler.com/v/6939b23

还可以查看 Vaughn Vernon 关于有效聚合设计的论文:http: //dddcommunity.org/library/vernon_2011

总而言之,DDD(尤其是在架构级别应用 CQRS 时)需要一些时间来掌握。耐心点,阅读,学习,加入 DDD/Cqrs Google 群组

于 2012-12-13T07:50:19.833 回答