[ 
https://issues.apache.org/jira/browse/ISIS-1360?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Daniel Keir Haywood updated ISIS-1360:
--------------------------------------
      Component/s:     (was: Isis Persistence JDO)
                       (was: Isis Core)
                   Isis Incubator
    Fix Version/s:     (was: 3.0.0)

> Declarative Invariants
> ----------------------
>
>                 Key: ISIS-1360
>                 URL: https://issues.apache.org/jira/browse/ISIS-1360
>             Project: Isis
>          Issue Type: Proposal
>          Components: Isis Incubator
>    Affects Versions: 1.12.0
>            Reporter: Cesar Lugo
>            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 (Hibernate´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
(v8.3.4#803005)

Reply via email to