remove duplication from Business Logic by using sort of declarative
transactions (using inner classes and templates)