Ответ 1
Я думаю, вы поняли.
Однако я также считаю, что это скорее анти-шаблон, которого следует избегать. Смотрите, почему здесь.
См. также Закон Деметры
Я начал читать шаблон контекстного дизайна. Вот что я понял из текста:
у вас есть карта, содержащая все ваши переменные
вы передаете его тем, кто в нем нуждается, так что вам не придется отправлять все переменные в качестве параметров метода
Я получил его?
Я думаю, вы поняли.
Однако я также считаю, что это скорее анти-шаблон, которого следует избегать. Смотрите, почему здесь.
См. также Закон Деметры
Я получил его?
Простите, не совсем.
Цель Контекстного объекта - не пропускать множество параметров для методов неявно, как средство обхода сильной типизации и инкапсуляции. Цель состоит в том, чтобы хранить данные с областью в общем, но управляемом образом, независимо от протоколов и технологии представления. Данные, хранящиеся в пределах области действия, по своей природе совместно используются, все еще могут быть структурированы и по своей сути отличаются от одноразовых параметров, переданных методу.
Шаблон контекстного объекта был впервые представлен в Core J2EE Patterns 2nd Ed. Часть "Контекст" ссылается на то, что объект хранит данные в контексте области действия
(например, application/session/request/conversation/flash
).
Цель состоит в том, чтобы как можно больше отделить данные приложения и логику от классов, связанных с протоколом/презентационной технологией, таких как HttpSession
и HttpRequest
.
Реализация шаблонов
В разделе "Контекстный объект" данные, предназначенные для области приложения/сеанса/запроса/другой, не помещаются непосредственно в класс ServletContext
/HttpSession
/HttpRequest
/другого класса, специфичного для протокола. Вместо этого данные сохраняются в классе оболочки POJO, который затем находится в ServletRequest
/HttpSession
/HttpRequest
/other.
Контекстный объект может хранить данные на карте, но ему не нужно - он может хранить данные в любой структуре/формате, относящемся к программе.
Приложение может использовать один класс контекстного объекта для каждой области или несколько классов, которые разделяют данные упорядоченным образом, избегая чрезмерного раздувания Класса и способствуя разделению проблем.
Объект контекста используется передними классами презентаций (Views, Front Controllers, Dispatchers). Эти объекты-клиенты представления вызывают contextObject.get для извлечения данных с сохраненными областями и contextObject.put для хранения скоординированных данных контекста.
Он не передается в логику бизнеса/интеграции. Он не используется как средство передачи множества параметров в бизнес-объекты, обходя сильную типизацию. Уровни бизнеса и интеграции находятся в ведении бизнес-делегатов, приложений и/или фаз сеанса, которые используют определенные строго типизированные параметры.
Преимущества шаблонов
ServletContext
или HttpRequest
Комментарии
Цитата KaptajnKold: Думаю, ты понял. Тем не менее, я также думаю, что это скорее анти-шаблон, которого следует избегать. Посмотрите, почему здесь.
Ваши комментарии относятся к недооцененной версии Контекстного объекта. Сам контекстный объект не является анти-шаблоном.
Объект контекста обеспечивает доступ к общим данным и функциям.
Это может быть элегантная и гибкая замена:
ACCU предоставляет более подробное описание.
Если вам нужен реальный пример шаблона контекста в Java, проверьте Google Android API.
При использовании шаблона контекста вы должны помнить свой график зависимостей. (Вот почему KaptajnKold называет это анти-шаблоном.)
Чтобы ограничить ненужные зависимости, используйте разные контексты для разных целей. Держите ваши контексты как можно более простыми и используйте состав или наследование, чтобы добавить сложность, когда это необходимо.
Класс, использующий контекст для инициализации. Рассмотрим этот код
public class BuildTagHandler extends TagHandler {
public BuildTagHandler(ServiceContext context) { // constructor
this.tagDAO = context.getTagDAO();
this.buildDAO = context.getBuildDAO();
}
Вы будете использовать контекст для создания своего класса. В контексте файл, у вас не будет реализаций, вместо этого у вас есть много этих объектов DAO
Вы можете интерпретировать его как шаблон фасада, или огромный интерфейс охватывает все записи.