Cesar Lugo created ISIS-1360:
--------------------------------

             Summary: Declarative Invariants
                 Key: ISIS-1360
                 URL: https://issues.apache.org/jira/browse/ISIS-1360
             Project: Isis
          Issue Type: Bug
          Components: Core, Core: Objectstore: JDO
    Affects Versions: 1.12.0
            Reporter: Cesar Lugo
            Assignee: Dan Haywood
            Priority: Minor


I think that one aspect of the amplification concept Apache ISIS provides might 
be to allow some degree of declarative business rules / invariants. There is an 
interesting open source project (1) that allows a Java application to define 
declarative business rules / invariant you might want to fork.
 
The difference between some other business rules engines (say RETE compliant) 
is that most business rules engines focus on conditional business rules or 
decision business rules only, and work outside the application scope, as an 
external API returning results that you must incorporate into your code with 
even more code. This one´s focus (ABL) is transactional business rules, which 
work through the persistence manager (Hybernate´s JPA in this case), so you 
don´t need to call any rules to be triggered, rules are automatically triggered 
when you persist data. Thus, it lets you use the previous values before saving 
and after saving to trigger rules (update inventory with new value of received 
quantity - old value of received quantity + old value of inventory).
 
In summary, it provides:
•        Declarative rules, like: 
o   InvoiceItem.amount = InvoiceItem.quantity * InvoiceItem.unitPrice * (1 + 
VAT / 100)
o   Invoice.amount = sum(InvoiceItem.amount) if InvoiceItem.status != “deleted”
o   account balance = sum(invoice.amount) if status = “due
•        Automatic sequencing of the rules. This is really great, because 
instead of sequenced lines of code, you create independent rules, which you can 
maintain and change completely separate from all other rules. You can even have 
a rules manager and document each rule.
•        Automatic execution of the rules every time you do an insert, update 
or delete to any of those entity objects. Any change executes the rules 
properly. If a new rule implies altering the sequence of the execution of 
rules, this happens automatically and seamlessly. 
•        Extensibility (create your own rules). Create a new weightedAverage () 
rule. 
•        Documentation. You can document your rules, associate rules to topic 
or groups, like use cases where they come from.
 
 
(1)    http://www.automatedbusinesslogic.com/




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to