1.3 Шаблоны в этой книге
Моё определение паттерна — это идея, которая оказалась полезна в одном практическом контексте и, вероятно, будет полезна в других. Я использую термин идея, чтобы подчеркнуть тот факт, что паттерн может быть чем угодно. Это может быть группа взаимодействующих объектов, как в шаблонах «Банды четырех», или принципы организации проектов Коплиена [5]. Фраза «практический контекст» отражает то, что паттерны разрабатываются на основе практического опыта реального проекта. Часто говорят, что паттерны скорее открывают, чем изобретают. Это означает, что модели превращаются в паттерны только когда приходит осознание того, что они могут быть полезны в общем случае. Конечно, всё начинается с находок в реальном проекте, но не все идеи реального проекта являются паттернами; паттерны — это вещи, которые, по мнению разработчиков, могут быть полезны в других контекстах. В идеале это происходит благодаря повторному использованию шаблонов в других местах, однако это может быть только субъективное мнение оригинальных разработчиков.
Паттерны в этой книге делятся на две категории:
Аналитические шаблоны — это наборы концепций, которые представляют собой общую структуру в бизнес-моделировании. Она может относиться только к одному домену или охватывать множество доменов. Аналитические шаблоны составляют основу этой книги.
Поддерживающие паттерны являются самостоятельными и ценны сами по себе. Однако в этой книге им отведена особая роль: Они описывают, как применить аналитические шаблоны на практической плоскости, в коде.
1.3.1 Примеры для моделирования
Обычная книга по анализу и проектированию — это вводная книга, в которой как правило объясняется методология автора. В таких книгах не рассматриваются многие важные проблемы моделирования — проблемы, которые могут возникнуть только в контексте большого проекта. Проблемы такого рода трудно понять вне контекста, и для их полного понимания читателю необходимо иметь определенный опыт моделирования, чтобы в полной мере оценить полезность шаблона.
Шаблоны дают хороший способ взглянуть на эти проблемы. Многие паттерны в этой книге касаются общих вопросов моделирования, рассматривая конкретную проблему в области, где ее легче понять. В качестве примера можно привести работу с методами, которые могут быть связаны с отдельными экземплярами объектов (см. раздел 6.6), подтипы диаграмм состояний (см. раздел 10.4), разделение моделей на уровни знаний и операций (см. раздел 2.5) и использование портфелей для группировки объектов по запросу (см. раздел 9.2).
1.3.2 Происхождение шаблонов
Как уже говорилось выше, паттерны в этой книге основаны на моем личном опыте применения объектного моделирования в крупных корпоративных информационных системах. Этим можно объяснить их несколько случайный подбор. В книгу вошли шаблоны которые я нашёл и подтвердил на реальных проектах.
Хотя эти модели основаны на интенсивных проектах, на выполнение которых иногда уходило несколько месяцев, я не пытался описать полные модели. Я мог бы написать целую книгу, посвященную только одному домену. Такая книга была бы интересна работающим в этой области (и я надеюсь, что такие книги когда-нибудь появятся), но я хотел, чтобы эта книга охватывала разные домены и показывала перекрестное применение шаблонов. Вторая причина, по которой я описываю только основные моменты, а не полные модели, — это конфиденциальность клиента.
Я не пытался дотошно передать модели и внес изменения по нескольким причинам. Во-первых, я упростил некоторые абстракции, чтобы сохранить дух оригинала и сделать его более простым для объяснения и понимания. Во-вторых, некоторые модели абстрагированы немного выше исходной области, потому что в реальных проектах они были ограничены рамками проекта, но по сути были более общими. В некоторых случаях я изменил модели так, чтобы они отражали мои идеи, а не те, которые были выбраны командой проекта. Как консультант, я могу только советовать, и иногда моя точка зрения не принимается. В таких случаях я представляю в тексте два подхода, но, как правило, основываюсь на собственном мнении.
Что касается названий типов объектов, то я использую именования из исходных проектов. Было много моментов, когда я испытывал искушение изменить наименование, но, как известно любому моделисту, наименование может быть одной из самых сложных частей моделирования. Некоторые имена могут показаться немного странными, но ни одно имя не является идеальным.
1.3.3 Шаблоны в разных доменах
В какой бы области вы ни работали, я надеюсь, что вы будете изучать модели за пределами своего домена. Большая часть книги включает в себя общие вопросы моделирования и уроки, применимые за пределами моделируемой области. Знание других доменов — ценный инструмент для абстрагирования. Для создания мощных абстракций обычно необходимо рассмотрение конкретных случаев. Многие профессионалы не обладают моей удачей работы в разных доменах. Рассматривание моделей в разных областях часто может породить новые идеи в несвязанной области.
Но самая главная причина для изучения других доменов заключается в том, что не всегда очевидно, когда домены подобны или нет. Лучший пример этого в данной книге — область здравоохранения, которая моделируется в нескольких главах. После работы над моделью здравоохранения я был вовлечен в проект по финансовому анализу крупной производственной компании. Проблема заключалась в понимании причин возникновения финансовых показателей высокого уровня. Модель здравоохранения, по сути являющаяся моделью диагностики и лечения, оказалась удивительно подходящей (см. главы 3 и 4).
Я подозреваю, что существует небольшое количество весьма общих процессов, которые пересекают традиционные границы разработки систем и бизнес-инжиниринга. Одна из них — модель диагностики и лечения; другая — модель учета и инвентаризации (см. главу 6). Многие предприятия с диверсификацией могут использовать набор очень похожих абстрактных моделей для своих процессов. В связи с этим возникают некоторые существенные вопросы относительно обещанной разработки вертикальных (силосных) библиотек классов для отраслей промышленности. Я считаю, что настоящие бизнес-фреймворки будут организованы не согласно традиционным направлениям деятельности (отделам), а по абстрактным концептуальным процессам.