1 / 37

Enterprise Application Design Patterns: Improved and Applied

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

feoras
Download Presentation

Enterprise Application Design Patterns: Improved and Applied

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Enterprise Application Design Patterns:Improved and Applied Stuart Thiel sthiel@cs.concordia.ca February 11, 2010

  2. 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

  3. Developers Work With Software Developers Work With Software Design Implement Test Maintain February 2010 Stuart Thiel

  4. Developer Tools Developer Aids/Tools Programming Languages Integrated Development Environments Processes / Artifacts Patterns / Styles Stuart Thiel

  5. 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

  6. 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

  7. 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

  8. P. Theory Implementation Problems:: Theory Mixes with Implementation, or is Kept Apart Lazy Load Unit of Work February 2010 Stuart Thiel

  9. 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

  10. Solutions Solutions Review of Existing Patterns An Additional Patterns Refined Patterns SoenEA February 2010 Stuart Thiel

  11. 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

  12. Additional Patterns Additional Pattern Domain Object Front Command Dispatcher List Proxy February 2010 Stuart Thiel

  13. Refined Patterns:: Mappers Refined Patterns Data Mapper / Table Data Gateway • Input Mapper • Output Mapper • Table Data Gateway • Finder February 2010 Stuart Thiel

  14. Refined Patterns:: Others Refined Patterns Front Controller Lazy Load Identity Map Unit of Work February 2010 Stuart Thiel

  15. SoenEA:: advantages SoenEA help eliminate tedious tasks, help programmers to make fewer mistakes, and give guidance on proper practices. February 2010 Stuart Thiel

  16. SoenEA:: provides SoenEA Patterns Utility components Default Implementations of Typical Components (DITCs) Test components February 2010 Stuart Thiel

  17. 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

  18. 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

  19. Future Work Future Work Code Generation Testing Application Level Patterns Validator Pattern Refining Data Gateway Implementations Integration with other artefacts0 February 2010 Stuart Thiel

  20. Thank You Thank You!

  21. An Analogy An Analogy Software Development -> Cooking WEA Development -> Baking February 2010 Stuart Thiel

  22. 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

  23. An Analogy:: Design Patterns An Analogy:: Design Patterns Command, Factory, Adapter, Proxy Mixing, Chopping, Heating, Greasing, Measuring February 2010 Stuart Thiel

  24. 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

  25. Analogy:: Frameworks An Analogy:: Frameworks Struts 1.0 - > Waffle Iron Hibernate -> Bread Maker February 2010 Stuart Thiel

  26. Cyclic Reference Solution Cyclic Reference Where to solve it? • Input Mapper Common Alternatives • Loading other Domain Objects after February 2010 Stuart Thiel

  27. Cyclic Reference alternative Easy: February 2010 Stuart Thiel

  28. 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

  29. Cyclic Reference alternative Harder February 2010 Stuart Thiel

  30. 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

  31. 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

More Related