Я довольно начинающий программист, который пытается изучить основы n-уровневой архитектуры (DAL, BLL, UI). Приложение, которое я программирую, представляет собой одноуровневое трехслойное приложение, написанное на VB.NET (.Net 3.5). Слои следующим образом:
DAL
BLL
UI
COMMON - содержит DTO прямо сейчас.
У меня проблемы с определением того, что нужно передать между моим BLL и пользовательским интерфейсом. Мой инстинкт подсказывает мне, что я должен передавать только данные в пользовательский интерфейс, а не полный бизнес-объект из BLL. Рассмотрим два сценария:
1) Передайте BO напрямую из BLL в UI. Это предоставляет методы BO и позволяет UI иметь прямой доступ к BO, что кажется плохим.
2) Передавать только соответствующие данные из BO в пользовательский интерфейс. Например, у клиента есть имя и адрес. Эти данные действительно то, что мы хотим показать / отредактировать в пользовательском интерфейсе, поэтому мы будем возвращать эти данные только в пользовательский интерфейс вместо полного BO. Затем пользовательский интерфейс будет вызывать BLL для обновления определенного BO.
Я склонен использовать # 2, но я не знаю, как лучше всего это реализовать. Как я сейчас запрограммировал, если я только верну данные из BLL, все ссылки на мои BO будут потеряны, и GC потребует их. Исходя из этого, у меня есть несколько вопросов:
1) Должен ли я поддерживать бизнес-объекты между вызовами в BLL? Альтернативой является их повторное создание каждый раз, когда я передаю данные через BLL, что кажется неправильным.
2) Каков наилучший способ поддержать БО в одноуровневой архитектуре (как сохранить ссылку, если мы не передаем ее в пользовательский интерфейс?)
3) Как это делают n-уровневые приложения? Поддерживают ли они BO в BLL и ждут обновления от пользовательского интерфейса? Разве для этого не требуется много «бухгалтерского учета» в BLL, чтобы убедиться, что BO выпущены, когда они больше не нужны?
Спасибо за понимание и простите меня, если я спрашиваю что-то глупое. Я научился самому небольшому программированию, которое я знаю, поэтому, возможно, я задаю глупый вопрос и не знаю его.