Різниця між сховищем та сервісом?


106

Яка різниця між сховищем та службою? Я, здається, не розумію цього.

Я говорю про доступ до даних через рівень доступу до даних, як правило, з linq to sql.

Дуже часто я бачу сховища з простими методами CRUD та сервіси з більш специфічними для бізнесу методами.

Ми можемо взяти цей приклад в блозі як приклад. Якщо подивитися на інтерфейси внизу (зображення), у нього є два сховища та два сервіси. Як можна знати, що куди поставити?

Як я вже сказав, схожі місця схожі на більш схожі на CRUD операції та послуги, орієнтовані на бізнес.

Дякую


Чи можете ви оцінити? У якому контексті? Як і більшість слів, контекст, у якому ці слова використовуються, допомагає визначити значення.
Девід,

2
Примітка. Я не говорю про веб-сервіси чи щось тут. Я кажу про доступ до даних через рівень даних.
alexn

Відповіді:


78

Репозиторій - це фактично фасад для збереження, який використовує семантику стилю колекції (Додати, оновити, видалити) для надання доступу до даних / об'єктів. Це спосіб роз'єднання способу зберігання даних / об’єктів від решти програми.

Сервіс забезпечує координацію або інші "послуги", необхідні для роботи з вашою програмою. Вони сильно відрізняються тим, що Служби, як правило, не знають, як отримати доступ до даних із постійності, а сховища, як правило, отримують доступ лише до даних / об’єктів для будь-яких служб, які у вас є.


19
Я б сказав, що Репозиторій - це тип сервісу, який використовується для доступу до даних.
Ян Рінроуз

5
Це чітке визначення в тому сенсі, що майже все, що ми пишемо, - це "послуга" на якомусь рівні, але вона втрачає основний намір, що сховище має бути колекцією об'єктів.
jlembke

4
Якщо ви зробите тестування модулів, можливо, буде зрозуміліше мислити сховища як мінімальну абстракцію, щоб мінімізувати глузування, необхідні для уникнення бази даних.
Генрі Хейкінкін

repository= collectionвід backbone.jsабо repository= serviceвід angular?
слайд-

160

Репозиторій - це місце, де зберігаються дані. Служба - це те, що маніпулює даними.

У порівнянні з реальною ситуацією, якщо ваші гроші зберігаються у сховищі в банку, сховище є сховищем. Оператор, який депонує, знімає тощо, - це послуга.


7
Дякую за цю відповідь! Простий і стислий.
alexn

1
погодився з вищезгаданим коментарем! Любіть і пояснення реального світу!
Клей

6
мм. тож якщо банк вирішить позбутися сховища і покласти гроші під матриці, то касир все ще буде взаємодіяти з вами, як і раніше, не знаючи про зміну шару сховища.
Денніс

1
Я підозрюю , що клієнт хотів би знати про те , що реалізації, @Dennis
Chucky

1
@Dennis Так. Це фактично одна з головних переваг використання шаблону сховища. Ви повинні мати можливість змінити фактичну реалізацію інтерфейсів сховища, не змінюючи нічого на службі. Це має величезні переваги для тестування одиниць та для того, щоб зробити ваш код вільно зв'язаним.
Warren Parks

12

Я б сказав, як перша спроба, у загальному розумінні (доки ви не надасте більше контексту, якщо у вас є):

  • сховище , де ви розміщуєте деякі глобальні об'єкти, які будуть використовуватися в подальшому.
  • послуга є код бізнес - логіки, очевидні (і в ідеалі відокремлена від шару презентації та рівень бази даних?)

3
Було б добре робити наступне: У моєму сховищі є всі мої складні виклики до бази даних, тоді в моїй службі я ввожу репозиторій як залежність. Тепер я легко перевірив код і розділив свої проблеми, тому що мій сервіс не знає, як виконуються дзвінки БД, а просто викликає функції репозиторію, який робить. Тому ділова логіка та доступ до даних розділені. Це був би життєздатний підхід?
darophi

1
Якщо вся логіка записана в сервісах, то контролер буде викликати тільки службу?
Ісломходжа Хамідуллаходжаєв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.