Сообщений 8    Оценка 85 [+1/-1]         Оценить  
Система Orphus

Архитектура корпоративных программных приложений

Автор: Мартин Фаулер
Издательство: Вильямс, 2004
544 страницы

Материал предоставил: Николай Гребенщиков
Найти в магазинах
Купить в Озоне (906 руб.)
Купить в Books.Ru
Купить в Болеро (557 руб.)

Аннотация

Содержание
Комментарии

Аннотация

Создание компьютерных систем - дело далеко не простое. По мере того как возрастает их сложность, процессы конструирования соответствующего программного обеспечения становятся все более трудоемкими, причем затраты труда растут экспоненциально. Как и в любой профессии, прогресс в программировании достигается исключительно путем обучения, причем не только на ошибках, но и на удачах - как своих, так и чужих.

Книга дает ответы на трудные вопросы, с которыми приходится сталкиваться всем разработчикам корпоративных систем.

Автор, известный специалист в области объектно-ориентированного программирования, заметил, что с развитием технологий базовые принципы проектирования и решения общих проблем остаются неизменными, и выделил более 40 наиболее употребительных подходов, оформив их в виде типовых решений.

Результат перед вами - незаменимое руководство по архитектуре программных систем для любой корпоративной платформы. Это своеобразное учебное пособие поможет вам не только усвоить информацию, но и передать полученные знания окружающим значительно быстрее и эффективнее, чем это удавалось автору.

Книга предназначена для программистов, проектировщиков и архитекторов, которые занимаются созданием корпоративных приложений и стремятся повысить качество принимаемых стратегических решений.

Содержание

Часть I. Обзор
Глава 1. ''Расслоение'' системы
Развитие модели слоев в корпоративных программных приложениях
Три основных слоя
Где должны функционировать слои
Глава 2. Организация бизнес-логики
Выбор типового решения
Уровень служб
Глава 3. Объектные модели и реляционные базы данных
Архитектурные решения
Функциональные проблемы
Считывание данных
Взаимное отображение объектов и реляционных структур
Отображение связей
Наследование
Реализация отображения
Двойное отображение
Использование метаданных
Соединение с базой данных
Другие проблемы
Дополнительные источники информации
Глава 4. Представление данных в Web
Типовые решения представлений
Типовые решения входных контроллеров
Дополнительные источники информации
Глава 5. Управление параллельными заданиями
Проблемы параллелизма
Контексты выполнения
Изолированность и устойчивость данных
Стратегия блокирования
Предотвращение возможности несогласованного чтения данных
Разрешение взаимоблокировок
Транзакции
ACID: свойства транзакции
Ресурсы транзакции
Уровни изоляции
Системные транзакции и бизнес-транзакции
Типовые решения задачи обеспечения автономного параллелизма
Параллельные операции и сервера приложений
Дополнительные источники информации
Глава 6. Сеансы и состояния
В чем приемущество отсутствия "состояния"
Состояние сеанса
Способы сохранения состояния сеанса
Глава 7. Стратегии распределенных вычислений
Соблазны модели распределенных вычислений
Интерфейсы локального и удаленного вызова
Когда без распределения не обойтись
Сужение границ распределения
Интерфейсы распределения
Глава 8. Общая картина
Предметная область
Источник данных
Источник даннах для сценария транзакции
Источник данных для модуля таблицы
Источник данных для модели предметной области
Слой представления
Платформы и инструменты
Java и J2EE
.NET
Хранимые процедуры
Web-службы
Другие модели слоев

Часть II. Типовые решения
Глава 9. Представление бизнес-логики
Сценарий транзакции (Transaction Script)
Модель предметной области (Domain Object)
Модуль таблицы (Table Module)
Слой служб (Service Layer)
Глава 10. Архитектурные типовые решения источников данных
Шлюз таблицы данных (Table Data Gateway)
Шлюз записи данных (Row Data Gateway)
Активная запись (Active Record)
Преобразователь данных (Data Mapper)
Глава 11. Объектно-реляционные типовые решения, предназначенные для моделирования поведения
Единица работы (Unit of Work)
Коллекция объектов (Identity Map)
Загрузка по требованию (Lazy Load)
Глава 12. Объектно-реляционные типовые решения, предназначенные для моделирования структуры
Поле идентификации (Identity Field)
Отображение с помощью таблицы ассоциаций (Association Table Mapping)
Отображение зависимых объектов (Dependent Mapping)
Внедренное значение (Embedded Value)
Сериализованный крупный объект (Serialized LOB)
Наследование с одной таблицей (Single Table Inheritance)
Наследование с таблицами для каждого класса (Class Table Inheritance)
Наследование с таблицами для каждого конкретного класса (Concrete Table Inheritance)
Преобразователи наследования (Inheritance Mappers)
Глава 13. Типовые решения объектно-реляционного отображения с использованием метаданных
Отображение метаданных (Metadata Mapping)
Объект запроса (Query Object)
Хранилище (Repository)
Глава 14. Типовые решения, предназначенные для представления данных в Web
Модель-представление-контроллер (Model View Controller)
Контроллер страниц (Page Controller)
Контроллер запросов (Front Controller)
Представление по шаблону (Template View)
Представление с преобразованием (Transform View)
Двухэтапное преобразование (Two Step View)
Контроллер приложения (Application Controller)
Глава 15. Типовые решения распределенной обработки данных
Интерфейс удаленного доступа (Remote Facade)
Объект переноса данных (Data Transfer Object)
Глава 16. Типовые решения для обработки задач автономного параллелизма
Оптимистическая автономная блокировка (Optimistic Offline Lock)
Пессимистическая автономная блокировка (Pessimistic Offline Lock)
Блокировка с низкой степенью детализации (Coarse-Grained Lock)
Неявная блокировка (Implicit Lock)
Глава 17. Типовые решения для хранения состояния сеанса
Сохранение состояния сеанса на стороне клиента (Client Session State)
Сохранение состояния сеанса на стороне сервера (Server Session State)
Сохранение состояния сеанса в базе данных (Database Session State)
Глава 18. Базовые типовые решения
Шлюз (Gateway)
Преобразователь (Mapper)
Супер тип слоя (Layer Supertype)
Отделенный интерфейс (Separated Interface)
Реестр (Registry)
Объект-значение (Value Object)
Деньги (Money Object)
Частный случай (Special Case)
Дополнительный модуль (Plugin)
Фиктивная служба (Service Stub)
Множество записей (Record Set)

Комментарии

Николай Гребенщиков

Вот он гуру. Гуру объектно-ориентированного программирования. Мартин Фаулер один из моих любимых писателей, которые работают в области информационных технологий и программирования. Чего только стоят его книги посвященные UML и рефакторингу!

Данная книга посвящена особенностям архитектур корпоративных приложений. Автор выставляет на суд читателя свой опыт и опыт других программистов в создании бизнес-систем. В книге описываются основные типовые архитектурные проблемы, способ решения которых оказывает значительное влияние на дальнейшую разработку системы. В круг таких проблем стоит отнести следующие: декомпозиция системы, отображение объектной архитектуры в реляционные базы данных, управление параллельными заданиями и организация распределенных вычислений. Мне нравятся книги посвященные паттернам (типовым решениям). Чтение такой книги сродни беседе с коллегой за бутылочкой пива в непринужденной обстановке. Когда вы можете обменяться мнениями на предмет, как кто решает те или иные проблемы, возникающие в процессе разработки. Читая "Архитектуру корпоративных программных приложений", я порой то восклицал от удивления красоты решения или пролистывал страницу за страницей, сознавая, что использую такие же решения практически каждый день. Правда, иногда хотелось даже возразить Мартину: "Я делаю это по-другому, и мое решение ничуть не хуже!".

Книги Мартина Фаулера, и данная книга в частности, отличаются невообразимой простотой изложения. И не только изложения. После прочтения материала все время возвращаешься к мысли, что объектно-ориентированный анализ и проектирование оказываются проще, чем кажутся со стороны.

Денис Миллер, инструктор Luxoft (http://luxoft.ru/edu)

После прочтения значительной части книги я понял - это то, что нужно было мне во времена моей бытности преподавателем, когда читал дисциплину "Технология программного обеспечения". С выводами повременим, сначала о сути.

Книга состоит из двух крупных глав. Первая глава "Обзор" является tutorial'ом (краткой инструкцией для новичков), но утяжелённой философскими рассуждениями о сути паттернов (pattern) и их применении. Вторая - настоящий справочник по корпоративным решениям. Начало глав предваряет общая картина проектирования корпоративных приложений. Здесь определяется объект изучения и его свойства (статья "Enterprise Applications"), дается мелкая классификация широко используемых подходов ("Kinds of Enterprise Application") и рассуждения о целесообразности производительности (не в пользу последней).

Первая и вторая глава имеют схожую структуру, поэтому легко перейти от общих рассуждений к конкретным паттернам и наоборот. Список затрагиваемых тем:

  1. слои
  2. подходы в организации бизнес логики
  3. отражение (Data Mapping)
  4. модель MVC для построения Web-решений
  5. сложные решения (с параллельными заданиями, сложной системой состояний и распределёнными вычислениями)
  6. элементарные паттерны.

Начинается обсуждение с понятия многослойной системы для корпоративных приложений. Обосновывается базовая 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]         Оценить