370 likes | 523 Views
Enterprise Application Design Patterns: Improved and Applied. Stuart Thiel sthiel@cs.concordia.ca. February 11, 2010. Outline. Outline A Brief Overview of Development Problems for Software Engineers A Progression Through Fowler’s Patterns Domain Objects and Improved Patterns
E N D
Enterprise Application Design Patterns:Improved and Applied Stuart Thiel sthiel@cs.concordia.ca February 11, 2010
Outline Outline • A Brief Overview of Development • Problems for Software Engineers • A Progression Through Fowler’s Patterns • Domain Objects and Improved Patterns • Applying Patterns with the SoenEA Framework Stuart Thiel
Developers Work With Software Developers Work With Software Design Implement Test Maintain February 2010 Stuart Thiel
Developer Tools Developer Aids/Tools Programming Languages Integrated Development Environments Processes / Artifacts Patterns / Styles Stuart Thiel
Problems Problems Fowler describes architectural patterns, but no overall usage guidelines • High level patterns lack broad examples • Guidance on interrelation of patterns is sparse • Pattern theory / implementation separation ambiguous Cooking Analogy February 2010 Stuart Thiel
P. Few Simple Examples Problems:: Few Simple Examples Trivial examples for Fowler’s patterns, usually covering only a piece of functionality February 2010 Stuart Thiel
P. Interrelation Not Described Problems:: Interrelation Not Described Not usually covering more than one or two patterns at a time Discussion of interrelation limited February 2010 Stuart Thiel
P. Theory Implementation Problems:: Theory Mixes with Implementation, or is Kept Apart Lazy Load Unit of Work February 2010 Stuart Thiel
Problem Summary Problems Summary The components of a solution are available We can readily identify patterns in existing software There is no description of what to do February 2010 Stuart Thiel
Solutions Solutions Review of Existing Patterns An Additional Patterns Refined Patterns SoenEA February 2010 Stuart Thiel
Existing Patterns Review of Existing Patterns Fowler identifies important patterns They need context wrt each other Transaction Script to complex Domain Model February 2010 Stuart Thiel
Additional Patterns Additional Pattern Domain Object Front Command Dispatcher List Proxy February 2010 Stuart Thiel
Refined Patterns:: Mappers Refined Patterns Data Mapper / Table Data Gateway • Input Mapper • Output Mapper • Table Data Gateway • Finder February 2010 Stuart Thiel
Refined Patterns:: Others Refined Patterns Front Controller Lazy Load Identity Map Unit of Work February 2010 Stuart Thiel
SoenEA:: advantages SoenEA help eliminate tedious tasks, help programmers to make fewer mistakes, and give guidance on proper practices. February 2010 Stuart Thiel
SoenEA:: provides SoenEA Patterns Utility components Default Implementations of Typical Components (DITCs) Test components February 2010 Stuart Thiel
Summary SoenEA Summary Developers can use our contribution to build on their understanding of existing patterns They can use SoenEA to quickly develop software SoenEA is like a jigsaw puzzle February 2010 Stuart Thiel Stuart Thiel
Conclusion Conclusion We have brought together a lot of other people’s good ideas Our approach has been used in commercial applications Our approach has allowed consistent and reliable development Our approach is readily communicable February 2010 Stuart Thiel
Future Work Future Work Code Generation Testing Application Level Patterns Validator Pattern Refining Data Gateway Implementations Integration with other artefacts0 February 2010 Stuart Thiel
Thank You Thank You!
An Analogy An Analogy Software Development -> Cooking WEA Development -> Baking February 2010 Stuart Thiel
An Analogy:: Styles An Analogy:: Styles Layered Style, Event-based Style, Process Control, Blackboard Cakes/Pizza, Cookies/Muffins, Souflé, Omlette/Pancake February 2010 Stuart Thiel
An Analogy:: Design Patterns An Analogy:: Design Patterns Command, Factory, Adapter, Proxy Mixing, Chopping, Heating, Greasing, Measuring February 2010 Stuart Thiel
An Analogy:: Architectural Patterns An Analogy:: Architectural Patterns Lazy Load, Pessimistic Offline Lock , Unit Of Work Mixing Dry Ingredients vs. Wet, Checking That All Ingredients Are Available Before Starting, Preparing All Ingredients February 2010 Stuart Thiel
Analogy:: Frameworks An Analogy:: Frameworks Struts 1.0 - > Waffle Iron Hibernate -> Bread Maker February 2010 Stuart Thiel
Cyclic Reference Solution Cyclic Reference Where to solve it? • Input Mapper Common Alternatives • Loading other Domain Objects after February 2010 Stuart Thiel
Cyclic Reference alternative Easy: February 2010 Stuart Thiel
public Person find(long id) { //Check Identity Map and return if found if(IdentityMap.has(id,Person.class)) return IdentityMap.get(id,Person.class); //Not in Identity Map ResultSet rs = PersonFinder.find(id); if(!rs.next) ;// Person p = new Person(id); UoW.getCurrent.registerClean(p); Person buddy = find(rs.getLong("buddy")); p.setBuddy(buddy); } February 2010 Stuart Thiel
Cyclic Reference alternative Harder February 2010 Stuart Thiel
public Person find(long id) { //Check Identity Map and return if found if(IdentityMap.has(id,Person.class)) return IdentityMap.get(id,Person.class); //Not in Identity Map ResultSet rs = PersonFinder.find(id); if(!rs.next) ;// Person p = new Person(id); UoW.getCurrent.registerClean(p); Pet pet = find(rs.getLong("pet")); p.setPet(pet); } February 2010 Stuart Thiel
Proxy public Person find(long id) { //Check Identity Map and return if found if(IdentityMap.has(id,Person.class)) return IdentityMap.get(id,Person.class); //Not in Identity Map ResultSet rs = PersonFinder.find(id); if(!rs.next) ;// Person p = new Person(id, new PersonProxy(rs.getLong("buddy"))); UoW.getCurrent.registerClean(p); } February 2010 Stuart Thiel