2017-02-02 44 views
0

我在下面有這個佐賀課程代碼,問題部分在代碼中註釋。請注意代碼的簡化,因爲我刪除了無處不在的語言和其他細節以便於閱讀。使用Bus.Send()和使用佐賀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); 
    } 
} 

所以,在上面的代碼中,我有兩個問題:

在題號1,因爲「公交車」是在佐賀類可用,這是使用Bus.Send的正確方法()鏈接到其他處理程序,還是應該在Aggregate類中進行此操作?

如第二個問題,我在域外有這個「_services」Web API,這是在處理程序中使用它的正確方法,還是應該在Aggregate類中進行此操作。

所有我的代碼完美地工作,我甚至做沒有任何問題的負載測試。不知怎的,我感到懷疑,因爲處理程序假設是簡單的事件保存。謝謝。

回答

0

我的建議是保持基礎設施問題你的域模型(聚集)之外。認爲onion architecture。基本概念是模型API在模型和運行的上下文之間創建了一條邊界。

考慮:如果您開始在您的域模型中引入總線或_service,那麼您的域邏輯的任何測試都需要測試雙打您在試圖評估業務邏輯時不一定關心。