Nasza firma rozpoczyna dość dużą inicjatywę SOA. Robimy wiele rzeczy, dobrze: dobra komunikacja; pieniądze na narzędzia, w stosownych przypadkach; i przynieśliśmy trochę dobrej wiedzy, aby pomóc nam w przejściu.
Staramy się opracowywać standardy, które możemy stosować jako grupa, a jeden z proponowanych standardów mnie trochę niepokoi:
Standaryzowaliśmy wzorzec, w którym każda operacja pobiera obiekt żądania i zwraca obiekt odpowiedzi.
Zdaję sobie sprawę, że dla wielu ludzi jest to standardowe podejście, ale pytam, dlaczego mam się tym przejmować? (Nie jestem tak dobry z otrzymaną mądrością, potrzebuję trochę powodu).
Większość usług, które będę świadczyć, to proste wyszukiwanie metadanych organizacyjnych. Na przykład znajdź zasady bezpieczeństwa dla konkretnego użytkownika. Wymaga to identyfikatora użytkownika i nic więcej. Standard mówi mi, że powinienem zawinąć to żądanie w obiekt, a zwiniętą zasadę w obiekt odpowiedzi.
Mój niepokój potęguje spojrzenie na WSDL generowany z naszych kontraktów. WCF automatycznie generuje komunikaty żądań i odpowiedzi i otacza nawet obiekt żądania / odpowiedzi.
W pełni rozumiem, że jeśli składasz złożone żądanie, wówczas złożony obiekt wejściowy jest uzasadniony. Tak byś zrobił, nawet gdyby usługi nie były zaangażowane.
Moje pytanie brzmi: dlaczego powinienem automatycznie zawijać wnioski i odpowiedzi, gdy:
- Sprawia, że proste usługi stają się mniej wyraziste
- Zrobiłbyś to mimo wszystko dla złożonej usługi
- WCF i tak tworzy komunikat żądania / odpowiedzi
Znalazłem następujące argumenty za tym podejściem:
Obsługuje wersjonowanie, umożliwiając wstawianie opcjonalnych parametrów do obiektu żądania.
Wcześniej zrobiłem sporo COM i uważam to za prawie anty-wzorzec dla wersji. W niektórych przypadkach przypuszczam, że to pomogłoby, ale spodziewam się, że tam, gdzie to by pomogło, i tak masz już obiekt parametru.
Umożliwia izolowanie wspólnych danych i zachowań do klasy podstawowej
Ten niesie ze sobą trochę wagi.
Odwraca ludzi od zachowań w stylu RPC i kieruje się w stronę komunikatorów
Przeczytałem to na stronie Microsoftu i usłyszałem od naszego guru, ale wciąż nie mam jasnego pojęcia, co one oznaczają i dlaczego jest to cenne. Czy to naturalnie wyglądające interfejsy sprawiają, że ludzie często zapominają, że dzwonią do zdalnej usługi?
Patrzę na refaktoryzację podpisów być może 300 metod, więc jest to trywialna ilość bólu. Jestem wielkim fanem konsekwencji we wdrożeniach, więc jestem gotów wziąć na siebie ból, to po prostu pomoże wiedzieć, że ostatecznie wszystko będzie tego warte.
Myślę, że notatki Martina Fowlera na temat obiektu transferu danych są tutaj odpowiednie.
To samo może dotyczyć wniosków. Co do RPC i dlaczego jest zły:
Myślę, że to prawda, ale nie główny powód. Innym powodem do uniknięcia RPC jest to, że może zachęcać ściśle powiązanych klientów i usług.
źródło