[ 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)