Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Repository & Service / 25 сообщений из 133, страница 1 из 6
03.03.2016, 15:45
    #39185092
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Господа, извеняюсь за нубские вопросы... но
Вот в интернетах пишут что репозитории занимаются тем что общаются с базой данных
А в Сервисах находиться бизнес логика. Далее показывают пример (можно увидеть ниже).
Это только у меня ощущение что бизнес логика в этом примере в репозитории?
Зачем вообще слой Service? Такое ощущение что вместо сервиса можно использовать сразу репозиторий в клиенте.

Прокоментируйте пожалуйста...

Repository
Код: c#
1.
2.
3.
4.
5.
6.
        public Category GetCategory(bool Blocked)
        {
            var category = this.DbContext.Categories.Where(c => c.Blocked == Blocked).FirstOrDefault();

            return category;
        }


Service
Код: c#
1.
2.
3.
4.
5.
        public Category GetCategory(bool Blocked)
        {
            var category = categorysRepository.GetCategory(Blocked: false);
            return category;
        }


Client
Код: c#
1.
2.
3.
4.
5.
6.
        public ActionResult Index()
        {
            var category = categoryService.GetCategory(false);
            var modelCategoryViewModel = Mapper.Map<Category, CategoryViewModel>(category);
            return View(viewModelGadgets);
        }
...
Рейтинг: 0 / 0
03.03.2016, 15:55
    #39185117
Владимир Путин-Ленин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
все норм
...
Рейтинг: 0 / 0
03.03.2016, 15:57
    #39185121
Владимир Путин-Ленин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
пример очень не показательный. наверняка, при сохранении удалении будет куча проверок - вот они и есть "бизнес-логика"
...
Рейтинг: 0 / 0
03.03.2016, 16:01
    #39185124
Владимир Путин-Ленин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
причем в методах сервиса будет использоваться много репозиториев, код многих будет выполняться в транзакции
...
Рейтинг: 0 / 0
03.03.2016, 16:02
    #39185126
Владимир Путин-Ленин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
но даже в таком виде профит имеется - можно тестировать
...
Рейтинг: 0 / 0
03.03.2016, 16:08
    #39185139
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем GЗачем вообще слой Service? Такое ощущение что вместо сервиса можно использовать сразу репозиторий в клиенте.Ощущение правильное, потому что в качестве репозитория выступает DbContext.

авторПаттерн Repository посредничает между слоем области определения и слоем распределения данных, работая, как обычная колекция объектов области определения. Объекты-клиенты создают описание запроса декларативно и направляют их к объекту-репозиторию (Repository) для обработки. Объекты могут быть добавлены или удалены из репозитория, как будто они формируют простую коллекцию объектов . А код распределения данных, скрытый в объекте Repository, позаботится о соответсвующих операциях в незаметно для разработчика. В двух словах, паттерн Repository инкапсулирует объекты, представленыые в хранилище данных и операции, производимые над ними, предоставляя более объектно-ориентированное представление реальных данных .
...
Рейтинг: 0 / 0
03.03.2016, 16:12
    #39185147
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Владимир Путин-Ленинно даже в таком виде профит имеется - можно тестироватьЕсть и другие способы организовать тестирование: банально, подключить тесты к тестовой БД.
...
Рейтинг: 0 / 0
03.03.2016, 16:36
    #39185178
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
ммм, вот всегда так )
Владимир Путин-Ленин говорит что так и надо и это "классика" ))
а Алексей К говорит что ну их нах Сервисы можно в клиент репозитории...

PS
Ок понял что в сервисах проверки на нуль и прочии проверки... А это не размазывает логику между Сервисом и Репозиторием?
Или нужно просто для себя запомнить что все условия для запросов находятся в репозитории?

Вот как использовать 2 и более репозиториев в сервисе не вижу для себя задачи ... можете привести какой нибудь пример? (не код, на словах) для того, чтобы понимать о чем речь.

PSS
транзакции в коде пока не реализовал, но планирую ... нужно будет показать что в итоге получиться

Спасибо за Вашу помощь.
...
Рейтинг: 0 / 0
03.03.2016, 16:43
    #39185187
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем Gа Алексей К говорит что ну их нах Сервисы можно в клиент репозитории...Я не это имел ввиду. :-)

Я лишь обратил внимание на то, что под классическое определение понятия "паттерн репозитарий" попадает DbContext. А какие слои организовывать и как распределять между ними логику - это личное дело каждого, в зависимости от решаемой задачи и предпочтений.
...
Рейтинг: 0 / 0
03.03.2016, 18:18
    #39185295
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Алексей КАртем Gа Алексей К говорит что ну их нах Сервисы можно в клиент репозитории...Я не это имел ввиду. :-)

Ок, понял. Если что извеняюсь ... я утрировал ...
...
Рейтинг: 0 / 0
03.03.2016, 19:02
    #39185316
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
в примере видно что в Repository есть класс Category из слоя Domain

вопрос: в слое Service должен быть отдельно созданый класс Category или используется класс из слоя Domain ?

Я "продублировал" класс Category в Service и воспользовался AutoMapper ом
...
Рейтинг: 0 / 0
03.03.2016, 19:07
    #39185318
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Алексей Ккачестве репозитория выступает DbContext

ну да, ну да. а если не он?
...
Рейтинг: 0 / 0
03.03.2016, 19:09
    #39185319
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Алексей КВладимир Путин-Ленинно даже в таком виде профит имеется - можно тестироватьЕсть и другие способы организовать тестирование: банально, подключить тесты к тестовой БД.
И какое покрытие у таких тестов? И сколько по времени они выполняются?
...
Рейтинг: 0 / 0
03.03.2016, 19:09
    #39185320
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Алексей Кбанально, подключить тесты к тестовой БД

это, конечно, тоже надо. но, что будет тестироваться в итоге, если нет разделения? полный чОрный ящик? это хрень а не тестирование
...
Рейтинг: 0 / 0
03.03.2016, 19:13
    #39185321
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем Gммм, вот всегда так )
Владимир Путин-Ленин говорит что так и надо и это "классика" ))
а Алексей К говорит что ну их нах Сервисы можно в клиент репозитории...

PS
Ок понял что в сервисах проверки на нуль и прочии проверки... А это не размазывает логику между Сервисом и Репозиторием?
Или нужно просто для себя запомнить что все условия для запросов находятся в репозитории?

Вот как использовать 2 и более репозиториев в сервисе не вижу для себя задачи ... можете привести какой нибудь пример? (не код, на словах) для того, чтобы понимать о чем речь.

PSS
транзакции в коде пока не реализовал, но планирую ... нужно будет показать что в итоге получиться

Спасибо за Вашу помощь.
Сервис - это бизнес-логика .

Это как если бы Вы что-то делали, делали, проверяли, сверяли, получили результат (вот это сервис)... и на листочек записали (вот это репозиторий).

Просто многие пихают первое в контроллеры, а потом задаются вопросом: а чем у нас сервисы от репозиториев-то отличаются? :)
...
Рейтинг: 0 / 0
03.03.2016, 19:14
    #39185325
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем GВот как использовать 2 и более репозиториев в сервисе не вижу для себя задачи

ну представь, что для выполнения удаления, тебе надо сначала спросить а не "лайка бос" ли объект. а этот запрос делает другой репо. вот и их уже > 1
...
Рейтинг: 0 / 0
03.03.2016, 19:17
    #39185327
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Владимир Путин-Ленинно даже в таком виде профит имеется - можно тестировать
И не только тестировать... Можно прозрачно сменить хранилище, можно прозрачно подключить распределённый кэш, можно прозрачно вынести базу в другую зону в целях безопасности и работать с ней через API...
...
Рейтинг: 0 / 0
03.03.2016, 19:20
    #39185329
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем GВот как использовать 2 и более репозиториев в сервисе не вижу для себя задачи
Ну к примеру пересчитать заказ в другую валюту. Где будете это делать? В контроллере? :)
...
Рейтинг: 0 / 0
03.03.2016, 19:25
    #39185332
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Алексей Ккачестве репозитория выступает DbContext

заблуждение, я считаю. это не репо, это ниже: ISession, DbContext, IDbConnection, просто сохранение в файлы... если вообще не стоит задача распределить и тестировать логику, допустим это один сайт, то может и не надо так заморачиваться сейчас.
...
Рейтинг: 0 / 0
03.03.2016, 19:35
    #39185342
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем G
Код: c#
1.
(bool  Blocked)



для придирки: локальные переменные и параметры вроде принято с маленькой буквы
...
Рейтинг: 0 / 0
03.03.2016, 19:51
    #39185356
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
skyANAСервис - это бизнес-логика .

Это как если бы Вы что-то делали, делали, проверяли, сверяли, получили результат (вот это сервис)... и на листочек записали (вот это репозиторий).

Просто многие пихают первое в контроллеры, а потом задаются вопросом: а чем у нас сервисы от репозиториев-то отличаются? :)

Сервис - это бизнес логика. Все предельно ясно. Но как доходит до практики начинают возникать вопросы.
Как пример: выше я показал репозиторий и сервис. Но то, что написано в репозитории выглядит как бизнес логика, а то, что написано в сервисе выглядит как излишнее...

Я начал писать проект и хоть для меня "не понятно" в чем суть сервиса, но решил не отклоняться от рекомендаций.
Потому как отклонения череваты ))) ...

Иммануил КантАртем G
Код: c#
1.
(bool  Blocked)


для придирки: локальные переменные и параметры вроде принято с маленькой буквы

Да, вы правы.
...
Рейтинг: 0 / 0
03.03.2016, 20:02
    #39185366
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем GЯ начал писать проект и хоть для меня "не понятно" в чем суть сервиса, но решил не отклоняться от рекомендаций

начни писать тесты. и все станет ясно. слабосвязанная архитектура не для красоты.
...
Рейтинг: 0 / 0
03.03.2016, 20:03
    #39185367
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем GЯ начал писать проект и хоть для меня "не понятно" в чем суть сервиса, но решил не отклоняться от рекомендаций.
Потому как отклонения череваты ))) ...
Суть сервиса в том, что из него можно дергать данные из разных репозиториев, обрабатывать в соответстии с бизнес логикой и отправлять результаты обратно в репозитории. Это частный пример.

Например:
Код: c#
1.
2.
3.
4.
5.
6.
        public void BlockProductsByCategory(int categoryId)
        {
            var category = categorysRepository.GetCategoryById(categoryId);
            var products = productsRepository.GetProductsByCategory(category);
            // код блокировки продуктов;
        }
...
Рейтинг: 0 / 0
03.03.2016, 20:13
    #39185370
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
Артем Gощущение что бизнес логика в этом примере в репозитории

если есть динамика в критериях выборки, то такие репозитории не годятся
...
Рейтинг: 0 / 0
03.03.2016, 23:37
    #39185468
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository & Service
skyANAАлексей Кпропущено...
Есть и другие способы организовать тестирование: банально, подключить тесты к тестовой БД.
И какое покрытие у таких тестов? И сколько по времени они выполняются?

Алексей путает интеграционные тесты с модульными. Смею предположить, что из-за отсутствия опыта в тестировании.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Repository & Service / 25 сообщений из 133, страница 1 из 6
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]