この命名の問題の解決策を見つけようとしましたが、Web上のどこにも同様の使用法を見つけることができませんでした。ドメインモデルにデザインフローがあるか、いわゆる「ValueObjects」に適切な名前を使用していない可能性があります。
以下をお読みください。
CQRSパターンのドメイン駆動設計を使用します。以下は、ドメインモデルがどのように設計されたかです。
PS関連はありませんが、参考までに、アプリケーションはASP.NET MVCを使用し、コントローラーはサービスレイヤーと通信します。DTO(データ転送オブジェクト)はMVCコントローラーに渡されますが、これは上の図にはありません。
問題は、「ValueObject」を正しく使用していないことです。Martin Fowlerの定義によると、私たちのValueObjectsはValueObjectの真の表現ではありません。 http://martinfowler.com/bliki/ValueObject.html
たとえば、ValueObjectsにはIDがあります。
public class NoteValue
{
public int Id { get; set; }
public string NoteName { get; set; }
public string NoteNumber { get; set; }
public DateTime NotExpiry { get; set; }
}
これらのValueObjectは、コマンド、AggregateRoots、およびドメインエンティティ間でデータを伝送するだけです。たとえば、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;
}
AggregateRoot:
Public IList<NoteValue> GetNotesValues()
{
return this._notes.ToValueObject();
}
指示 :
var motesValues = notesAggregate.GetNotesValues();
これらのいわゆる「ValueObjets」の適切な名前を見つけるのに苦労しています。これらもDTOではないようです。また、サービスレイヤーで使用されるDTOと区別できるようにしたいと考えています。具体的には、これらのタイプのオブジェクト(ValueObjects)に呼び出すことができる適切な名前を知りたいと思います。どんな考えでも大歓迎です。