2012-05-19 11 views
7

Potrzebuję wdrożyć logikę, która będzie pobierać dane z jakiegoś zdalnego źródła danych. Teraz muszę zdecydować, która koncepcja powinna być mi potrzebna: dostawca, repozytorium lub usługa.Porównanie repozytorium kontra dostawca kontra usługa

Właściwie nie bardzo dobrze rozumiem wszystkie wielkie różnice między nimi. Tak, wiem, że to repozytorium jest czymś więcej specyficznym dla danych i nie powinno zawierać żadnej logiki biznesowej. Dostawca dla drugiej ręki może zawierać pewne reguły biznesowe oprócz zarządzania danymi. Usługa może również zawierać logikę biznesową oprócz zarządzania danymi. Jaka jest różnica między usługą a dostawcą?

Z drugiej strony uważam, że korzystanie z usług jest lepszym podejściem, aby pokazać, że jest to abstrakcja dla zdalnego dostępu.

Podsumowując: wszystkie te podejścia wyglądają rozsądnie i całkowicie mnie to zmyliło. Będzie bardzo wdzięczny, jeśli ktoś mi pomoże.

+1

http://stackoverflow.com/questions/623090/jest-podobnie-podstawowym-wydawkowym-programie-asp-net -projektu –

+0

http://forums.asp.net/t /1649824.aspx?Provider+Model+vs+Repository+Pattern –

Odpowiedz

8

Repozytorium i usługa nie wykluczają się wzajemnie. W rzeczywistości są one często używane razem.

Warstwa usług znajduje się na wierzchu obiektów domeny i zapewnia interfejs dla operacji biznesowych. Zazwyczaj opisuje przypadki użycia twojej aplikacji. Warstwa usług używa repozytoriów do uzyskiwania obiektów domeny i delegowania do nich dalszego wykonywania, jeśli to możliwe.

Repozytorium działa jak zbiór trwałych obiektów domenowych. Dostarcza metod wyszukiwania właściwych obiektów przy użyciu pewnych kryteriów. Zapewnia również metody zapisywania tych obiektów.

Wdrożenia repozytorium na dziko różnią się nieco. Repozytoria mogą dostarczyć metody jak

List<Person> findPersonByName(String name) 

lub bardziej ogólne podejście z kryteriami obiektów

List<Person> find(Criteria criteria) 

Dodatkowa lektura: service layer, repository

nie znam z wzorcem dostawcy.

0

Wszystkie te podejścia wyglądają na rozsądne, a ja całkowicie pomylić z go.

Nic więc dziwnego, że jesteś zdezorientowany, ponieważ ludzie zdają się uciekać się do usług i dostawców do czegokolwiek i jego przeciwieństwo tych dni;)

Repozytorium wzór jest bardziej precyzyjnie zdefiniowane jednak: jest to zbiór obiektów tego samego typu, z którego można wysyłać zapytania, dodawać lub usuwać, wyświetlać jako kolekcję w pamięci dla osób dzwoniących, ale w rzeczywistości odwzorować ją w pamięci trwałej za kulisami.

Co ze znajdowaniem nazwy, która naprawdę przedstawia, co robi twój obiekt, zamiast używać rozwodnionych, szmacianych torebek pojęć? Jestem za wzorami i wspólnymi idiomami, które są natychmiast rozpoznawalne dla wszystkich programistów, ale nie widzę użycia słów, kiedy już nic nie znaczą ...

0

W prostych słowach masz usługę Service S, która używa repozytorium R dla operacji CRUD bazy danych lub operacji wyszukiwania. Załóżmy, że masz różne usługi S1, S2, S3, każdy ma takie same umowy (interfejs), ale różne implementacje, potrzebujesz dostawcy, który wybierze, którego użyć w jakim kontekście. Można zastąpić Wzorzec Provider za pomocą Dependency Injection więc kod jest połączony i nie mniej winny jest dla instanciating usługi, klient będzie instancję właściwą usługę z DI Container

0

Repository oddaje specyficzną logikę danych, aby uzyskać dane, na przykład ICustomerRepository mogą mieć implementacje SqlCustomerRepository, MySqlCustomerRepository. Jednak DataProvider analizuje logikę danych i wykorzystuje skonfigurowane środki do rozwiązania danych. Dane mogą pochodzić z bazy danych, płaskiego pliku lub bazy danych NoSql. Co więcej, konfiguracja DataProvider może być zmieniana w kontekście, w przeciwieństwie do implementacji repozytorium wstrzykniętego do usługi. Z drugiej strony, jak wyjaśnił Nefron, że Usługa działa w oparciu o logikę biznesową zdefiniowaną w jednostkach.

+0

Co powiesz na ogólne "zewnętrzne" operacje, takie jak "EmailSender"? Jaki byłby jego przyrostek? Z jednej strony nie jest repozytorium, a nie dostawcą danych, az drugiej strony nie jest wewnętrzną zależnością od aplikacji, więc zgodnie z twoją odpowiedzią nie możemy tego nazwać Usługą. –