Jest to kluczowa zmiana w kontekście implementacji Sagi frameworka NServiceBus.
Kod Sagi w 4’tej wersji F# trzeba rozbijać na osobne klasy, które implementują interfejs IAmStartedByMessages lub IHandleMessages z konkretnym typem generycznym. Szczegóły takiego sposobu implementacji opisałem w szóstej części praktycznego przewodnika pokazującego, w jaki sposób można połączyć framework NServiceBus oraz język F#.
Kod Sagi w 5’tej wersji F# można napisać w taki sam sposób jak kod napisany w C#, przedstawiony w dokumentacji frameworka. Dzięki temu implementacja upraszcza się i jest spójna w obydwu językach.
Szczegółowy opis znajdziesz we wspomnianym już praktycznym przewodniku. Zwróć uwagę na konieczność utworzenia dwóch klas, które składają się na implementację Sagi NServiceBus:
Do implementacji NServiceBus Saga, z wykorzystaniem nowych możliwości języka F#, wystarczy jedna klasa, dziedzicząca dwa razy po tym samym interfejsie IAmStartedByMessages, który różni się tylko parametrem generycznym:
IAmStartedByMessages<OrderPlaced> - przetwarzanie wiadomości typu OrderPlaced
IAmStartedByMessages<OrderBilled> - przetwarzanie wiadomości typu OrderBilled
Ponieważ całość może znajdować się w jednej klasie, możemy uprościć kod, przenosząc logikę działania funkcji canShipOrder oraz shipOrder do metody ProcessOrder, która znajduje się w samej klasie.
F# 5 wprowadza wiele innych przydatnych nowości, natomiast z punktu widzenia implementacji Sagi zmiana opisana w tym artykule jest najistotniejsza. Jeśli NServiceBus Saga jest ważną częścią zaprojektowanych rozwiązań, to możliwość dziedziczenia po tym samym interfejsie różniącym się parametrem generycznym zachęca do kodowania całych rozwiązań w języku F#. Daje to ciekawą perspektywę na przyszłość :)
Tymczasem udanego oglądania materiałów z nadchodzącej konferencji!