Сообщений 8 Оценка 85 [+1/-1] Оценить |
Создание компьютерных систем - дело далеко не простое. По мере того как возрастает их сложность, процессы конструирования соответствующего программного обеспечения становятся все более трудоемкими, причем затраты труда растут экспоненциально. Как и в любой профессии, прогресс в программировании достигается исключительно путем обучения, причем не только на ошибках, но и на удачах - как своих, так и чужих.
Книга дает ответы на трудные вопросы, с которыми приходится сталкиваться всем разработчикам корпоративных систем.
Автор, известный специалист в области объектно-ориентированного программирования, заметил, что с развитием технологий базовые принципы проектирования и решения общих проблем остаются неизменными, и выделил более 40 наиболее употребительных подходов, оформив их в виде типовых решений.
Результат перед вами - незаменимое руководство по архитектуре программных систем для любой корпоративной платформы. Это своеобразное учебное пособие поможет вам не только усвоить информацию, но и передать полученные знания окружающим значительно быстрее и эффективнее, чем это удавалось автору.
Книга предназначена для программистов, проектировщиков и архитекторов, которые занимаются созданием корпоративных приложений и стремятся повысить качество принимаемых стратегических решений.
Вот он гуру. Гуру объектно-ориентированного программирования. Мартин Фаулер один из моих любимых писателей, которые работают в области информационных технологий и программирования. Чего только стоят его книги посвященные UML и рефакторингу!
Данная книга посвящена особенностям архитектур корпоративных приложений. Автор выставляет на суд читателя свой опыт и опыт других программистов в создании бизнес-систем. В книге описываются основные типовые архитектурные проблемы, способ решения которых оказывает значительное влияние на дальнейшую разработку системы. В круг таких проблем стоит отнести следующие: декомпозиция системы, отображение объектной архитектуры в реляционные базы данных, управление параллельными заданиями и организация распределенных вычислений. Мне нравятся книги посвященные паттернам (типовым решениям). Чтение такой книги сродни беседе с коллегой за бутылочкой пива в непринужденной обстановке. Когда вы можете обменяться мнениями на предмет, как кто решает те или иные проблемы, возникающие в процессе разработки. Читая "Архитектуру корпоративных программных приложений", я порой то восклицал от удивления красоты решения или пролистывал страницу за страницей, сознавая, что использую такие же решения практически каждый день. Правда, иногда хотелось даже возразить Мартину: "Я делаю это по-другому, и мое решение ничуть не хуже!".
Книги Мартина Фаулера, и данная книга в частности, отличаются невообразимой простотой изложения. И не только изложения. После прочтения материала все время возвращаешься к мысли, что объектно-ориентированный анализ и проектирование оказываются проще, чем кажутся со стороны.
После прочтения значительной части книги я понял - это то, что нужно было мне во времена моей бытности преподавателем, когда читал дисциплину "Технология программного обеспечения". С выводами повременим, сначала о сути.
Книга состоит из двух крупных глав. Первая глава "Обзор" является tutorial'ом (краткой инструкцией для новичков), но утяжелённой философскими рассуждениями о сути паттернов (pattern) и их применении. Вторая - настоящий справочник по корпоративным решениям. Начало глав предваряет общая картина проектирования корпоративных приложений. Здесь определяется объект изучения и его свойства (статья "Enterprise Applications"), дается мелкая классификация широко используемых подходов ("Kinds of Enterprise Application") и рассуждения о целесообразности производительности (не в пользу последней).
Первая и вторая глава имеют схожую структуру, поэтому легко перейти от общих рассуждений к конкретным паттернам и наоборот. Список затрагиваемых тем:
Начинается обсуждение с понятия многослойной системы для корпоративных приложений. Обосновывается базовая 3 уровневая модель: представление-домен-источник данных. По ходу обсуждения, модель расширяется до большего числа уровней. Понравилось, что Мартин постоянно ссылается на книги, где можно почерпнуть больше информации альтернативным моделям. Выделяется 3 подхода в организации логики приложения: Transaction Script (логика размазана в процедурах непосредственно вызываемых из слоя представления), Table Module (бизнес данные представляются в массивах данных - таблицах, DateSet для .Net Framework сразу приходит на ум) и Domain Model. В "Domain Model" бизнес информация представлена в законченных объектах и логика отражает взаимодействия в реальном мире, а для взаимодействия с логикой приложения выделятся дополнительный уровень - Service Layer. Разобравшись с общей структурой приложения автор углубляется во взаимное отражение бизнес-данных приложения и хранилища (базы данных, файл и т.п.). Предлагаемые решения есть перебор различных взаимодействий между источником данных (база данных и др.) и доменной моделью (конкретные классы и объекты приложения). Возможны 4 варианта: Row Gateway - посредник в виде объекта, выполняющий запросы в базу и возвращающий в виде членов класса всевозможные данные (сами поля таблиц, счётчики и т.п.); Table Gateway - то же самое, но возвращающий единым объектом RecordSet; Active Record -посредником и бизнес-объект одновременно; и самое сложное решение, когда бизнес-объект ничего не знает о базе данных, а его обслуживает некая внешняя сила - Data Mapping. Возникающие в ходе такого действа вопросы делятся на две категории: поведенческие и структурные. Первая группа отвечает за загрузку, сохранение, кэширование и откат данных (Unit of Work, Identity Map, Lazy Load). Вторая за связи между объектами, за отражение (mapping) в различных ситуациях: цепочки объектов с наследованием, кратности (один-к-одному, один-ко-многим и др.) и т.д.. Тут же детально рассмотрены режимы с использованием метаданных (например, Attribute для .Net Framework).
Web приложение построенное на основе модели MVC может внутри себя иметь различное представление: это простое вкрапливание кода в страницу (Transform View), более продвинутое представление на основе шаблонов (Template View) и самое гибкое двухшаговое (Two Steps View, здесь облегчает жизнь XSLT). Реакция пользователя обрабатывается паттерном Page Controller или Front Controller. Автор упустил рассмотрение архитектуры GUI-приложений, но в дальнейшем добавил эту информацию на своём сайте.
Большая теоретическая справка дана по разработке параллельных задач. Обсуждаются типовые проблемы и решения для разработчика. Состояние сессии представлено тремя паттернами: Client-, Server-, Database- Session. Распределённые приложения сталкиваются с множеством проблем, автор объединяет их под одним грифом - "минимизация границ" и даёт решения Remote Fa?ade, Value Object и Data Transfer Object.
В завершение даётся ряд элементарных паттернов из области обработки и хранения данных (Gateway, Record Set, Registry, Mapper), построения своих бизнес-объектов (Super Layer, Value Object, Special Case, Null object, Money) и советы по интерфейсной части (Separate Interface, Plugin, Service Stub).
Выводы: отличный учебник, к сожалению, без задачника. Многие вещи известны из собственной практики, а теперь им дали названия в мировом масштабе. Значит отпала необходимость мучаться и долго объясняться, уже не нужно выдумывать плюсы и минусы, всё собрано в одном справочнике. Диагноз: MUST READ.
Сообщений 8 Оценка 85 [+1/-1] Оценить |