На этом шаге рассмотрим типичные приемы моделирования архитектурных образцов в UML.
Образцы также подходят для моделирования типичных архитектурных решений. При моделировании каркаса вы, собственно, разрабатываете инфраструктуру всей архитектуры, которую затем планируете повторно использовать и адаптировать к некоему контексту.
Каркас изображается в виде пакета со стереотипом. Являясь пакетом, каркас представляет ряд элементов, включая классы, интерфейсы, варианты использования, компоненты, узлы, кооперации и даже другие каркасы (но не ограничиваясь ими). Фактически вы помещаете в каркас все абстракции, которые, работая совместно, формируют расширяемый шаблон для приложений в определенной области. Некоторые из этих элементов будут открыты и станут ресурсами, доступными для использования клиентами. Это те части каркаса, которые вы можете подключать к абстракциям своего контекста. Некоторые из таких открытых элементов станут образцами проектирования и будут представлять собой ресурсы, с которыми связываются клиенты. Именно эти части каркаса вы наполняете, связывая с образцом проектирования. И наконец, некоторые элементы будут закрытыми или защищенными; они соответствуют инкапсулированным элементам каркаса, не видимым снаружи.
При моделировании архитектурного образца следует помнить о том, что образец, по сути, является описанием архитектуры, хотя и неполным, и, возможно, параметризованным. Следовательно, все, что вы знаете о моделировании хорошо структурированной архитектуры, в полной мере применимо и к хорошо структурированным каркасам. Они не проектируются в отрыве от остальной системы, – такая попытка обречена на неудачу. В основе каркасов лежат уже существующие архитектуры, доказавшие свою работоспособность. Затем каркасы развиваются, чтобы найти те элементы управления и стыковки, которые необходимы и достаточны для того, чтобы обеспечить возможность их адаптации к новым областям.
Чтобы смоделировать архитектурный образец, необходимо:
На рис. 1 показана спецификация архитектурного образца Blackboard (КласснаяДоска), который позаимствован из книги Buschmann et al. Pattern-Oriented Software Architecture. – New York, NY: Wiley, 1996.
Рис.1. Моделирование архитектурного образца
Как говорится в его описании, этот образец "применим к задачам преобразования данных в высокоуровневые структуры, которые не имеют простого детерминированного решения". В основе архитектуры лежит образец Blackboard, определяющий порядок совместной работы классов KnowledgeSource (ИсточникЗнаний), Blackboard и Controller (Контроллер). Этот каркас включает также образец проектирования Reasoning engine (ПроцессорЛогическогоВвода), который определяет общий механизм работы класса KnowledgeSource. И наконец, как видно из рисунка, каркас раскрывает один вариант использования – Apply new knowledge sources (Применить новые источники знаний), поясняющий клиенту, как можно этот каркас адаптировать.
На практике полное моделирование каркаса – задача, по своей сложности сопоставимая с моделированием архитектуры всей системы. В некоторых отношениях она даже сложнее, поскольку для того, чтобы с каркасом можно было работать, вы должны раскрыть все его элементы управления и стыковки и, возможно, представить метаварианты использования (типа Apply new knowledge sources), которые показывают, как настраивается каркас, а также простые варианты использования, поясняющие его поведение.
На следующем шаге рассмотрим понятия диаграммы артефактов в UML.