Трехуровневая архитектура

У меня есть несколько вопросов о трехуровневой архитектуре.

  1. как правильно реализовать приложение в трехуровневой архитектуре?
  2. как общаться между этими уровнями?
  3. Уровень данных полностью равен СУБД? (как в случае, если мы используем хранимые процедуры и как в случае, если мы использовали инфраструктуру реляционного отображения объектов?)

с нетерпением жду, чтобы услышать ваши ответы. Благодарю.


PS: Пожалуйста, не понимайте, что я задаю общий вопрос. ОК? Я спрашиваю, как правильно разработать крупномасштабное приложение. Какой ЛУЧШИЙ путь? Не ожидая слишком много ответов.

7 ответов

Решение

Это широкие ответы, я сделаю все возможное, чтобы дать вам несколько советов.

  1. "Правильно" - это несколько субъективный термин. Вообще говоря, на мой взгляд, наиболее важным является сохранение уровня в его собственном модуле (например, в его собственной DLL), и иметь интерфейсы, входящие и выходящие из модуля. Используя интерфейсы на каждом уровне, вы можете отделить определение от реализации, дополнительно отделив слои друг от друга. Если в слое есть одна точка входа, и она основана на интерфейсе, при необходимости вы можете иметь несколько базовых реализаций. В другом направлении, если вы используете интерфейсы в качестве обратных вызовов, тогда клиенты уровня (то есть другие уровни) должны будут только реализовать интерфейсы, чтобы получить хороший поток между уровнями.

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

  3. Нет, уровень данных - это уровень в приложении, который взаимодействует с СУБД. Использование ORM - это просто метод для реализации уровня данных, в то время как использование хранимых процедур - это метод для перемещения некоторой логики из приложения в саму СУБД по разным причинам.

Я думаю, вы получите несколько ответов; Вы должны принять их во внимание, прочитать в сети и немного поэкспериментировать, пока не найдете то, что вам нравится.

  1. Три уровня - это презентация, бизнес-логика и данные. Убедитесь, что вы не смешиваете проблемы. Пользовательский интерфейс не должен содержать никакой бизнес-логики и так далее.

  2. Любой уровень должен знать только об уровне ниже его. Например Пользовательский интерфейс должен взаимодействовать только с Business Logic и не должен ничего знать о уровне данных. Для этого всегда используйте код для интерфейсов, а не для конкретных реализаций. Используйте Dependency Injection, чтобы модули были слабо связаны.

  3. Это зависит от того, как вы решите его реализовать. Начните с принципала ЯГНИ. Начните с максимально простых вещей и используйте такие вещи, как ORM, только если они вам действительно нужны.

Эта тема слишком широка, чтобы правильно ответить на этот вопрос с необходимой глубиной. Это говорит:

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

  2. Трехуровневая архитектура не дает указаний на то, как слои взаимодействуют между собой. Бизнес (уровень) функциональность часто представлена ​​в виде веб-сервисов, которые используются на уровне представления.

  3. Уровень данных не полностью равен базе данных. Вам всегда понадобится некоторый код для взаимодействия с хранилищем данных (например, ORM). Этот код должен быть в своем собственном модуле, чтобы минимизировать связь.

Это зависит от многих факторов. Я хотел бы взглянуть на использование шаблона репозитария для вашего уровня доступа к данным (DAL). В идеале это должно использоваться в сочетании с объектно-реляционным картографическим устройством (ORM), таким как инфраструктура сущностей 4 или nhibernate. Тогда у меня будет отдельный доменный слой, содержащий бизнес-правила и сервисы. Ваш уровень домена будет обслуживать запросы между вашим пользовательским интерфейсом и вами DAL. Для вашего пользовательского интерфейса у вас есть выбор веб-форм или подход MVC. Оба будут работать на трех уровнях, но вы получите гораздо лучшее разделение проблем от MVC. Это хорошо, когда вы хотите провести какое-то модульное тестирование. Вот несколько хороших ссылок относительно вышеупомянутого.

http://daveswersky.com/2010/05/26/entity-framework-4-then-and-now/

http://channel9.msdn.com/blogs/matthijs/aspnet-mvc-2-basics-introduction-by-scott-hanselman

http://www.asp.net/mvc/tutorials/mvc-music-store-part-1

Лучший способ реализовать приложение в трехуровневой архитектуре - это использовать среду вашего языка, использующую MVC. Для PHP я рекомендую CodeIgniter http://codeigniter.com/

Обычно происходит прохождение объектов, если вы следуете ООП, между тремя уровнями. Ну, в основном два. Элемент управления получает запрос, запрашивает модель (БД) и получает взамен объект, использует его свойства и методы для отображения представления.

Следуйте некоторым учебникам в Ci. Вы получите представление о том, что происходит в MVC.

Трехуровневая архитектура - это концепция, а не пошаговая инструкция. Держите это простым и изолированным. Если вы работаете с хранением и поиском данных, поместите их в слой данных. Когда есть логика, поместите ее в логику / средний уровень. Темы / обложки, представления, заполнители виджетов помещаются в слой презентации.

Изучите чужой код. Хорошее место для начала было бы monoRail.

Читайте много документации, чем больше вы знаете, что делают другие, тем лучше.

Прежде всего, повеселиться с ним. Если вы чувствуете себя перегруженным или вам все усложняется, отойдите и выясните, что находится не в том месте.

В трехуровневой архитектуре есть три уровня: уровень представления, уровень бизнес-логики и уровень доступа к данным. Помимо этих трех мы можем использовать слой бизнес-объектов для реализации классов свойств, которые могут отображать наши объекты в базе данных, или вы можете использовать платформу сущностей.

Уровень представления. Это самый верхний уровень приложения, в котором пользователь выполняет свои действия. Давайте рассмотрим пример любого приложения, в котором пользователь должен заполнить форму. Эта форма - не что иное, как Уровень представления. В приложениях Windows Windows Forms являются слоем представления, а в веб-приложениях веб-форма принадлежит слою представления. По сути, на этом уровне выполняется проверка ввода пользователя и обработка правил.

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

Уровень доступа к данным: на вершине уровня бизнес-логики находится уровень доступа к данным. Он содержит методы, которые помогают бизнес-уровню подключаться к базе данных и выполнять операции CRUD. Обычно весь связанный с базой данных код и прочее относится к уровню доступа к данным. Иногда люди используют независимый от платформы уровень доступа к данным для получения данных от различных поставщиков баз данных.

Дополнительная информация - https://www.c-sharpcorner.com/UploadFile/dacca2/understand-3-tier-architecture-in-C-Sharp-net/

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