Zaakceptowanych odpowiedź jest błędna. I pomimo faktu, że John używa CRUD jako przykładu wzorcowego przy użyciu CRUD, nie są złe dla SOA.Oto problem z architekturą SOA opisaną przez Johna: zachęca ona do zwiększenia złożoności na poziomie usługi, co w efekcie prowadzi do zmniejszenia obsługi wielu przypadków użycia. Jednym z głównych powodów, dla których budujemy interfejsy API, jest zapewnienie dostępu do wielu aplikacji, w tym miejscu główny zwrot z inwestycji ma na celu budowanie interfejsów API.
Załóżmy na przykład, że mamy interfejs API blogu. Powiedzmy, że dajemy użytkownikom możliwość pisania postów, dodawania zdjęć i umieszczania komentarzy na jednym ekranie naszej zewnętrznej aplikacji. W wizji Jana SOA będzie pewnie zalecamy budujemy naszą API do korzystania z jednego połączenia, aby zrobić wszystkie te rzeczy, więc byłoby mniej rozmowny i bla bla bla ... tak:
{
"post_title": "New Post",
"post_content": "Some Stuff....",
"comments": [{
"comment": "This is right on!",
"userId": 101
}, {
"comment": "I agree.",
"userId": 105
}],
"images": [{
"imgURL": "http://some.img.com/1"
}, {
"imgURL": "http://some.img.com/2"
}]
}
Teraz są oczywiście trzy różne obiekty danych, które muszą być oddzielnie przechowywane tutaj: post, komentarze i obrazy. Z perspektywy magazynu danych wpis trafia do tabeli POSTS komentarzy do tabeli KOMENTARZE i obrazów do tabeli IMAGES. Jeśli więc budujemy naszą usługę zgodnie z lokatorami SOA, tak jak je opisuje John, to wykonujemy nasze jedno połączenie z naszym obiektem i to właśnie usługi, które usiłują stworzyć stanowisko, które na przykład działa dobrze, próbuje stworzyć komentarze, które działają dobrze, ale kiedy dojdziemy do obrazu, usługa zdaje sobie sprawę, że jeden z adresów URL obrazu jest wadliwy, nie udaje się. Więc nasza usługa zwraca błąd? Mimo że 3 inne części są teraz pomyślnie przechowywane w naszym magazynie danych? Czy wracamy i cofamy wszystkie części, które są skuteczne? Co się stanie, jeśli magazyn danych już zatwierdził zmiany i nie możemy go wycofać?
Połączyliśmy to z faktem, że gdybyśmy zrobili to "bardziej rozmowni" i przesłaliśmy je indywidualnie, możemy teraz ponownie korzystać z tych usług w innych aplikacjach bez konieczności ponownego pisania jakiejkolwiek części usługi.
Zła część skonsolidowanych usług polega na tym, że sprzedaje się pomysł, że usługa powinna nigdy nie zawieść ... co jest śmieszne. Zawsze znajdzie się przypadek, w którym coś się nie powiedzie i konsolidując wszystko w jedną usługę, zwiększysz swoją złożoność i zwiększysz swoją zdolność do porażki.
Porównałbym tę wersję SOA do niedociągnięć, które już udało nam się zrealizować w budowaniu obiektów Boga w programowaniu obiektowym. https://en.wikipedia.org/wiki/God_object
Znamy lepiej niż to, więc dlaczego je odświeżamy? Skonsolidowane lub Boskie usługi są złym pomysłem, podobnie jak obiekty Boga. Mówię, buduj swoje usługi, aby zrobić jedną rzecz i rób to dobrze dla tylu zastosowań, ile możesz, a twoja usługa będzie dobra.
Myślę, że będę musiał przeczytać artykuł, aby uzyskać odpowiedź: od kiedy traktuje się kursor (moveNext) jako operację CRUD? – mikemanne