0

ドメイン駆動設計で次のパターンが意味があるかどうか知りたいです。

ドメインレイヤーは、モデルとリポジトリで構成されています。アプリケーション層は、ユーザーインターフェイスから、またはModel-View-Controllerパターンのコントローラーからのクエリを処理するサービスで構成されます。

構造の詳細:

//アセンブリモデル:
パブリッククラスフレーズ
{{
    public int PhraseId {get; プライベートセット; }
    public string PhraseText {get; プライベートセット; }

    public Phrase(stringphraseText){this.PhraseText =phraseText; }

    public void SetId(intphraseId){this.PhraseId =phraseId; }
}

//アセンブリリポジトリ(アセンブリモデルを参照):
パブリックインターフェイスIPhraseRepository
{{
    Phrase SavePhrase(フレーズフレーズ);
    フレーズGetPhrase(intphraseId);
}

//アセンブリサービス(アセンブリモデルとリポジトリを参照):
パブリッククラスPhraseService
{{
    プライベートIPhraseRepository_phraseRepository;
    public PhraseService(IPhraseRepositoryphraseRepository)
    {{
        _phraseRepository =phraseRepository;
    }
    public Phrase SavePhrase(stringphraseText)
    {{
        フレーズフレーズ=_phraseRepository.SavePhrase(new Phrase(phraseText));
        //メールの送信、ロギングなどの他のことを行う。
        //..。
        フレーズを返す;
    }
}

特に、メソッドをPhraseエンティティクラスに移動することは理にかなっていますか?その場合、それはどのように呼ばれますか?

編集:

上記の例は、moffdubからの回答とAdeelAnsariからのコメントの後に変更されています。変更が強調表示されます

追加されたIPhraseRepository.GetPhrase(phraseId)と、それをどのように含めるかについてお聞きしたいのですが。

4

2 に答える 2

1

リポジトリは、文字列ではなくフレーズを受け取る必要があります。SavePhrase メソッドが Phrase を返す理由もわかりません。私はそのようなメソッドを void メソッドにする傾向があります。

また、ドメイン モデルのすべてのプロパティに public の getter と setter を持たせることにも注意してください。これにより、貧血ドメイン モデルにつながる可能性があります。

于 2009-01-17T00:48:54.987 に答える
0

いくつかの考え:

SetId(int phraseId) は public であってはなりません

フレーズは、SetId(..) を公開しない IPhrase (または IPhraseAggregate) を実装できます。

SavePhrase(フレーズ フレーズ) は、フレーズ エンティティへの参照が保存後に「有効」のままである場合、void を返すことができます (すべきですか?):

public void SavePhrase(string phraseText)
{
    Phrase phrase = new Phrase(phraseText); // NOTE: keep a reference to phrase
    this._phraseRepository.SavePhrase(phrase); // NOTE: returns void

    return phrase; // NOTE: assume the repository sets the phrase.PhraseId
}
于 2009-07-09T10:11:15.167 に答える