Analysis Patterns 1.0 Help

В. Таблица паттернов

РАЗДЕЛ ТЕКСТА

НАЗВАНИЕ

ПРОБЛЕМА

РЕШЕНИЕ

2.1

Группа (Участник)

Люди и организационные единицы имеют схожие обязанности.

Создайте тип "Сторона" как суперкласс для человека и организации.

2.2

Иерархии организации

Представление иерархической структуры организации.

Создайте рекурсивную ассоциацию для организации.

2.3

Структура организации

Структура организации имеет иерархии или более сложные связи.

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

Появление новых видов связей.

см. выше

Сохранение истории изменений структуры.

см. выше

2.4

Ответственность

Представление структур организации, занятости, управления, профессиональной регистрации и контрактов со схожей структурой.

Создайте ответственность как направленное отношение между двумя сторонами. Присвойте ей тип ответственности, чтобы представить тип связи.

2.5

Уровень знаний по ответственности

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

Создайте уровень знаний для ответственности, ассоциируя между типом ответственности и типом стороны. Этот уровень знаний ограничивает операционный уровень ответственности и стороны.

2.6

Обобщения типов сторон

Из множества типов сторон в модели большинство схожи с каким-либо другим типом сторон.

Разрешите подтипы сторон, чтобы они наследовали типы ответственности.

2.7

Иерархическая ответственность

Ограничение некоторых типов ответственности в иерархию.

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

2.8

Область деятельности

Описание обязанностей, подразумеваемых ответственностью.

Добавьте количество областей деятельности к ответственности. Тип области деятельности зависит от типа ответственности.

2.9

Должность

Ответственность относится к работе, а не к человеку, выполняющему ее.

Создайте должность как другой подтип стороны. Назначьте человека на должность с ответственностью. Обладатель должности получает обязанности этой должности на время ее выполнения.

3.1

Количество

Представление значения, такого как 6 футов или 5 долларов.

Используйте тип количества, который включает и значение, и единицу измерения. Валюты являются видом единицы.

3.2

Коэффициент преобразования

Преобразование между количествами в разных единицах.

Запишите коэффициенты преобразования между единицами.

3.3

Составные единицы

Представление единиц, таких как кг/м².

Используйте единицу, являющуюся комбинацией других единиц.

3.4

Измерение

Объект имеет большое количество количественных атрибутов.

Создайте объект для представления отдельного измерения. Это связано с измеряемым объектом и типом явления, который описывает вид выполняемого измерения.

Запись информации о каждом отдельном измерении атрибута.

см. выше

Отслеживание изменений значения атрибута с течением времени.

см. выше

3.5

Наблюдение

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

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

3.6

Подтипы концепций наблюдения

Явления являются частными случаями другого явления.

Разрешите явлениям быть подтипами с ассоциацией на уровне знаний.

3.7

Протокол

Работа с похожими явлениями, когда метод наблюдения может иногда приводить к разной интерпретации.

Запишите протокол, используемый для определения наблюдения.

Запись точности и чувствительности измерения.

см. выше

3.8

Двойная запись времени

Возникают различия между тем, когда наблюдение истинно и когда вы его заметили, и между событием и его фиксацией.

Запишите оба времени отдельно для всех таких объектов.

3.9

Отклоненное наблюдение

Наблюдения были сделаны по ошибке, но не могут быть удалены.

Сохраните их, отметьте как отклоненные и зафиксируйте, какое наблюдение их отклонило.

3.10

Активное наблюдение, гипотеза и проекция

Определенность в наблюдениях.

Разделите наблюдения на активные (я собираюсь лечить это), гипотезу (я собираюсь дальше исследовать) и проекцию (я думаю, это может произойти).

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

см. выше

3.11

Связанное наблюдение

Запись доказательств для диагноза.

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

3.12

Процесс наблюдения

Определение процесса наблюдения и диагностики.

Каждое наблюдение может привести к предложениям для дальнейших наблюдений и вмешательств, а также к переоценке противоречивых наблюдений. Этот процесс приводит к постоянному циклу наблюдения.

4.1

Сегмент предприятия

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

Определите каждый критерий разбиения как измерение и представьте его как иерархию элементов. Определите сегмент предприятия как комбинацию одного элемента из каждого измерения.

4.2

Протокол измерений

Указание на то, что измерения рассчитываются или извлекаются из базы данных.

Определите протокол измерений, описывающий, как создать измерение для типа явления. Протоколы измерений могут быть получены из источника или рассчитаны, а расчеты могут быть причинными, сравнительными или основанными на комбинации измерений.

Запись формул для расчетов.

см. выше

Один и тот же тип явления можно определить разными способами в зависимости от контекста.

см. выше

4.3

Диапазон

Описание диапазона между двумя значениями.

Определите тип диапазона с верхней и нижней границами и подходящими операциями.

4.4

Явление с диапазоном

Описание явления, определенного как диапазон для типа явления.

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

5.1

Имя

Ссылка на объект.

Дайте объекту строку в качестве его имени.

5.2

Схема идентификации

Обеспечение того, чтобы идентификатор ссылался только на один объект, но разные стороны могли бы по-разному ссылаться на объект.

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

5.3

Объединение объектов

Два объекта на самом деле являются одним и тем же.

Скопируйте атрибуты одного объекта на другой, переключите все ссылки с первого на второй и удалите первый.

Отметьте один как устаревший и добавьте ссылку на другой.

Свяжите две визуальные репрезентации объекта с сущностью, указывающей, что они одинаковы.

5.4

Эквивалентность объектов

Некоторые люди считают, что два объекта одинаковы, но другие считают, что они разные.

Создайте эквивалентность для объектов.

6.1

Счет

Запись истории изменений для некоторого количества.

Создайте счет. Каждое изменение записывается как запись в счете. Баланс счета отображает его текущую стоимость.

6.2

Транзакция

Обеспечение того, чтобы ничего не терялось из счета.

Используйте транзакции для перевода элементов между счетами.

6.3

Сводный счет

Просмотр группы счетов, как если бы это был один счет.

Создайте сводный счет, где другие счета будут его дочерними элементами.

6.4

Вспомогательный счет

Запись количества в дополнительном счете без использования транзакции.

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

6.5

Правила проводок

Автоматизация переводов между счетами.

Определите правило проведения между счетами.

6.6

Метод для отдельных экземпляров

Предоставление каждому экземпляру типа собственного метода для некоторой операции.

Определите отдельный подкласс для каждого метода. Используйте шаблон стратегии. Создайте инструкцию выбора, скрытую внутри объекта. Разделите разные поведения на параметры. Постройте простой интерпретатор.

6.7

Выполнение правила проводок

Обеспечение выполнения всех правил проводок в нужное время.

Запускайте все исходящие правила, когда в счет добавляется запись. Явно запросите выполнение правила проведения. Запросите у счета выполнение его исходящих правил проведения. Свяжите правила проведения в обратном порядке, когда счет запрашивается.

6.8

Правила проводок для многих счетов

Определение одинаковых правил проводок для множества счетов.

Определите правила для типа счета. Определите правила для сводного счета.

6.9

Выбор записей

Запрос у счета на получение подмножества его записей.

Счет возвращает все записи, и вызывающая сторона выбирает нужные. Счет предоставляет операцию для каждого возможного подмножества. Вызывающая сторона передает фильтр объекту счета.

6.10

Бухгалтерская практика

Назначение нескольких правил проводок как одной группы.

Создайте бухгалтерскую практику, чтобы сгруппировать их вместе.

6.11

Источники записи

Просмотр того, как была рассчитана транзакция.

Запишите правило проведения, создавшее запись, и записи, использованные в расчете, с новой транзакцией.

6.12

Баланс и отчет о доходах

Представление баланса и отчетов о доходах.

Создайте подтипы счета.

6.13

Корреспондентский счет

Сверка представлений счета двумя сторонами.

Рассмотрите каждое представление как отдельные счета, которые соответствуют друг другу.

6.14

Специализированная модель счета

Использование общих бухгалтерских шаблонов в конкретном случае.

Создайте подтипы типов шаблонов для поддержки специализированных потребностей.

6.15

Бронирование записей на нескольких счетах

Внесение записи в более чем один счет.

Рассмотрите один счет как реальный и используйте вспомогательный счет для другого. Либо используйте производный счет для второго.

8.1

Предложенное и выполненное действие

Представление того, что вы намеревались сделать, и того, что вы сделали.

Используйте отдельные объекты для предложенных и выполненных действий.

8.2

Завершенные и прекращенные действия

Указание, как завершилось действие.

Действие считается завершенным, если оно выполнено, как было задумано, или прекращенным, если не выполнено.

8.3

Приостановка

Временное прекращение действия.

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

8.4

План

Запись группы предложенных действий, которые вы намерены выполнить вместе.

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

Представление зависимостей между действиями.

см. выше

Возможность координации планов разных людей.

см. выше

8.5

Протокол

Выполнение стандартных процедур многократно одинаковым образом.

Действие можно выполнять по протоколу. Протокол можно разделить на подпротоколы, связанные зависимостями.

8.6

Распределение ресурсов

Распределение ресурсов между планами, протоколами и действиями.

Общее распределение ресурсов выделяет количество ресурса определенного типа. Специфическое распределение ресурсов назначает конкретные ресурсы.

8.7

Функции результата и начала

Определение, когда выполнять протокол и каков будет результат протокола и любых действий.

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

9.1

Контракт

Запись сделок с точки зрения как покупателя, так и продавца.

Используйте подрядчика, работающего с обеими сторонами — покупателем и продавцом.

9.2

Портфель

Динамический выбор контрактов для различных целей.

Определите портфель как коллекцию контрактов. Контракты выбираются по фильтру — логическому выражению, определяющему, какие контракты входят в портфель.

Динамический выбор объектов.

см. выше

9.3

Коммерческое предложение

Отдельные цены указаны для покупки и продажи.

Объедините обе цены в одно коммерческое предложение.

9.4

Сценарий

Цены на инструменты меняются со временем.

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

Рассмотрение гипотетических комбинаций цен.

см. выше

Цены одного инструмента могут влиять на цены другого.

см. выше

10.1

Форвардные контракты

Контракт может быть исполнен в будущем по сегодняшним ценам.

Используйте контракт с отдельными датами торговли и поставки.

10.2

Опционы

Сторона может выбрать покупку или продажу чего-то по фиксированной цене в определенный момент в будущем.

Опцион является подтипом контракта с дополнительным поведением. Либо опцион — это отдельный объект с контрактом в качестве атрибута.

10.3

Продукт

Комбинированный опцион воспринимается продавцом как один элемент, но дилеры рассматривают его как набор более простых контрактов.

Рассматривайте то, что продает продавец, как продукт, а то, что имеет внутреннюю ценность, — как контракт.

Продавец видит один пакет, но внутренне видны только элементы в пакете.

см. выше

10.4

Машины состояний подтипов

Барьерный опцион ведет себя иначе, чем обычный опцион, но выглядит как подтип. Работа с подтипами и машинами состояний.

Убедитесь, что как подтип, так и супертип объектов реагируют на одни и те же события.

10.5

Параллельные иерархии приложения и домена

Вы отображаете список объектов в пользовательском интерфейсе. Эти объекты имеют различные подтипы, и некоторые свойства подтипов необходимо отобразить. Объекты интерфейса не должны давать сбой, отправляя сообщение неподходящему объекту.

Объект приложения проверяет тип доменного объекта, чтобы убедиться, что он поймет сообщение. Дайте супертипу интерфейс, охватывающий все поведения подтипов. Относитесь к свойствам как к атрибуту времени выполнения. Используйте промежуточный объект, загружаемый доменным объектом. Используйте пакет обработки исключений.

11.1

Множественные уровни доступа к пакету

Различным клиентам пакета требуется разный объем поведения.

Разделите пакет на отдельные пакеты для каждого уровня доступа. Позвольте пакетам иметь более одного интерфейса.

11.2

Взаимная видимость

Типы в двух пакетах должны видеть друг друга.

Объедините два пакета. Либо создайте два пакета с взаимной видимостью. Либо решите, что один тип не может видеть другой.

11.3

Пакеты подтипов

Использование подтипов с пакетами.

Подтип можно разместить в отдельном пакете. Видимость для пакета — с супертипом, но не наоборот.

12.1

Двухзвенная архитектура

Разделение программного обеспечения в системе клиент/сервер.

Разместите пользовательский интерфейс на клиенте и базу данных на сервере. Классы пользовательского интерфейса обращаются к базе данных напрямую.

12.2

Трехзвенная архитектура

Двухзвенная архитектура слишком тесно связывает пользовательский интерфейс с дизайном базы данных.

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

Интерфейс базы данных не может поддерживать богатую модель домена.

см. выше

12.3

Представление и логика приложения

Программное обеспечение обрабатывает как интерпретацию доменной модели, так и управление пользовательским интерфейсом.

Разделите уровень приложения на представление (пользовательский интерфейс) и логику приложения (работа с доменной моделью). Организуйте логику приложения как набор фасадов для представления.

12.4

Взаимодействие с базой данных

Работа с базой данных.

Позвольте доменным классам нести ответственность за сохранение себя в базе данных. Либо создайте отдельный слой для управления взаимодействием между базой данных и доменными объектами.

14.1

Реализация ассоциаций

Реализация концептуальной ассоциации.

Выберите одно направление для реализации и используйте операцию и указатель. Либо добавьте операции и указатели в обоих направлениях. Используйте поиск в одном направлении, если указатель присутствует только в одном направлении. Либо используйте таблицу и поиск для указателей.

14.2

Реализация обобщений

Реализация обобщения, особенно если задействованы несколько и динамические классификации.

Используйте наследование. Либо используйте классы для каждой комбинации подтипов с множественным наследованием. Либо используйте внутренний флаг. Делегируйте скрытому классу (шаблон состояния). Либо скопируйте и замените.

14.3

Создание объекта

Создание объекта.

Используйте метод создания с аргументами для всех обязательных и неизменяемых отображений.

14.4

Уничтожение объекта

Уничтожение объекта.

Определите специальный метод уничтожения. Определите, насколько должно каскадировать удаление.

14.5

Точка входа

Начало поиска объектов.

Позвольте классу быть ответственным за хранение и поиск своих экземпляров. Либо используйте регистратор для поиска и хранения объектов.

14.6

Реализация ограничений

Реализация ограничений.

Дайте каждому объекту операцию для проверки его ограничения. Вызывайте её в конце модификаторов при отладке.

15.1

Ассоциативный тип

Добавление функций к ассоциации.

Создайте тип для ассоциации. Используйте специальную нотацию.

15.2

Отображение с ключами

Представление значений в отображении, которые привязаны к другому типу.

Используйте отображение с ключами.

15.3

Историческое отображение

Запись предыдущих значений отображения.

Используйте историческое отображение.

Last modified: 16 January 2025