Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MVP и Service Layer / 1 сообщений из 1, страница 1 из 1
29.01.2015, 05:02
    #38866143
Vixler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVP и Service Layer
Рою тут интернет, думаю.

Куда расположить бизнес-логику в MVP? В одном проекте получилось выделить её в слой сервисов. Вид (формы) - пассивный, ничего не знает о презентерах. Презентеры тоже лаконичны, делают запросы в уровень сервисов. Сервисы содержат всю сложную логику, вычисления и для доступа к БД обращаются в слой репозиториев. И вот смотрю я на этот проект и понимаю, что слой Model - это просто классы с перечислением полей. Ну, например PassСard (пропуск-карточка). На форме у грида DataSource - это BindingList<PassCard>. Его присваивает презентер, презентеру этот список передаёт сервис, а сервис получает этот список из репозитория. То есть Model затрагивает все слои, хоть и пассивно, сам не содержит никаких функций вообще.

Есть второй проект, в котором некоторая мешанина и её нужно прибрать. И вот я читаю интернетики и понимаю, что в MVP сервисов вроде как и вообще не должно быть. Но как это, понять сложно, проекты на github с MVP все довольно простые, замучился уже искать.

То есть вот какой есть проект, например. Есть устройство, которое в своей памяти хранит ключи. Люди проходят через проходную, подносят к считывателю ключ-карту, устройство ищет в своей памяти ключ и если находит - открывает проход. Также есть ПО, которое эти ключи записывает в БД или удаляет их из БД. Серверное ПО должно следить, чтобы в БД и на устройстве ключи были идентичными. То есть программа выглядит следующим образом: получить ключи из устройства, получить ключи из БД, сравнить их и выполнить запись/стирание ключей на устройстве.

Теперь как это выглядит (упрощённо) в архитектуре:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
namespace Models
{
     Class KeyPass
     {
          string Key { get; set; }
          int Position { get; set; }
     }
}

namespace Services
{
     ...   

     Class SynchronizeService
     {
          public void SyncronizeKeys() 
          { 
               var keysInDevice = deviceRepository.GetKeysFromDevice();
               var keysInDb = keyInDbRepository.GetKeysFromDb();

               AnalyzeKeys(keysInDevice, keysInDb, out keysToAdd, out keysToDelete);

               deviceService.DeleteKeys(keysToDelete);
               deviceService.AddKeys(keysToAdd);
          }
     }

     Class DeviceService
     {
          public void AddKeys(List<Key> keys) { ... }
          public void DeleteKeys(List<Key> keys) { ... }
     }
}

namespace Repositories
{
     Class DeviceRepository
     {
          public List<Key> GetKeysFromDevice() { ... }
     }

     Class KeyInDbRepository
     {
          public List<Key> GetKeysFromDb() { ... }
     }
}



Как вы думаете, нужны ли в данном случае сервисы и сервисный слой или это всё можно как-то распихать в модели? Мне вот просто непонятно, куда запихать тогда функцию SyncronizeKeys().
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MVP и Service Layer / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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