Правильное использование репозитория / классов обслуживания - PullRequest
6 голосов
/ 16 февраля 2011

Я работаю над довольно легким клиентским приложением (настольное приложение в .Net, так как в будущем может потребоваться подключение к другим приложениям) для отслеживания RMA в рамках бизнеса для инженеров, инженеры будут просматривать и обновлять статус в приложении , клиенты будут создавать / просматривать RMA на сайте.

Я хочу знать, правильно ли я планирую использовать классы обслуживания и хранилища. Веб-сервис предоставляет данные в формате JSON, из которого я могу построить объект RMA. Этот веб-сервис доступен для http://myRMA.com/repairs/2234/RMA.JSON

Будет ли код для получения RMA в классе RMARepository с методом, подобным GetRMA(int RMAId), и должен ли RMARepository следовать шаблону проектирования синглтона?

Принимая во внимание, что если RMA обновляется, то есть Элемент проверяет и ожидает принятия предложения, завершается ли это в классе обслуживания, который вызывает RMARepository для отправки обновления. IsExists(int RMAId) будет в этом классе обслуживания или в хранилище?

Я знаком с архитектурой Presentation - Application (Logic) - Data Access - Data (Database), а также с MVP. Но мне интересно, где вписываются классы Service.

1 Ответ

11 голосов
/ 16 февраля 2011

Классы хранилища используются только для доступа и хранения информации в базе данных. У них не должно быть никакой другой логики.

Службы используются для извлечения информации из источника данных (скорее всего, из хранилища), обработки информации и возврата результата вызывающей стороне.

Класс обслуживания может использовать несколько репозиториев для достижения желаемого результата. В этом слое также может быть система событий, которая позволяет одной службе выполнять действия, когда другая служба генерирует событие.

Примером может служить то, что UserService вызывает FeedService для создания нового элемента RSS-канала для каждого вновь созданного пользователя.

Уровень репозитория может быть представлен ORM, например, nhibernate.

...