В. Таблица паттернов
РАЗДЕЛ ТЕКСТА | НАЗВАНИЕ | ПРОБЛЕМА | РЕШЕНИЕ |
---|---|---|---|
Группа (Участник) | Люди и организационные единицы имеют схожие обязанности. | Создайте тип "Сторона" как суперкласс для человека и организации. | |
2.2 | Иерархии организации | Представление иерархической структуры организации. | Создайте рекурсивную ассоциацию для организации. |
2.3 | Структура организации | Структура организации имеет иерархии или более сложные связи. | Создайте структуру организации как направленное отношение между двумя сторонами. Присвойте ей тип структуры организации, чтобы представить тип связи. |
Появление новых видов связей. | см. выше | ||
Сохранение истории изменений структуры. | см. выше | ||
2.4 | Ответственность | Представление структур организации, занятости, управления, профессиональной регистрации и контрактов со схожей структурой. | Создайте ответственность как направленное отношение между двумя сторонами. Присвойте ей тип ответственности, чтобы представить тип связи. |
2.5 | Уровень знаний по ответственности | Запись правил, описывающих, как могут быть сформированы обязанности так, чтобы их легко было изменить. | Создайте уровень знаний для ответственности, ассоциируя между типом ответственности и типом стороны. Этот уровень знаний ограничивает операционный уровень ответственности и стороны. |
2.6 | Обобщения типов сторон | Из множества типов сторон в модели большинство схожи с каким-либо другим типом сторон. | Разрешите подтипы сторон, чтобы они наследовали типы ответственности. |
2.7 | Иерархическая ответственность | Ограничение некоторых типов ответственности в иерархию. | Определите подтип типа ответственности, включающий иерархическое ограничение. Список уровней позволяет называть каждый уровень в иерархии. |
2.8 | Область деятельности | Описание обязанностей, подразумеваемых ответственностью. | Добавьте количество областей деятельности к ответственности. Тип области деятельности зависит от типа ответственности. |
2.9 | Должность | Ответственность относится к работе, а не к человеку, выполняющему ее. | Создайте должность как другой подтип стороны. Назначьте человека на должность с ответственностью. Обладатель должности получает обязанности этой должности на время ее выполнения. |
Количество | Представление значения, такого как 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.2 | Протокол измерений | Указание на то, что измерения рассчитываются или извлекаются из базы данных. | Определите протокол измерений, описывающий, как создать измерение для типа явления. Протоколы измерений могут быть получены из источника или рассчитаны, а расчеты могут быть причинными, сравнительными или основанными на комбинации измерений. |
Запись формул для расчетов. | см. выше | ||
Один и тот же тип явления можно определить разными способами в зависимости от контекста. | см. выше | ||
4.3 | Диапазон | Описание диапазона между двумя значениями. | Определите тип диапазона с верхней и нижней границами и подходящими операциями. |
4.4 | Явление с диапазоном | Описание явления, определенного как диапазон для типа явления. | Присвойте явлению атрибут диапазона. Создайте функцию диапазона, связывающую диапазон с явлением при условиях, описанных другими явлениями. |
Имя | Ссылка на объект. | Дайте объекту строку в качестве его имени. | |
5.2 | Схема идентификации | Обеспечение того, чтобы идентификатор ссылался только на один объект, но разные стороны могли бы по-разному ссылаться на объект. | Создайте схемы идентификации, содержащие идентификаторы, где каждый идентификатор относится только к одной единице. Сторона может использовать любую схему идентификации. |
5.3 | Объединение объектов | Два объекта на самом деле являются одним и тем же. | Скопируйте атрибуты одного объекта на другой, переключите все ссылки с первого на второй и удалите первый. |
Отметьте один как устаревший и добавьте ссылку на другой. | |||
Свяжите две визуальные репрезентации объекта с сущностью, указывающей, что они одинаковы. | |||
5.4 | Эквивалентность объектов | Некоторые люди считают, что два объекта одинаковы, но другие считают, что они разные. | Создайте эквивалентность для объектов. |
Счет | Запись истории изменений для некоторого количества. | Создайте счет. Каждое изменение записывается как запись в счете. Баланс счета отображает его текущую стоимость. | |
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.2 | Завершенные и прекращенные действия | Указание, как завершилось действие. | Действие считается завершенным, если оно выполнено, как было задумано, или прекращенным, если не выполнено. |
8.3 | Приостановка | Временное прекращение действия. | Приостановьте действие. Используйте диапазон времени, чтобы показать, как долго оно длится. |
8.4 | План | Запись группы предложенных действий, которые вы намерены выполнить вместе. | План — это набор предложенных действий, связанных зависимостями. Несколько сторон могут иметь разные планы, ссылающиеся на одно и то же предложенное действие. |
Представление зависимостей между действиями. | см. выше | ||
Возможность координации планов разных людей. | см. выше | ||
8.5 | Протокол | Выполнение стандартных процедур многократно одинаковым образом. | Действие можно выполнять по протоколу. Протокол можно разделить на подпротоколы, связанные зависимостями. |
8.6 | Распределение ресурсов | Распределение ресурсов между планами, протоколами и действиями. | Общее распределение ресурсов выделяет количество ресурса определенного типа. Специфическое распределение ресурсов назначает конкретные ресурсы. |
8.7 | Функции результата и начала | Определение, когда выполнять протокол и каков будет результат протокола и любых действий. | Функции начала и результата связывают протокол с концепциями наблюдения, которые запускают его и могут быть его результатом. |
Контракт | Запись сделок с точки зрения как покупателя, так и продавца. | Используйте подрядчика, работающего с обеими сторонами — покупателем и продавцом. | |
9.2 | Портфель | Динамический выбор контрактов для различных целей. | Определите портфель как коллекцию контрактов. Контракты выбираются по фильтру — логическому выражению, определяющему, какие контракты входят в портфель. |
Динамический выбор объектов. | см. выше | ||
9.3 | Коммерческое предложение | Отдельные цены указаны для покупки и продажи. | Объедините обе цены в одно коммерческое предложение. |
9.4 | Сценарий | Цены на инструменты меняются со временем. | Создайте сценарий, чтобы зафиксировать реальное или гипотетическое состояние рынка. Сценарий дает цену любого инструмента в этом состоянии и включает правила для вычисления цен для гипотетических состояний рынка. |
Рассмотрение гипотетических комбинаций цен. | см. выше | ||
Цены одного инструмента могут влиять на цены другого. | см. выше | ||
Форвардные контракты | Контракт может быть исполнен в будущем по сегодняшним ценам. | Используйте контракт с отдельными датами торговли и поставки. | |
10.2 | Опционы | Сторона может выбрать покупку или продажу чего-то по фиксированной цене в определенный момент в будущем. | Опцион является подтипом контракта с дополнительным поведением. Либо опцион — это отдельный объект с контрактом в качестве атрибута. |
10.3 | Продукт | Комбинированный опцион воспринимается продавцом как один элемент, но дилеры рассматривают его как набор более простых контрактов. | Рассматривайте то, что продает продавец, как продукт, а то, что имеет внутреннюю ценность, — как контракт. |
Продавец видит один пакет, но внутренне видны только элементы в пакете. | см. выше | ||
10.4 | Машины состояний подтипов | Барьерный опцион ведет себя иначе, чем обычный опцион, но выглядит как подтип. Работа с подтипами и машинами состояний. | Убедитесь, что как подтип, так и супертип объектов реагируют на одни и те же события. |
10.5 | Параллельные иерархии приложения и домена | Вы отображаете список объектов в пользовательском интерфейсе. Эти объекты имеют различные подтипы, и некоторые свойства подтипов необходимо отобразить. Объекты интерфейса не должны давать сбой, отправляя сообщение неподходящему объекту. | Объект приложения проверяет тип доменного объекта, чтобы убедиться, что он поймет сообщение. Дайте супертипу интерфейс, охватывающий все поведения подтипов. Относитесь к свойствам как к атрибуту времени выполнения. Используйте промежуточный объект, загружаемый доменным объектом. Используйте пакет обработки исключений. |
Множественные уровни доступа к пакету | Различным клиентам пакета требуется разный объем поведения. | Разделите пакет на отдельные пакеты для каждого уровня доступа. Позвольте пакетам иметь более одного интерфейса. | |
11.2 | Взаимная видимость | Типы в двух пакетах должны видеть друг друга. | Объедините два пакета. Либо создайте два пакета с взаимной видимостью. Либо решите, что один тип не может видеть другой. |
11.3 | Пакеты подтипов | Использование подтипов с пакетами. | Подтип можно разместить в отдельном пакете. Видимость для пакета — с супертипом, но не наоборот. |
Двухзвенная архитектура | Разделение программного обеспечения в системе клиент/сервер. | Разместите пользовательский интерфейс на клиенте и базу данных на сервере. Классы пользовательского интерфейса обращаются к базе данных напрямую. | |
12.2 | Трехзвенная архитектура | Двухзвенная архитектура слишком тесно связывает пользовательский интерфейс с дизайном базы данных. | Используйте три логических уровня: приложение, домен и база данных. |
Интерфейс базы данных не может поддерживать богатую модель домена. | см. выше | ||
12.3 | Представление и логика приложения | Программное обеспечение обрабатывает как интерпретацию доменной модели, так и управление пользовательским интерфейсом. | Разделите уровень приложения на представление (пользовательский интерфейс) и логику приложения (работа с доменной моделью). Организуйте логику приложения как набор фасадов для представления. |
12.4 | Взаимодействие с базой данных | Работа с базой данных. | Позвольте доменным классам нести ответственность за сохранение себя в базе данных. Либо создайте отдельный слой для управления взаимодействием между базой данных и доменными объектами. |
Реализация ассоциаций | Реализация концептуальной ассоциации. | Выберите одно направление для реализации и используйте операцию и указатель. Либо добавьте операции и указатели в обоих направлениях. Используйте поиск в одном направлении, если указатель присутствует только в одном направлении. Либо используйте таблицу и поиск для указателей. | |
14.2 | Реализация обобщений | Реализация обобщения, особенно если задействованы несколько и динамические классификации. | Используйте наследование. Либо используйте классы для каждой комбинации подтипов с множественным наследованием. Либо используйте внутренний флаг. Делегируйте скрытому классу (шаблон состояния). Либо скопируйте и замените. |
14.3 | Создание объекта | Создание объекта. | Используйте метод создания с аргументами для всех обязательных и неизменяемых отображений. |
14.4 | Уничтожение объекта | Уничтожение объекта. | Определите специальный метод уничтожения. Определите, насколько должно каскадировать удаление. |
14.5 | Точка входа | Начало поиска объектов. | Позвольте классу быть ответственным за хранение и поиск своих экземпляров. Либо используйте регистратор для поиска и хранения объектов. |
14.6 | Реализация ограничений | Реализация ограничений. | Дайте каждому объекту операцию для проверки его ограничения. Вызывайте её в конце модификаторов при отладке. |
Ассоциативный тип | Добавление функций к ассоциации. | Создайте тип для ассоциации. Используйте специальную нотацию. | |
15.2 | Отображение с ключами | Представление значений в отображении, которые привязаны к другому типу. | Используйте отображение с ключами. |
15.3 | Историческое отображение | Запись предыдущих значений отображения. | Используйте историческое отображение. |