2010-10-01 12 views
5

Mam ogólną koncepcję CQRS, ale mam kilka pytań, jeśli chodzi o wyjście poza przykładowy kod i slajdy, które są tam, aby poradzić sobie z problemami świata rzeczywistego.Walidacja i naprawa błędów w CQRS

  1. Validation

    Kiedy trzeba zrobić walidację polecenia, które obejmuje sprawdzanie wartości z bazy danych, co zrobić? Zarejestruj się w usłudze, muszę podać unikalny adres e-mail. Jeden z argumentów, jaki słyszałem, jest taki, że jest bardzo mało prawdopodobne, że użytkownik wprowadzi zduplikowany adres e-mail, więc po prostu obsłuż go podczas przetwarzania polecenia i wyślij wiadomość e-mail z napisem "przepraszam" lub sugeruje zresetowanie hasła. W związku z tym proces ten unika konieczności posiadania modelu readmodel w celu walidacji. Ale jak sobie radzisz z duplikatem w obsłudze komend? skąd wiesz, że to duplikat? sprawdź readmodel? równie dobrze możesz to wykorzystać w pierwszej kolejności dla lepszej użyteczności.

  2. Zmiany błędów funkcjonalność/mocujących

    Co się dzieje, gdy trzeba zmienić sposób, w jaki działa polecenie, lub naprawić błąd? W filozofii "tylko dołącz", co mam zrobić ze wszystkimi starymi komendami i procedurami obsługi komend? Nie mogę zmienić ich nazwy na _legacy i ukryć ich, w przeciwnym razie moja deserializacja zdarzeń nie będzie działać. Jakie są eleganckie rozwiązania, aby sobie z tym poradzić?

Dzięki

Odpowiedz

4
  1. Zobacz http://codebetter.com/blogs/gregyoung/archive/2010/08/12/eventual-consistency-and-set-validation.aspx i cqrs listy dla różnych dyskusjach dotyczących tego samego tematu dyskusyjnych.
  2. Wersjonowanie zdarzeń (nie ma potrzeby wersjonowania poleceń w tym samym sensie co wersja zdarzenia) jest również omawiane na liście mailingowej cqrs. Zdarzenia są odtwarzane, aby przejść do bieżącego stanu agregatu, a nie poleceń. W ten sposób twoja funkcjonalność może ewoluować. Nie ma sposobu na zmianę przeszłości, ale istnieją sposoby na zmianę teraźniejszości/przyszłości. W tym przypadku musisz zacząć śledzić stan w inny sposób, podać wyraźne polecenie. W przypadku nowych właściwości dla zdarzeń wystarczy podać wartości domyślne, tak jak w przypadku nowej kolumny bazy danych. Jeśli te nowe wartości są oparte na stanie już obecnym, modeluj jawne polecenie, aby je wstępnie obliczyć. Zaletą jest to, że możesz to zrobić asynchronicznie, podczas gdy aktualizacja bazy danych zmusza cię również do zmiany kodu. Jak to działa, lepiej zapytać na liście mailingowej cqrs. Jedno ostrzeżenie! Nie należy zbyt lekko przyjmować źródeł zdarzeń. Możesz uzyskać tylko dzięki CQRS. Widzę, że ludzie przełączają się na CQRS + ES, gdy większość czasu CQRS zrobi.

Udaj się na groups.google.com/group/dddcqrs i uzyskaj pomoc. Kolejnym przydatnym zasobem jest cqrsinfo.com