Шаблоны корпоративных приложений
Мартин Фаулер, Дейвид Райс, Мэттью Фоммел, Эдвард Хайет, Роберт Ми, Рэнди Стаффорд
Создание компьютерных систем - дело далеко не простое. По мере того как возрастает их сложность, процессы конструирования соответствующего программного обеспечения становятся все более трудоемкими, причем затраты труда растут экспоненциально. Как и в любой профессии, прогресс в программировании достигается исключительно путем обучения, причем не только на ошибках, но и на удачах - как своих, так и чужих. Книга дает ответы на трудные вопросы, с которыми приходится сталкиваться всем разработчикам корпоративных систем. Автор, известный специалист в области объектно-ориентированного программирования, заметил, что с развитием технологий базовые принципы проектирования и решения общих проблем остаются неизменными, и выделил более 40 наиболее употребительных подходов, оформив их в виде типовых решений. Результат перед вами - незаменимое руководство по архитектуре программных систем для любой корпоративной платформы. Это своеобразное учебное пособие поможет вам не только усвоить информацию, но и передать полученные знания окружающим значительно быстрее и эффективнее, чем это удавалось автору.
Книга предназначена для программистов, проектировщиков и архитекторов, которые занимаются созданием корпоративных приложений и стремятся повысить качество принимаемых стратегических решений.
Издательство: Вильямс, 2010 г.
ISBN 978-5-8459-1611-2, 0-321-12742-0
Количество страниц: 544.
Содержание книги «Шаблоны корпоративных приложений»:
- 17 Предисловие
- 27 Введение
- 41 Часть I. Обзор
- 43 Глава 1. «Расслоение» системы
- 44 Развитие модели слоев в корпоративных программных приложениях
- 46 Три основных слоя
- 48 Где должны функционировать слои
- 51 Глава 2. Организация бизнес-логики
- 55 Выбор типового решения
- 56 Уровень служб
- 59 Глава 3. Объектные модели и реляционные базы данных
- 59 Архитектурные решения
- 64 Функциональные проблемы
- 66 Считывание данных
- 67 Взаимное отображение объектов и реляционных структур
- 67 Отображение связей
- 71 Наследование
- 73 Реализация отображения
- 74 Двойное отображение
- 75 Использование метаданных
- 76 Соединение с базой данных
- 78 Другие проблемы
- 79 Дополнительные источники информации
- 81 Глава 4. Представление данных в Web
- 84 Типовые решения представлений
- 86 Типовые решения входных контроллеров
- 86 Дополнительные источники информации
- 87 Глава 5. Управление параллельными заданиями
- 88 Проблемы параллелизма
- 89 Контексты выполнения
- 91 Изолированность и устойчивость данных
- 91 Стратегии блокирования
- 93 Предотвращение возможности несогласованного чтения данных
- 94 Разрешение взаимоблокировок
- 95 Транзакции
- 96 ACID: свойства транзакций
- 96 Ресурсы транзакций
- 97 Уровни изоляции
- 99 Системные транзакции и бизнес-транзакции
- 101 Типовые решения задачи обеспечения автономного параллелизма
- 102 Параллельные операции и серверы приложений
- 104 Дополнительные источники информации
- 105 Глава 6. Сеансы и состояния
- 105 В чем преимущество отсутствия «состояния»
- 107 Состояние сеанса
- 108 Способы сохранения состояния сеанса
- 111 Глава 7. Стратегии распределенных вычислений
- 111 Соблазны модели распределенных объектов
- 112 Интерфейсы локального и удаленного вызова
- 114 Когда без распределения не обойтись
- 115 Сужение границ распределения
- 116 Интерфейсы распределения
- 119 Глава 8. Общая картина
- 120 Предметная область
- 121 Источник данных
- 121 Источник данных для сценария транзакции
- 122 Источник данных для модуля таблицы
- 122 Источник данных для модели предметной области
- 123 Слой представления
- 124 Платформы и инструменты
- 124 Java и J2EE
- 125 .NET
- 126 Хранимые процедуры
- 126 Web-службы
- 127 Другие модели слоев
- 131 Часть II. Типовые решения
- 133 Глава 9. Представление бизнес-логики
- 133 Сценарий транзакции (Transaction Script)
- 133 Принцип действия
- 135 Назначение
- 135 Задача определения зачтенного дохода
- 136 Пример: определение зачтенного дохода (Java)
- 140 Модель предметной области (Domain Model)
- 140 Принцип действия
- 143 Назначение
- 143 Дополнительные источники информации
- 144 Пример: определение зачтенного дохода (Java)
- 148 Модуль таблицы (Table Module)
- 149 Принцип действия
- 151 Назначение
- 152 Пример: определение зачтенного дохода (C#)
- 156 Слой служб (Service Layer)
- 157 Принцип действия
- 157 Разновидности «бизнес-логики»
- 157 Варианты реализации
- 158 Быть или не быть удаленному доступу
- 158 Определение необходимых служб и операций
- 160 Назначение
- 160 Дополнительные источники информации
- 161 Пример: определение зачтенного дохода (Java)
- 157 Принцип действия
- 133 Сценарий транзакции (Transaction Script)
- 167 Глава 10. Архитектурные типовые решения источников данных
- 167 Шлюз таблицы данных (Table Data Gateway)
- 167 Принцип действия
- 168 Назначение
- 169 Дополнительные источники информации
- 170 Пример: класс PersonGateway (C#)
- 172 Пример: использование объектов ADO.NET DataSet (C#)
- 175 Шлюз записи данных (Row Data Gateway)
- 175 Принцип действия
- 176 Назначение
- 178 Пример: запись о сотруднике (Java)
- 181 Пример: использование диспетчера данных для объекта домена (Java)
- 182 Активная запись (Active Record)
- 182 Принцип действия
- 184 Назначение
- 184 Пример: простой класс Person (Java)
- 187 Преобразователь данных (Data Mapper)
- 187 Принцип действия
- 190 Обращение к методам поиска
- 191 Отображение данных на поля объектов домена
- 192 Отображения на основе метаданных
- 192 Назначение
- 193 Пример: простой преобразователь данных (Java)
- 198 Пример: отделение методов поиска (Java)
- 201 Пример: создание пустого объекта (Java)
- 187 Принцип действия
- 167 Шлюз таблицы данных (Table Data Gateway)
- 205 Глава 11. Объектно-реляционные типовые решения, предназначенные для моделирования поведения
- 205 Единица работы (Unit of Work)
- 206 Принцип действия
- 211 Назначение
- 212 Пример: регистрация посредством изменяемого объекта (Java)
- 216 Коллекция объектов (Identity Map)
- 216 Принцип действия
- 217 Выбор ключей
- 217 Явная или универсальная?
- 217 Сколько нужно коллекций?
- 218 Куда их поместить?
- 219 Назначение
- 219 Пример: методы для работы с коллекцией объектов (Java)
- 216 Принцип действия
- 220 Загрузка по требованию (Lazy Load)
- 221 Принцип действия
- 223 Назначение
- 224 Пример: инициализация по требованию (Java)
- 224 Пример: виртуальный прокси-объект (Java)
- 226 Пример: использование диспетчера значения (Java)
- 227 Пример: использование фиктивных объектов (C#)
- 205 Единица работы (Unit of Work)
- 237 Глава 12. Объектно-реляционные типовые решения, предназначенные для моделирования структуры
- 237 Поле идентификации (Identity Field)
- 237 Принцип действия
- 238 Выбор ключа
- 239 Представление поля идентификации в объекте
- 240 Вычисление нового значения ключа
- 242 Назначение
- 243 Дополнительные источники информации
- 243 Пример: числовой ключ (C#)
- 244 Пример: использование таблицы ключей (Java)
- 246 Пример: использование составного ключа (Java)
- 246 Класс ключа
- 249 Чтение
- 252 Вставка
- 256 Обновление и удаление
- 237 Принцип действия
- 258 Отображение внешних ключей (Foreign Key Mapping)
- 258 Принцип действия
- 261 Назначение
- 262 Пример: однозначная ссылка (Java)
- 265 Пример: многотабличный поиск (Java)
- 266 Пример: коллекция ссылок (C#)
- 269 Отображение с помощью таблицы ассоциаций (Association Table Mapping)
- 270 Принцип действия
- 270 Назначение
- 271 Пример: служащие и профессиональные качества (C#)
- 274 Пример: использование SQL для непосредственного обращения к базе данных (Java)
- 278 Пример: загрузка сведений о нескольких служащих посредством одного запроса (Java)
- 283 Отображение зависимых объектов (Dependent Mapping)
- 283 Принцип действия
- 285 Назначение
- 285 Пример: альбомы и композиции (Java)
- 288 Внедренное значение (Embedded Value)
- 289 Принцип действия
- 289 Назначение
- 290 Дополнительные источники информации
- 290 Пример: простой объект-значение (Java)
- 292 Сериализованный крупный объект (Serialized LOB)
- 292 Принцип действия
- 294 Назначение
- 294 Пример: сериализация иерархии отделов в формат XML (Java)
- 297 Наследование с одной таблицей (Single Table Inheritance)
- 298 Принцип действия
- 298 Назначение
- 299 Пример: общая таблица игроков (C#)
- 301 Загрузка объекта из базы данных
- 303 Обновление объекта
- 303 Вставка объекта
- 304 Удаление объекта
- 305 Наследование с таблицами для каждого класса (Class Table Inheritance)
- 305 Принцип действия
- 306 Назначение
- 307 Дополнительные источники информации
- 307 Пример: семейство игроков (C#)
- 307 Загрузка объекта
- 310 Обновление объекта
- 311 Вставка объекта
- 312 Удаление объекта
- 313 Наследование с таблицами для каждого конкретного класса (Concrete Table Inheritance)
- 314 Принцип действия
- 315 Назначение
- 316 Пример: конкретные классы игроков (C#)
- 318 Загрузка объекта из базы данных
- 320 Обновление объекта
- 320 Вставка объекта
- 321 Удаление объекта
- 322 Преобразователи наследования (Inheritance Mappers)
- 323 Принцип действия
- 324 Назначение
- 237 Поле идентификации (Identity Field)
- 325 Глава 13. Типовые решения объектно-реляционного отображения с использованием метаданных
- 325 Отображение метаданных (Metadata Mapping)
- 326 Принцип действия
- 327 Назначение
- 328 Пример: использование метаданных и метода отражения (Java)
- 328 Хранение метаданных
- 330 Поиск по идентификатору
- 332 Запись в базу данных
- 334 Извлечение множества объектов
- 335 Объект запроса (Query Object)
- 336 Принцип действия
- 337 Назначение
- 337 Дополнительные источники информации
- 337 Пример: простой объект запроса (Java)
- 341 Хранилище (Repository)
- 342 Принцип действия
- 343 Назначение
- 344 Дополнительные источники информации
- 344 Пример: поиск подчиненных заданного сотрудника (Java)
- 345 Пример: выбор стратегий хранилища (Java)
- 325 Отображение метаданных (Metadata Mapping)
- 347 Глава 14. Типовые решения, предназначенные для представления данных в Web
- 347 Модель–представление–контроллер (Model View Controller)
- 348 Принцип действия
- 350 Назначение
- 350 Контроллер страниц (Page Controller)
- 351 Принцип действия
- 352 Назначение
- 352 Пример: простое отображение с помощью контроллера-сервлета и представления JSP (Java)
- 355 Пример: использование страницы JSP в качестве обработчика запросов (Java)
- 358 Пример: обработка запросов страницей сервера с применением механизма разделения кода и представления (C#)
- 362 Контроллер запросов (Front Controller)
- 362 Принцип действия
- 364 Назначение
- 364 Дополнительные источники информации
- 365 Пример: простое отображение (Java)
- 368 Представление по шаблону (Template View)
- 369 Принцип действия
- 369 Вставка маркеров
- 370 Вспомогательный объект
- 370 Условное отображение
- 371 Итерация
- 372 Обработка страницы
- 372 Использование сценариев
- 372 Назначение
- 373 Пример: использование страницы JSP в качестве представления с вынесением контроллера в отдельный объект (Java)
- 375 Пример: страница сервера ASP.NET (C#)
- 369 Принцип действия
- 379 Представление с преобразованием (Transform View)
- 379 Принцип действия
- 380 Назначение
- 381 Пример: простое преобразование (Java)
- 383 Двухэтапное представление (Two Step View)
- 383 Принцип действия
- 385 Назначение
- 390 Пример: двухэтапное применение XSLT (XSLT)
- 393 Пример: страницы JSP и пользовательские дескрипторы (Java)
- 397 Контроллер приложения (Application Controller)
- 398 Принцип действия
- 400 Назначение
- 400 Дополнительные источники информации
- 400 Пример: модель состояний контроллера приложения (Java)
- 347 Модель–представление–контроллер (Model View Controller)
- 405 Глава 15. Типовые решения распределенной обработки данных
- 405 Интерфейс удаленного доступа (Remote Facade)
- 406 Принцип действия
- 409 Интерфейс удаленного доступа и типовое решение интерфейс сеанса (Session Facade)
- 409 Слой служб
- 410 Назначение
- 410 Пример: использование компонента сеанса Java в качестве интерфейса удаленного доступа (Java)
- 414 Пример: Web-служба (C#)
- 406 Принцип действия
- 419 Объект переноса данных (Data Transfer Object)
- 419 Принцип действия
- 421 Сериализация объекта переноса данных
- 423 Сборка объекта переноса данных из объектов домена
- 424 Назначение
- 424 Дополнительные источники информации
- 425 Пример: передача информации об альбомах (Java)
- 429 Пример: сериализация с использованием XML (Java)
- 419 Принцип действия
- 405 Интерфейс удаленного доступа (Remote Facade)
- 433 Глава 16. Типовые решения для обработки задач автономного параллелизма
- 434 Оптимистическая автономная блокировка (Optimistic Offline Lock)
- 435 Принцип действия
- 439 Назначение
- 439 Пример: слой домена с преобразователями данных (Java)
- 445 Пессимистическая автономная блокировка (Pessimistic Offline Lock)
- 446 Принцип действия
- 450 Назначение
- 450 Пример: простой диспетчер блокировки (Java)
- 457 Блокировка с низкой степенью детализации (Coarse-Grained Lock)
- 457 Принцип действия
- 460 Назначение
- 460 Пример: общая оптимистическая автономная блокировка (Java)
- 466 Пример: общая пессимистическая автономная блокировка (Java)
- 467 Пример: оптимистическая автономная блокировка корневого элемента (Java)
- 468 Неявная блокировка (Implicit Lock)
- 469 Принцип действия
- 470 Назначение
- 470 Пример: неявная пессимистическая автономная блокировка (Java)
- 434 Оптимистическая автономная блокировка (Optimistic Offline Lock)
- 473 Глава 17. Типовые решения для хранения состояния сеанса
- 473 Сохранение состояния сеанса на стороне клиента (Client Session State)
- 473 Принцип действия
- 474 Назначение
- 475 Сохранение состояния сеанса на стороне сервера (Server Session State)
- 475 Принцип действия
- 478 Назначение
- 479 Сохранение состояния сеанса в базе данных (Database Session State)
- 479 Принцип действия
- 481 Назначение
- 473 Сохранение состояния сеанса на стороне клиента (Client Session State)
- 483 Глава 18. Базовые типовые решения
- 483 Шлюз (Gateway)
- 484 Принцип действия
- 484 Назначение
- 485 Пример: создание шлюза к службе отправки сообщений (Java)
- 489 Преобразователь (Mapper)
- 490 Принцип действия
- 490 Назначение
- 491 Супертип слоя (Layer Supertype)
- 491 Принцип действия
- 491 Назначение
- 491 Пример: объект домена (Java)
- 492 Отделенный интерфейс (Separated Interface)
- 493 Принцип действия
- 494 Назначение
- 495 Реестр (Registry)
- 495 Принцип действия
- 497 Назначение
- 498 Пример: реестр с единственным экземпляром (Java)
- 499 Пример: реестр, уникальный в пределах потока (Java)
- 500 Объект-значение (Value Object)
- 501 Принцип действия
- 502 Назначение
- 502 Совпадение названий
- 502 Деньги (Money)
- 503 Принцип действия
- 506 Назначение
- 506 Пример: класс Money (Java)
- 511 Частный случай (Special Case)
- 512 Принцип действия
- 512 Назначение
- 512 Дополнительные источники информации
- 513 Пример: объект NullEmployee (C#)
- 514 Дополнительный модуль (Plugin)
- 514 Принцип действия
- 515 Назначение
- 516 Пример: генератор идентификаторов (Java)
- 519 Фиктивная служба (Service Stub)
- 519 Принцип действия
- 520 Назначение
- 521 Пример: служба определения величины налога (Java)
- 523 Множество записей (Record Set)
- 524 Принцип действия
- 524 Явный интерфейс
- 526 Назначение
- 524 Принцип действия
- 483 Шлюз (Gateway)
- 527 Список основных источников информации
- 532 Предметный указатель
Инструкция как скачать книгу Мартин Фаулер, Дейвид Райс, Мэттью Фоммел, Эдвард Хайет, Роберт Ми, Рэнди Стаффорд: Шаблоны корпоративных приложений в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.