6. package banking; public class Account { private Double balance; public Double getBalance() { return this.balance; } public void setBalance(Double balance) { assert balance != null; this.balance = balance; } public void deposit(Double amount) { /* FILL ME IN */ } public void withdraw(Double amount) { /* FILL ME IN */ } }
17. Enterprise software is much harder than it should be Problem domains are typically not very complex (information management + business rules) How come? Secondary concerns abound persistence, concurrency, (a)synchronism, distribution, transactions, security, caching, replication, logging, ...
18.
19. Problem hypothesis: lack of separation between technical and domain concerns is the root of all evil
20. Solutions Using ordinary 3GL + reflection/AOP Model-driven development with DSLs Model-driven development with a GPL (like UML)
code generator = a program that produces other programs
Code generation is just a tool Productivity Automate what can be automated What problem does it solve? To extract architectural decisions as reusable artifacts To reduce time to market To ensure consistency (developers like to pretend they are robots)
Code generation is just a tool Productivity Automate what can be automated What problem does it solve? To extract architectural decisions as reusable artifacts To reduce time to market To ensure consistency (developers like to pretend they are robots)