Введение
Не так давно не было ни одной книги по объектно-ориентированному анализу и проектированию. Сейчас их так много, что ни один практикующий специалист не в состоянии за ними уследить. Большинство этих книг посвящено обучению нотации, предложению простого процесса моделирования и иллюстрации его на нескольких простых примерах. Analysis Patterns: Reusable Object Models — это книга другого рода. Вместо того чтобы сосредоточиться на процессе — она концентрируется на результате этого процесса — самих моделях.
Я являюсь консультантом по объектному моделированию информационных систем. Клиенты просят меня обучить персонал моделированию и обеспечить наставничество в проектах. Во многом мои навыки обусловлены знанием методов моделирования и того, как их использовать. Однако более важным является мой опыт реального создания множества моделей и регулярного повторения проблем. Нередко я обнаруживаю, что многие аспекты проекта вновь затрагивают проблемы, с которыми я сталкивался ранее. Этот опыт позволяет мне повторно использовать построенные ранее модели, улучшать их и адаптировать к новым требованиям.
За последние несколько лет все больше и больше людей осознают этот феномен. Мы поняли, что типичные книги по методологии, хотя и ценные, представляют собой лишь первый шаг в процессе обучения, который также должен охватывать реально создаваемые вещи. Это осознание вылилось в движение по нахождению паттернов. Это разнообразная группа людей, представляющая множество различных интересов и мнений, но разделяющая цель распространения полезных паттернов программных систем.
Из-за разнообразия сообщества любителей узоров мы столкнулись с трудностями в определении термина "паттерн". Мы все думаем, что можем распознать паттерн, когда видим его, мы думаем, что большинство из нас согласится с этим в большинстве случаев, но мы не можем выработать единое определение. Вот мое определение: Паттерн - это идея, которая была полезна в одном практическом контексте и, вероятно, будет полезна в других.
Мне нравится оставлять это определение довольно свободным, потому что я хочу оставаться как можно ближе к основной мотивации паттернов, не добавляя слишком много ограничивающих поправок. У паттерна может быть множество форм, и каждая форма добавляет специализации, полезные для данного типа паттерна. (В разделе 1.2 обсуждается текущее состояние мира паттернов и место этой книги в нем).
Эта книга посвящена паттернам в анализе, паттернам, которые отражают концептуальные структуры бизнес-процессов, а не реальные программные реализации. В большинстве глав рассматриваются паттерны для различных областей бизнеса. Такие паттерны трудно классифицировать по традиционным вертикальным областям (производство, финансы, здравоохранение и т. д.), поскольку они часто полезны в нескольких областях. Эти паттерны важны, потому что они помогают нам понять, как люди воспринимают мир. На этом восприятии можно основывать проектирование компьютерных систем и, более того, менять это восприятие — именно в этом и заключается суть реинжиниринга бизнес-процессов.
Однако концептуальные модели не могут существовать сами по себе. Концептуальные модели полезны для инженеров-программистов только в том случае, если они видят, как их реализовать. В этой книге я представляю паттерны, которые можно использовать для превращения концептуальных моделей в программное обеспечение, и рассказываю, как это программное обеспечение вписывается в архитектуру большой информационной системы. Я также обсуждаю конкретные советы по реализации паттернов.
Я написал эту книгу, потому что именно ее я хотел прочитать, когда начинал работать. Моделисты найдут в этой книге идеи, которые помогут им начать работать в новой области. Паттерны содержат полезные модели, обоснование их дизайна и то, когда их следует и не следует применять. С помощью этой информации моделист может адаптировать модели под конкретную задачу.
Приведенные в этой книге паттерны также можно использовать при анализе моделей — что в них могло быть упущено, и предложить альтернативные варианты, которые могут привести к улучшению. Когда я анализирую проект, я обычно сравниваю то, что вижу, с паттернами, которые я узнал из предыдущей работы. Я обнаружил, что осознание закономерностей в своей работе помогает мне легче применять свой прошлый опыт. Подобные паттерны также раскрывают вопросы моделирования, которые выходят за рамки того, что можно описать в обычном учебнике. Обсуждая, почему мы моделируем вещи определённым образом, мы получаем большее понимание того, как улучшить наше моделирование, даже если мы не используем паттерны напрямую.