我试图找到这个命名问题的解决方案,但我在网络上的任何地方都找不到类似的用法。可能是我们在域模型中有一个设计流程,或者我们根本没有为所谓的“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) 调用的适当名称。任何想法都非常感谢。