1 / 45

Do Application Design Patterns Make Sense in ASP.NET?

Do Application Design Patterns Make Sense in ASP.NET?. Alex Homer alex@stonebroom.com. You may like to write these down now... http://www.daveandal.net/articles/ http://www.daveandal.net/download/. Agenda. What are Design Patterns? Basic Design Patterns for ASP.NET

tracey
Download Presentation

Do Application Design Patterns Make Sense in ASP.NET?

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. Do Application Design Patterns Make Sense in ASP.NET? Alex Homer alex@stonebroom.com You may like to write these down now... • http://www.daveandal.net/articles/ • http://www.daveandal.net/download/

  2. Agenda • What are Design Patterns? • Basic Design Patterns for ASP.NET • Basic Pattern Support within ASP.NET • Controller Patterns for ASP.NET • Advanced Patterns for ASP.NET • Conclusion and Summary

  3. Design Patterns are Scary...!

  4. You Use Patterns Every Day... try { something } catch (SqlException qx) { handle SQL error } catch (SecurityException sx) { handle security violation } catch (Exception ex) { handle all other exceptions } finally { clean up resources } Using xr As XmlReader = XmlReader.Create("file.xml") ... read some XML ... End Using Structured Exception Handling Factory Lifetime

  5. What are Design Patterns? • Informal Design Patterns • Code constructs, best practice, well-structured, common sense, the accepted approach, evolved over time • Formal Design Patterns • Documented as "Context", "Problem", "Solution", and a UML diagram • Have specific aims • Solve specific issues

  6. Why Do We Need Design Patterns? • Engineering disciplines require patterns • Structural Engineering • Electronic Engineering • ... even Social Engineering! • Creating software is also Engineering • Structural design and architecture • Componentization and interconnections • User interface design and implementation • Deployment, testing, and management

  7. Formal Design Patterns "Fundamental to any science or engineering discipline is a common vocabulary for expressing its concepts, and a language for relating them together." "... a body of literature to help software developers resolve recurring problems encountered throughout all of software development." "... a shared language for communicating insight and experience about these problems and their solutions." from http://www.scmpatterns.com/

  8. The Gang of Four (GOF) • Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides • "Design Patterns: Elements of Reusable Object-Oriented Software" (1995) • The Hillside Group http://hillside.net/patterns/DPBook/GOF.html

  9. Microsoft .NET Design Patterns • "Enterprise Solution Patterns Using Microsoft .NET" • From the patterns and practices (p&p) Group • Printed book (ISBN: 0735618399) • PDF Download • http://www.microsoft.com/downloads/details.aspx?familyid=3C81C38E-ABFC-484F-A076-CF99B3485754

  10. .NET Design Pattern Frameworks • "data & object factory" • Design Pattern Framework 2.0 • http://www.dofactory.com/Framework/Framework.aspx • Ingenious MVC for .NET 2.0 Web and WinForms • http://sourceforge.net/projects/ingeniousmvc • Microsoft "patterns & practices" Group • CAB and ObjectBuilder • Enterprise Library • Software Factories (Smart Client, Mobile, Web Service) • http://msdn.microsoft.com/practices/

  11. Pattern Types and Families These are just a few of the common ones ... PatternShare.org lists more than 250 !

  12. Common Patterns in ASP.NET Presentation Logic • Model-View-Controller (MVC) • Model-View-Presenter (MVP) • Use Case Controller • Command • Publish-Subscribe / Observer • Plug-in / Module / Intercepting Filter • Service Agent / Proxy / Broker • Provider / Adapter • Factory / Builder / Injection • Singleton • Repository Host or Behavioral Structural Creational Persistence

  13. Agenda • What are Design Patterns? • Basic Design Patterns for ASP.NET • Basic Pattern Support within ASP.NET • Controller Patterns for ASP.NET • Advanced Patterns for ASP.NET • Conclusion and Summary

  14. MVC & MVP Presentation Patterns • Both improve reusability of business logic • MVC has dependency between model and view • MVP improves testability but adds complexity

  15. Provider / Adapter Patterns • Used by ASP.NET itself, and other frameworks such as Enterprise Library • Allows behavioral changes without prior knowledge of requirements

  16. Service Agent / Proxy / Broker • Removes dependencies between client and service through intermediate brokers • Range of different implementations, with or without service agent logic component

  17. Repository Persistence Pattern • Virtualizes storage of an entity in a persistent medium, such as a database or as XML • Hides storage implementation from the application code

  18. Singleton Creation Pattern • Provides for creation of a class for which only a single instance can exist • Useful for exposing read-only data • Useful for exposing static methods that do not rely on instance data • Include private default constructor to prevent client instantiation • Provide a static GetInstance method that returns the current instance

  19. Agenda • What are Design Patterns? • Basic Design Patterns for ASP.NET • Basic Pattern Support within ASP.NET • Controller Patterns for ASP.NET • Advanced Patterns for ASP.NET • Conclusion and Summary

  20. Pattern Support within ASP.NET

  21. Pattern Support within ASP.NET

  22. Pattern Support within ASP.NET

  23. Pattern Support within ASP.NET

  24. Pattern Support within ASP.NET

  25. How To... • MVP: use ASP.NET code-behind model or extend code file with custom classes • Provider: use built-in providers or create custom providers from a base class or interface • Repository: typed DataSet, third-party tools (such as CodeSmith), or custom code • Adapter: use built-in (such as CSS control adapters) or create custom adapters • Service Agent and Proxy: Web References in Visual Studio, maybe wrap in custom class

  26. Basic Patterns in ASP.NET Example Demo

  27. Agenda • What are Design Patterns? • Basic Design Patterns for ASP.NET • Basic Pattern Support within ASP.NET • Controller Patterns for ASP.NET • Advanced Patterns for ASP.NET • Conclusion and Summary

  28. Use Case Controller • Coordinates and sequences interaction between the system and the users to carry out a process

  29. Page Controller & Front Controller • Select content to display in a page using different partial views, or... • Select which page (view) to display

  30. Plug-in/Module/Intercepting Filter • Allows the features or behavior of an application to change when it loads separate components that implement extra functionality • Plug-ins and Modules may be custom assemblies (modules), or general-purpose software components such as ActiveX controls or Java applets • Intercepting Filters reside in an application pipeline, such as the ASP.NET HTTP pipeline • Commonly, the components extend the features of the host application

  31. Implementation in ASP.NET • HTTP Module performs redirection at front • Page Controller selects view elements

  32. How To... • Use Case: custom branching code in presenter class - case statements using Server.Transfer, or displaying partial Views as User Controls • Page Controller: custom base class for Page that handles Init or Load event to perform common tasks then calls a method in the actual page to create page-specific content • Front Controller: an HTTP Module that adds a custom handler to a pipeline event that performs the appropriate Server.Transfer

  33. Page & Front Controller Example Demo

  34. Agenda • What are Design Patterns? • Basic Design Patterns for ASP.NET • Basic Pattern Support within ASP.NET • Controller Patterns for ASP.NET • Advanced Patterns for ASP.NET • Conclusion and Summary

  35. Factory / Builder / Injection • Separates the construction of a complex object from its representation • Allows use of the same construction process to create different representations • In the Factory pattern, the subclasses of the object generator determine the object type • In the Builder and Injection patterns, the client passes instructions or hints to the object generator to specify the required object type.

  36. Command Design Pattern • Separates command invoker and receiver

  37. Observer and Publish/Subscribe • Separates creator and receiver(s) of events

  38. Command-Observer Implementation • Client creates and subscribes objects

  39. Command-Observer Implementation • Introduces a dependency between Observer and Subject, but removes the requirement for events

  40. Command-Observer Example Demo

  41. Observer and Publish/Subscribe • Separates creator and receiver(s) of events

  42. Publish-Subscribe Example Demo

  43. Conclusions - 1 • MVP and the various Controller patterns are useful, but firing update events from Model usually is not. • Page Controller and Front Controller allow for custom use case behavior by showing different views or activating different presenters. Front Controller can make use of the InterceptingFilter pattern. • Repository is useful for virtualization of source data. • Singleton is useful for reducing the need for multiple instances. • Service Agent and Proxy are ideal for interacting with remote services.

  44. Conclusions - 2 • Provider is useful for accessing various types of data sources. • Adapter is useful for extending ASP.NET controls. • Factory, Builder, Injection, Observer, and Command are probably less useful, more complex, and can be difficult to implement. • Event-driven patterns like Publish-Subscribe are generally useful only if all subscribers are instantiated within the page lifetime. • The composite Command-Observer event-free approach is useful for removing dependencies between classes.

  45. References • Information about Design Patterns: • http://msdn.microsoft.com/library/en-us/dnpag/html/intpatt.asp • http://www.patternshare.org/ • http://msdn.microsoft.com/architecture/ • http://msdn.microsoft.com/practices/ • http://www.dofactory.com/Patterns/Patterns.aspx • http://hillside.net/ • Contact: alex@stonebroom.com • Slides & code: http://www.daveandal.net/download/ • Article: http://www.daveandal.net/articles/

More Related