2017-02-02 5 views
0

私はこの佐賀クラスコードを以下のように持っており、質問部分はコードの中にコメントされています。ユビキタスな言語やその他の詳細を削除して読みやすくするために、コードの簡素化を心に留めてください。BusSend()を使用して、Saga Handler内のAPIサービスを使用

public class MessageSaga : Saga, 
    IPointBy<SendMessageCommand>, IHandle<RequestProcessingCommand> 
{ 
    private readonly IServices _services; 

    public MessageSaga(IServices services, 
     IBus bus, IEventStore eventStore, IRepository repository) 
     : base(bus, eventStore, repository) 
    { 
     _services = services; 
    } 

    public void Handle(SendMessageCommand message) 
    { 
     var msg = MessageAggregate.CreateNew(message.Id, message.Text); 
     Repository.Save(msg); 

     // This is my Question #1 
     var request = new RequestProcessingCommand(message.Id, message.Text); 
     Bus.Send(request); 
    } 

    public void Handle(RequestProcessingCommand message) 
    { 
     var item = Repository.GetById<MessageAggregate>(message.Id); 

     // This is my Question #2 
     var result = _services.ProcessMessage(message.Text); 
     var response = ProcessItem.Generate(item, result); 
     Repository.Save(reponse); 
    } 
} 

ので、上記のコードでは、私は2つの質問があります:「バス」は佐賀クラスで提供されているので、質問番号1では

を、これが使用する正しい方法ですBus.Send ()を他のハンドラにリンクするか、これをAggregateクラスの中に入れるべきですか?

2番目の質問と同様に、私はドメイン外にこの "_services" Web APIを持っています。これはハンドラ内で使用するのが正しい方法ですか、これをAggregateクラス内にする必要があります。

私のコードはすべて完璧に動作し、問題なく負荷テストを実行します。何とか、ハンドラが簡単なイベント保存であると思われるので、私は疑問を感じます。ありがとう。

答えて

0

ドメインモデル(集約)のの外側にのインフラストラクチャに関する懸念を残すことをお勧めします。考えてくださいonion architecture。基本的な考え方は、モデルapiがモデルとそれが実行されているコンテキストとの境界を作成することです。

考慮:ドメインモデルにbusまたは_serviceを導入する場合、ドメインロジックのテストには、ビジネスロジックを評価しようとするときに必ずしも気にする必要はありません。

関連する問題