Вот основная идея, которая на самом деле может быть выведена более или менее из первых принципов, то есть из правила Парнаса, что модули должны скрывать один секрет:
уровень «переднего плана» содержит секреты создания видимой презентации
«средний уровень» хранит секреты управления поведением системы
«бэкэнд» хранит секреты постоянного хранения данных.
В системе на основе Java это означает
Передняя часть
Существует веб-сервер, и презентация построена с использованием HTML, CSS и Javascript. Для этого есть несколько технологий, но наиболее ориентированной на Java является Java Server Pages, которая эффективно генерирует HTML из скрипта со встроенной Java. Один из известных способов управления JSP на более высоком уровне называется Struts .
Существует ряд инструментов для упрощения этого; пожалуй, наиболее распространенным является Spring . (Spring предоставляет некоторые другие вещи, которые также более применимы к среднему уровню.)
Другой вариант, который в наше время очень редко встречается, - это иметь интерфейс Java-приложения, работающий на компьютере клиента.
Средний уровень
Средний уровень предназначен для предоставления данных в удобной форме для внешнего интерфейса. В мире Java это часто делается с помощью «сервера приложений», который представляет «объекты» внешнему интерфейсу. Это действительно сложное решение называется Enterprise Java Beans (EJB), но оно оказалось слишком сложным для любых, кроме самых больших систем; теперь это чаще делается с постоянным слоем, таким как Hibernate , который предоставляет объекты доступа к данным Java остальному среднему уровню. (Чтобы узнать больше об этом, вы хотите взглянуть на то, что называется «проблемой несоответствия импеданса для объектов и баз данных отношений».)
Back End
Обычной серверной частью в 3-уровневой системе является готовая база данных, хотя это может быть что угодно - от Hadoop и BigTable до чего-то, что использует сериализацию Java для хранения состояния в виде текстовых файлов. Серверная часть отвечает за сохранение этого состояния, чтобы оно сохранялось и могло быть найдено снова. Такие инструменты, как Hibernate, существуют, по существу, для обеспечения более понятного и более общего интерфейса с базой данных, но в Java был интерфейс JDBC от первого (ну, почти первого, Java 1.1) для обеспечения возможности использования баз данных.
n Уровень системы
В крупномасштабных системах это подразделение может быть разбито дальше. Например, «внешний интерфейс» можно рассматривать как два уровня: уровень представления в браузере и уровень поддержки представления на сервере. При такой поломке серверная сторона может, например, управлять сеансами и аутентификацией. Точно так же вы можете смотреть на интерфейс между средним уровнем и бэкендом как на сам по себе слой, «слой соответствия импеданса». Теперь Hibernate получает свой собственный слой.
С другой стороны, системы нередко имеют уровень представления, генерирующий HTML или реализуемый как клиентское приложение Java, напрямую взаимодействующее с базой данных. В этом случае у вас есть «двухуровневая система».
Ява не причина
Последнее, на что следует обратить внимание, это то, что Java не является причиной или основанием для наличия 2, 3 или 5 (или более - сам по себе уровень в браузере?) Уровней.Это архитектурное решение, принятое потому, что вы хотите связать детали, которые могут превратиться в одни и те же компоненты.В реальной жизни бизнес достаточно стабилен;как только вы сошлись в доменной модели, она не сильно изменится.Когда презентация меняется, модель предметной области часто не меняется, поэтому разделите ее на уровень презентации.С другой стороны, вы можете выбрать другую реализацию базы данных, не изменяя бизнес-модель (домен moel) или презентацию - поэтому сделайте это отдельным уровнем.Это приводит к созданию более надежной системы, поскольку изменение не означает, что код нарушается во всей системе.
Эта желаемая надежность является причиной многоуровневой системы.