Классы менеджеров?

Я пишу приложение для веб-форм .net. У него есть несколько классов, например, пользователи, бронирования и т. д. На данный момент у меня есть несколько классов менеджеров, например, bookingManager, которые управляют этими классами. Например, при создании нового бронирования вы вызываете метод add в bookingManager и передаете бронирование. Затем он проверяет действительность бронирования, проверяет, не конфликтует ли оно, и, если это не так, добавляет его в базу данных. У меня есть аналогичные менеджеры для других классов, однако такие, как менеджер пользователей, не делают ничего больше, чем просто принимают пользователя и добавляют его в БД. Итак, мой вопрос: это лучший способ делать подобные вещи или есть шаблон или метод, который лучше подходит для этого?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
938
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Нет ничего плохого в том, чтобы иметь классы менеджеров, особенно когда они управляют несколькими различными аспектами системы, такими как упомянутый вами менеджер по бронированию. В этом случае вы можете не захотеть, чтобы пользователь знал о бронировании или о бронировании знал о пользователях, но это, естественно, будет зависеть от специфики вашей системы.

  1. В менеджерах хорошо то, что они обеспечивают центральное и логичное место для хранения, возможно, сложной логики, которая зависит от нескольких компонентов. Это также позволяет вам использовать классы данных как таковые и увеличивать сплоченность этих классов.

  2. «Менее приятным» в менеджерах является то, что у вас есть еще один компонент, который, вероятно, будет достаточно тесно связан с другими компонентами системы. Вам нужно сбалансировать плюсы и минусы этого и выбрать архитектуру, наиболее подходящую для вашего приложения.

Я считаю, что для таких классов всегда лучше реализовать методы сохранения, удаления и обновления. Класс Manager для таких вещей определенно избыточен. Эти методы, реализованные, скажем, в вашем классе Booking, могут выполнять ту же проверку и избегать каких-либо сложностей, связанных с добавлением слишком большого количества классов в ваш код.

Ответ принят как подходящий

как вы это описываете, вы уже используете узор, трехуровневый узор :)

Это означает, что в приложении у вас должен быть свой код на 3 уровня (как указано в названии):

  1. Уровень представления: где вы пишете код для представления ваших данных (ASPx / winforms / и т. д.)

  2. Уровень приложения: где вы размещаете всю свою бизнес-логику (что вы делаете с классами менеджеров)

  3. Уровень данных: где вы осуществляете фактический доступ к базе данных.

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

Теперь, если у вас есть поставщики с несколькими адресами, вы можете использовать один и тот же метод на уровне данных для их сохранения.

Это будет полезно, если у вас есть сложные объекты. однако, если большинство ваших объектов просто просты, я бы порекомендовал вам подумать, подходит ли вам этот шаблон.

http://en.wikipedia.org/wiki/Multitier_architecture

Если менеджер похож на контроллер / ведущий между пользовательским интерфейсом и классами домена, я думаю, что он должен быть тонким слоем. Он должен содержать несколько строк кода. Тогда об остальном должны позаботиться доменные службы или классы обслуживания. Например :

UI:

buttonClicked(Eventargs...)
{
   presenter.Save();
}

Преснетер:

public void Save()
{
   bookingService.Save(view.Name,view.DateTime...)
}

Услуга :

public void Save(string name,DateTime dateTime...)
{
   //do operations or call repository/Dao classes to save
}

это может быть излишним для небольших приложений, но для больших приложений это увеличивает ремонтопригодность. Вы можете посмотреть книгу Domain Driven Design и классы доменных служб.

Другие вопросы по теме