Не так давно в области объектно-ориентированного анализа и проектирования не существовало доступных книг, посвященных данной теме. В настоящее время их количество значительно возросло, и ни один практикующий архитектор или аналитик не в состоянии охватить все существующие публикации. Большинство из этих книг сосредоточено на обучении нотации, предлагая упрощенные процессы моделирования и иллюстрируя их несколькими простыми примерами. Шаблоны анализа представляют собой объектные модели, которые можно многократно использовать.
Мой труд отличается от большинства существующих изданий. Вместо того чтобы акцентировать внимание на процессе моделирования, я сосредоточу внимание на результатах этого процесса — на самих моделях. В настоящее время я занимаю должность главного архитектора в ФКУ "Государственные технологии" (ФКУ "ГосТех") и преподаю дисциплины, связанные с системным анализом, проектированием информационных систем, архитектурой предприятия и поддерживающими их деятельность информационными системами (архитектурой программного обеспечения) в двух ведущих вузах страны. Меня часто просят обучать персонал моделированию и предоставлять наставничество в рамках проектов. Большая часть моих навыков основана на знании методов моделирования и их применении. Однако более значимым является мой опыт создания множества моделей и регулярного наблюдения повторяющихся проблем. Я часто замечаю, что многие аспекты проектов повторяют проблемы, с которыми я сталкивался ранее. Этот опыт позволяет мне повторно использовать модели, которые я создавал ранее, улучшать их и адаптировать к новым требованиям.
За последние несколько лет все больше людей начали осознавать это явление. Мы поняли, что типичные методические пособия, хотя и полезны, представляют собой лишь первый шаг в процессе обучения, который также должен отражать фактические результаты. В результате разнообразия сообщества шаблонов у нас возникли трудности с определением термина "шаблон". Мы все полагаем, что можем распознать закономерность, когда видим её, и большинство из нас согласилось бы с ней в большинстве случаев, но мы не можем прийти к единому определению. Вот мое определение: шаблон — это идея, которая оказалась полезной в одном практическом контексте и, вероятно, будет полезна в других.
Я предпочитаю оставлять определение достаточно свободным, поскольку хочу оставаться как можно ближе к основополагающей мотивации шаблонов, не добавляя слишком много ограничительных поправок. Шаблон может принимать множество форм, и каждая форма добавляет специализации, которые полезны для данного типа шаблона. Я буду использовать термин "книга", поскольку хочу системно изложить и обобщить свой опыт системного анализа и проектирования информационных систем, что невозможно уместить в объём статьи. Поэтому предлагаю называть этот труд книгой (пусть и не изданной официально). Эта книга посвящена шаблонам в анализе, которые отражают концептуальные структуры бизнес-процессов, а не реальные программные реализации. Мы обсудим шаблоны для различных областей бизнеса. Такие шаблоны трудно классифицировать по традиционным вертикальным областям (производство, финансы, здравоохранение и т. д.), поскольку они часто полезны в нескольких областях. Эти шаблоны важны, так как они помогают нам понять, как люди воспринимают мир. Важно основывать дизайн компьютерной системы на этом восприятии и, действительно, изменять это восприятие — именно в этом заключается реинжиниринг бизнес-процессов.
С другой стороны, концептуальные шаблоны не могут существовать изолированно. Концептуальные модели полезны разработчикам программного обеспечения только в том случае, если они могут видеть, как их реализовать. В этой книге я представляю шаблоны, которые можно использовать для преобразования концептуальных моделей в программное обеспечение, и обсуждаю, как это программное обеспечение вписывается в архитектуру большой информационной системы. Я также делюсь конкретными советами по реализации с шаблонами.
Я пишу это, потому что считаю, что должна быть книга, которую я хотел бы прочитать, когда начинал проектировать информационные системы. Системные аналитики и аналитики бизнес-процессов, а также корпоративные архитекторы найдут в ней идеи, которые помогут им начать работу в новой области. Шаблоны содержат полезные модели, обоснование их конструкции, а также указания на то, когда их следует применять, а когда нет. С помощью этой информации разработчик моделей может адаптировать модели к конкретной задаче.
Шаблоны, приведенные в этой книге, также могут быть использованы при анализе моделей — чтобы увидеть, что могло быть упущено, и предложить некоторые альтернативы, которые могут привести к улучшению. Когда я просматриваю проект, я обычно сравниваю то, что вижу, с шаблонами, которые я усвоил из предыдущей работы. Я обнаружил, что осознание закономерностей в моей работе помогает мне легче применять свой прошлый опыт. Шаблоны, подобные изложенным здесь, также раскрывают проблемы моделирования, которые выходят за рамки того, что может быть описано в простом учебнике. Обсуждая, почему мы моделируем вещи именно так, как мы это делаем, мы получаем большее понимание того, как улучшить наше моделирование, даже если мы не используем шаблоны напрямую.
В этой работе два раздела. В первом рассматриваются шаблоны анализа, которые являются шаблонами концептуальных бизнес-моделей. Они предоставляют ключевые абстракции из таких областей, как торговля, измерение, бухгалтерский учет и иерархические взаимоотношения внутри организации (организационные отношения). Шаблоны являются концептуальными, поскольку они представляют то, как люди думают о бизнесе, а не то, как устроена компьютерная система. В главах этого раздела рассказывается об альтернативных моделях, которые могут быть использованы, а также о сильных и слабых сторонах этих альтернатив. Хотя каждый шаблон будет явно полезен тем, кто работает в одной области, базовый шаблон часто оказывается полезным и в других областях.
Второй раздел посвящен шаблонам поддержки, которые помогают использовать шаблоны анализа. Шаблоны поддержки показывают, как шаблоны анализа вписываются в архитектуру информационных систем, как концептуальные модели превращаются в программные интерфейсы и реализации, а также в том, как определенные продвинутые конструкции моделирования соотносятся с более простыми структурами.
Для описания этих шаблонов мне нужны обозначения. Я не использую какой-то один метод и предпочитаю смешивать приемы из различных методов. Каждый раздел разделен на главы. Каждая глава, посвященная шаблонам анализа, содержит шаблоны, которые связаны общим представлением о предметной области под влиянием проектов, которые их породили. Такая организация отражает тот факт, что любой шаблон должен исходить из практического контекста. Каждый шаблон представлен в отдельном подразделе главы. Я не использую официальные заголовки для шаблонов, которые применяются некоторыми авторами шаблонов. Я описываю каждый шаблон в форме, максимально приближенной к исходной форме проекта, насколько это возможно, с минимумом абстракции. Я добавляю примеры, чтобы продемонстрировать использование шаблона в его исходной области, а также предлагаю, как этот шаблон можно было бы использовать в других областях. Одна из самых больших трудностей, связанных с шаблонами, заключается в их переносе в другие области — я следую принципу, согласно которому это следует оставить читателю.
Таким образом, этот труд представляет собой каталог, а не классическую книгу, которую нужно читать "от корки до корки". Я постарался написать каждую главу так, чтобы её можно было читать независимо от других глав. Однако это не всегда возможно. Всякий раз, когда глава требует, чтобы сначала была прочитана другая глава, я указываю на это во введении. Каждая глава содержит введение, в котором объясняется общая предметная область главы, кратко описываются шаблоны, содержащиеся в главе, и указывается, из каких проектов возникли шаблоны.
Данная книга может представлять интерес для широкого круга читателей, однако разные категории читателей будут извлекать из нее различные знания и для этого могут потребоваться разные уровни подготовки. Я предполагаю, что основной аудиторией данной работы станут аналитики и архитекторы объектно-ориентированных систем, особенно те, кто вовлечен в процессы анализа и проектирования. Эти читатели должны обладать хотя бы базовыми знаниями и навыками в использовании методов объектно-ориентированного анализа и проектирования, поскольку эта книга не включает введения в данные темы. Поэтому я настоятельно рекомендую новичкам в данной области предварительно ознакомиться с основами объектно-ориентированного анализа и проектирования. Необходимо подчеркнуть, что шаблоны, представленные в этой книге, являются концептуальными по своей сути, и я использую исключительно концептуальный подход к моделированию. Это обстоятельство влечет за собой некоторые стилистические отличия от тех текстов, которые опираются на более реалистичный подход к моделированию.
Несмотря на небольшое количество, существует важная группа читателей, состоящая из экспертов в предметной области, вовлеченных в проекты моделирования. Для таких специалистов знание компьютеров не является обязательным, однако они должны быть осведомлены о концептуальном моделировании. Одной из основных причин использования концептуальных моделей в данной книге является стремление облегчить работу этой категории читателей. Проект моделирования в этом контексте может подразумевать анализ для разработки компьютерной системы. Я обучал множество профессионалов данному виду моделирования и пришел к выводу, что опыт работы с программным обеспечением не представляет ни особого преимущества, ни недостатка для концептуального моделирования. Шаблоны бизнес-моделей одинаково актуальны как для бизнес-моделирования, так и для анализа компьютерных систем. Читатели из этой группы должны пройти курс по объектно-ориентированному анализу и проектированию, с акцентом на концептуальные аспекты анализа.
Я надеюсь, что многие программисты смогут освоить эти шаблоны, однако у некоторых могут возникнуть затруднения из-за отсутствия кода и концептуальной направленности работы. Эта книга является объектно-ориентированной, и я без колебаний подтверждаю свою уверенность в том, что объектно-ориентированный подход представляет собой наилучший метод разработки программного обеспечения. Тем не менее, следует отметить, что эти модели прежде всего являются концептуальными, и многие специалисты по моделированию данных имеют долгую традицию работы с концептуальными (или логическими) моделями. Разработчики моделей данных обязательно извлекут выгоду из многих представленных шаблонов, особенно если они применяют более сложные семантические методы. Особенности объектно-ориентированных моделей позволят выявить множество различий между объектно-ориентированным и традиционным подходами. Я бы рекомендовал таким читателям использовать данную книгу в сочетании с произведениями по объектно-ориентированному анализу и проектированию, которые акцентируют внимание на концептуальной стороне моделирования и взаимосвязях между объектно-ориентированным анализом, проектированием и семантическим моделированием данных.
Менеджеры также могут найти данную книгу полезной в качестве отправной точки для развития своей деятельности. Использование шаблонов может помочь в прояснении целей, а планирование проектов может воспользоваться широкими возможностями, определяемыми данными шаблонами.
Целью написания этой книги не являлось создание учебника "для студентов". Моя главная задача заключалась в том, чтобы предложить адекватный ресурс профессионалам и инженерам-программистам. Тем не менее, я искренне надеюсь на то, что некоторым студентам она также станет полезной. Лично мне, когда я изучал анализ и проектирование, было трудно найти качественные примеры, на которых можно было бы учиться, примеры, исходящие из практического опыта за пределами учебных заведений. Аналогично тому, как просмотр качественного кода может значительно обогатить Ваши знания программирования, изучение хороших моделей может предоставлять важные уроки в анализе и проектировании.