среда, 16 января 2008 г.

Краткий справочник по книге "Business Rules in ADF BC" An Oracle White Paper August 2007

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


Бизнес Правила(БП) можно разделить:
  1. Правила отвечающие состояниям системы
  2. Правила отвечающие за изменение сотояний системы
  3. Правила Авторизации
  4. автоматические тригеры, запускающие определенные действия при изменении состояния системы.

UML концепции БП:

  1. Инварианты - ограничения определяющие систему в стабильных состояниях. Обычно включаются в UML модель классов
  2. Предусловия - условия которые должны быть выполнены, для возможности перехода из одного состояния системы в другое. Обычно описываются в use-case диаграммах
  3. Постусловия - условия которые должны быть выполнены после перехода системы в новое состояние. Обычно описываются в use-case диаграммах

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

В книге рассмотрены такие БП:

  1. Constraint - ограничения на состояние системы и на переход из одного состояния в другое
  2. Change Event - определяют действия запускаемые при определенных условиях. (Пример: при определенном условии напечатать отчет или послать имеил)
  3. Authorization - ограничения связанные с авторизацией

Constraint rules:

Описывают ограничения на состояние системы и на переход из одного состояния в другое. Соответствуют UML инвариантам и UML пред условиям.

Constraint rules делят по обьектам к которым они относятся:

  1. Attribute - правило для конкретного атрибута одного обьекта
  2. Instance - правило для нескольких атрибутов одного обьекта
  3. Entity - правило для нескольких обьектов одного типа ентити
  4. MultyEntity - правило для более одного обьекта разных типов сущностей
Attribute:
  1. Attribute properties - ограничивает состояние атрибута:
    • Type - ограничение по типу атрибута (Пример: Departament должен быть Numeric)
    • Mandatory - определяет является ли атрибут обязательным
    • Updateble - определяет можно ли атрибут менять (Пример: OrderLine нельзя назначить другому Order (OrderLine.OrderId not Updateble)
  2. Domain - позволяет задать свой тип даных для атрибута (Пример: Поле YesNo может принимать значения либо "Y", либо "N")
  3. Validation:
    • Compare (Пример: Зарплата сотрудника должна быть больше 0)
    • List (Пример: состояние сотрудника должно быть одним из списка "S" (Single), "M" (Married), "D" (Divorced), "W" (Widowed) или null)
    • Renge (Пример: бюджет должен находится в пределах от 10 000 до 100 000)
    • Length (Пример: Код страны должен состоять из 2-х символов)
    • Regular (Пример: Почтовый код должен иметь формат **-**)
    • Method (Пример: состояние сотрудника может меняться только по правилам: divorced, widowed -> married; married -> divorced, widowed; null -> any value; any value -> null)
Instance:
  1. Instance Validator - реализуется с помощью метода в классе ентити или с помощью отдельного класа. (Пример1 : Рабочий который числится как "SALESMAN" обязательно должен иметь заполненное поле с комиссией) (Пример2: Нельзя изменять Rate, Role или PercentageAllocated для ProjectAssignment если он активен. (Закройте активный ProjectAssignment и создайте новый) (Пример3: Дата начала должна быть меньше даты конца)
  2. Delete Rules - запрещает удалять запись при определенных условиях (пример: Вы не можете удалять Заказ после доставки)
Entity:
  1. Unique Identifier - параметр среди всех обьектов данного типа ентити должен быть уникальным (Пример: название департамента должно быть уникально)
  2. Collection, no parent - ограничение относится к коллекции обьектов но не к родителю этой коллекции (Пример: В системе не может быть больше 20 департаментов)
  3. Other Entity - все остальные ограничения относящиеся к набору обьектов одного типа ентити
Multi Entity
  1. Association - описывает как классы ентити зависят друг от друга (Пример: каждый OrderLine должен иметь один и только один order) (Пример2: каждый сотрудник работает только в одном департаменте)
  2. Collection within Master(Parent) - ограничение касается коллекции и ее родителя (Пример: в департаменте должно быть не более одного работника-клерка)
  3. Simple Multi Entity - включают правила которые связаны с различными типами ентити, но которые применяются только к одному енити. (пример: вы не можете создать проектное задание потому что проект закрыт (дата проекта в прошлом))
  4. Complex Multi Entity - правила которые затрагивают много ентити и относятся также ко многим ентити.(пример: начальная дата проектного задания, должна попадать в диапазон даты начала и конца проекта)
Change Event rules:

Автоматические действия срабатываемые при изменении состояния системы

DML (Data Manipulation) - означают события связанные с операциями Create, Update, Delete

Change Event rules делят:

  1. Change Event rules with DML - связаные с опреацыями Create, Update, Delete
  2. Change Event rules without DML - не связаные с опреацыями Create, Update, Delete
Change Event rules with DML
  1. Default - Правила описывают какое значение должно принять поле в случае операции Create
    • Literal (Пример: По умолчанию после создания записи поле count должно содержать значение 1)
    • Calculated (Пример: При создании записи генерить Id на основании последовательности из БД)
  2. Change History Rules - запись в обьект информации о том когда и кем он был создан или модифицирован
  3. Other Derivaion Rules - При создании или изменении обьекта пересчитать значение атрибута (Пример: при записи переcчитывать значение totalPrice)
  4. Cascade Delete Rules - Удаление потомков при удалении родителя
  5. Other - все остальные правила не вошедшие в описанные выше случаи. (Пример1: Если изменилась дата начала проекта, то нужно изменить все даты начала проектных задач, которые получаются раньше новой даты начала проекта) (Пример2: если изменилось значение зарплаты или комиссии сотрудника, записать соответствующее сообщение в журнал)
Change Event rules without DML

Автоматический триггер отслеживающий изменение системы не связанное с опреациями Create, Update, Delete (Пример: послать email сообщение менеджеру когда изменится дата окончания проектной задачи