Komutların hiçbir şey döndürmemesi gerektiğini anlıyorum.
Bu bir görüş, ama tamamen taş değil. HTTP'de yazmaları (PUT, POST, DELETE) düşünün - bu iletilerin tümü, kaynak değiştirme durumunun istenmesini isteyen iletiler oldukları için komutlardır ve yine de yanıtları döndürürler.
Peki Komut Veri Yolu'nun ötesindeki bir hatayı nasıl ele alırsınız? (Örneğin, bir kullanıcı daha önce aynı kullanıcı adı / e-posta ile 1 saniye önce kayıt yaptı).
Bu komutun başarısız olduğunu nereden biliyorsunuz ve hatayı nasıl biliyorsunuz?
Dolayısıyla, komut işleyicisiyle doğrudan iletişim kurduğunuz bir durumda, döndürülen bir mesaj, komutun alındığını ve işlendiğini kabul etmenin mükemmel makul bir yoludur.
Doğrudan hedefle iletişim kurmanızı engelleyen bir otobüs gibi bir ara katman yazılımı kullanıyorsanız, o zaman asenkron mesajlaşma desenlerine bakmanızı öneririm - komut işleyicisine bir mesaj göndermesini nasıl sağlıyorsunuz? arayan?
Bir fikir, komuta sonucuna abone olmaktır; bu Hohpe'nin Kurumsal Entegrasyon Kalıplarındaki bazı fikirlerden ödünç alır. Temel fikir, istemci gönderilen komut mesajına aşina olduğundan, komut mesajının bir sonucu olarak yayınlanan tüm yeni mesajlara abone olmak için iyi konumlandırılmış olmasıdır. Komut işleyici, verileri kayıt defterine kaydettikten sonra, değişikliğin başarılı olduğunu bildiren olayları yayınlar ve istemci bu olaylara abone olur - mesajdaki çeşitli tanımlayıcıların çakışmasını dikkate alarak doğru olayları tanır (nedensel kimlik, korelasyon kimliği vb.).
Alternatif yaklaşımlar biraz daha doğrudan. Mesaj başarılı bir şekilde işlendikten sonra komut işleyici tarafından çağrılabilen bir geri çağırma eklemek olacaktır.
Çok benzer bir alternatif, komut işleyicisinin onay yazması için komut iletisinde yer ayırmaktır - istemci zaten söz konusu komut iletisine sahip olduğundan, devre zaten tamamlanmıştır. " Söz " veya " tamamlanabilir gelecek" düşünün . Mesaj, komut işleyicisine onayı nereye yazacağını söyler; bu, istemciye (geri sayım mandalı) onayın mevcut olduğunu gösterir.
Ve elbette, doğru şeyi basitçe yapma yolunda ilerliyor gibi görünen ara katman yazılımını kaldırma ek seçeneğiniz var.
Örneğin, bir kullanıcı daha önce aynı kullanıcı adı / e-posta ile 1 saniye önce kayıt yaptı
Kullanıcı kaydını kasıtsız olarak gerçekleştiriyorsanız, bir yanıt gözlenene kadar iletilerin yinelenmesi en az bir kez teslim edilmesini sağlamanın yaygın bir yoludur.