Jarosław
S.
Kierownik Działu
Rozwoju Aplikacji
.NET, ITeam SA
Temat: Dobre praktyki w zakresie korzystania z usług (np. WCF) z...
Witam,mam pytanie o dobre praktyki w zakresie "konsumowania" usług z poziomu ASP.NET.
Konkretnie chodzi mi o następujący hipotetyczny scenariusz:
1. Tworzę nową aplikację z interfejsem web-owym.
2. Chcę być modny i zrobić aplikację opartą o "SOA" :-).
3. W procesie biznesowym wspomaganym przez system jest operacja
"Rejestruj wniosek", wiążąca się z zarejestrowaniem dużego zestawu danych (powiedzmy że 250 - 500 pól dotyczących kilku encji - szczegółowe dane kilku autorów wraz z publikacjami). Operacja ta ma być odwzorowana jako metoda (metody) usługi.
4. Liczba pól wymaganych przez metodę "Rejestruj wniosek" jest tak
duża, że praktycznie nie ma możliwości wprowadzenia wszystkich wymaganych danych na pojedynczym formularzu.
5. Oprócz metody "Rejestruj wniosek" usługa będzie posiadała metody pozwalające na modyfikowanie zarejestrowanych danych wniosku.
I tutaj pojawia się moje pytanie o to, jak powinien wyglądać interfejs takiej usługi aby był zarówno "poprawny", jak i efektywny?
Jeśli będę chciał być "purystą", to zrobię w usłudze 2 metody: "Rejestruj wniosek" i "Modyfikuj wniosek", które będą operowały na całości danych tego wniosku. Jednak wtedy, ponieważ
dane nie mieszczą się na pojedynczej formatce ASP.NET, będę musiał wprowadzić jakiś dodatkowy mechanizm ich buforowania po stronie aplikacji. Trzymanie dużej ilości danych w sesji jest zdecydowanie złą praktyką jeśli chodzi o tworzenie aplikacji ASP.NET, z kolei tworzenie po stronie aplikacji ASP.NET dedykowanego "magazynu" na dane wniosku przed ich wysłaniem do usługi wydaje się być nadmiarowe. Pomijam już fakt, że każdorazowa edycja pojedynczego pola wniosku będzie się wiązała z przesłaniem do usługi pełnego zestawu danych.
Z drugiej strony mogę zrobić w usłudze szereg metod, wykonujących operacje na podzbiorze danych wniosku (np. "Rejestruj
wniosek", "Dodaj autora", "Usuń autora", "Edytuj autora", "Dodaj
publikację", "Usuń publikację" itp.)
Takie rozwiązanie wydaje się jednak być typowym przykładem "CRUD-owego" interfejsu usługi, co jest złą praktyką w przypadku
rozwiązań SOA.
Pewnie możliwych rozwiązań jest więcej. I tutaj proszę o pomoc - jakie rozwiązanie będzie w tym wypadku zgodne ze sztuką i dobrymi praktykami - zarówno jeśli chodzi o budowę aplikacji ASP.NET, jak i warstwy usługowej?Jarosław Szczegielniak edytował(a) ten post dnia 14.07.08 o godzinie 17:54