0

この命名の問題の解決策を見つけようとしましたが、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)に呼び出すことができる適切な名前を知りたいと思います。どんな考えでも大歓迎です。

4

1 に答える 1

3

これがあなたの質問に答えるかどうかはわかりませんが、うまくいけば正しい方向に向けることができます。

Dan Berg Johnssonによる値オブジェクトについての非常に良い話があります:http ://www.viddler.com/v/6939b23

効果的な骨材設計に関するVaughnVernonの論文もご覧ください:http://dddcommunity.org/library/vernon_2011

全体として、DDD(特にアーキテクチャレベルでCQRSを適用する場合)は、把握するのに時間がかかります。辛抱強く、読んで、学び、DDD /CqrsGoogleグループに参加してください

于 2012-12-13T07:50:19.833 に答える