Basics of Software Architecture for .NET Developers


Published on

Understanding what Software Architecture is and the benefits of a good architecture along with the implicit requirements that go along with it. The presentation then goes into detail about how the .NET framework can be leveraged as part of a great architecture.

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • ComponentsWhich components?How are they implemented?Reducing complexity through abstractionBreaking an application into distinct features that overlap in functionality as little as possibleFunctions can be optimized independentlyFailure of one function does not cause the others to fail
  • Keep up to date on the latest technology – Not always necessary to have intimate knowledge of new technology, but useful to have an understand of the technology to get an idea of where it may assist or be useful within a software system
  • This is a very quick introduction about reflection and generics.. Many resources on the web available.
  • Basics of Software Architecture for .NET Developers

    1. 1. The Basics Of Software Architecture For .NET Developers<br />Dan Douglas |Senior Software Developer/ Architect     Blog: Twitter: @Dan_Douglas E-mail:<br />
    2. 2. Software Architecture is:<br />Structure and design of the application/system<br />Components, and how they are implemented<br />Connectors – the relationship between the components<br />Reducing complexity through abstraction<br />Breaking an application into distinct features that overlap in functionality as little as possible<br />Functions can be optimized independently<br />Failure of one function does not cause the others to fail<br />
    3. 3. The Software Architect Takes Into Account:<br />Design Patterns<br />Best Practices<br />n-Layering (UI, Façade, Business, Data, etc)<br />Modularity<br />Application Frameworks<br />Current and Emerging Technologies<br />Reusability<br />
    4. 4. Advantages of a Good Architecture<br />Compatibility<br />Extensibility<br />Reliability<br />Maintainability<br />Usability<br />Availability<br />Security<br />Solutions that are easier to design, enhance, and maintain<br />
    5. 5. Implicit Requirements<br />An Analogy:<br /> Implicit requirements are those that engineers automatically include as a matter of professional duty. Most of these are requirements the engineer knows more about than their sponsor. For instance, the original Tacoma Narrows Bridge showed that winds are a problem for suspension bridges. The average politician is not expected to know about this, however. Civil engineers would never allow themselves to be in a position to say, after a new bridge has collapsed, “We knew wind would be a problem, but you didn’t ask us to deal with it in your requirements.”<br />Source: MSDN Architecture Article: Are We Engineers? or Crafts People?<br />
    6. 6. Implicit Requirements<br />It is the “duty” of the software architect to determine potential problems or risks with a design and mitigate or eliminate these risks<br />The stakeholders of the project, don’t necessarily understand these risks nor do they necessarily understand their importance to the long term success of the project<br />
    7. 7. Implicit Understanding Of Risk<br />This will lead to a better analysis and resolution of risk, including:<br />Scaling<br />Compatibility<br />Future Maintenance and Enhancements<br />Usability Issues<br />Stakeholder Buy-In and Support<br />Proper Business Processes In Place<br />etc…<br />
    8. 8. For .NET Developers<br />Solid Understanding of Object Oriented Programming <br />Objects, Instances, Inheritance, Abstraction, Encapsulation (Interfaces), Polymorphism, Decoupling, etc<br />.NET Design Patterns<br />Very useful patterns to understand include (Strategy, Façade, Adapter, and Singleton)<br />Keep up to date on the latest technology<br />SOA, WF, WPF, WCF, LINQ, etc<br />
    9. 9. For .NET Developers<br />Increase Your Productivity and Effectiveness<br />Develop application components that are re-useable<br />Look to re-use existing components <br />Always consider modularity and decoupling<br />Look at third party components (Infragistics, Telerik, etc)<br />Consider ORM mapping tools such as LLBL Gen Pro<br />
    10. 10. For .NET Developers<br />Understand the Value of Generics<br />Generics make type parameters possible<br />Defers the type of a method or object until it is instantiated (ex: List(Of T) <br />Ex:) New List object is typed to be of type animal<br />Understand the Value of Reflection<br />System.Reflection namespace<br />Load objects at run time, get a list of methods and properties of objects at run time (even private ones) and call them<br />Many practical uses, including the ability to create a “Pluggable Architecture”<br />
    11. 11. For .NET Developers<br />Microsoft Patterns & Practices<br />Enterprise Library<br />Provides common application blocks to be used within your application for Data Access, Cryptography, Caching, Exception Handling, Logging, Security, and more.<br />Software Factories <br />Architectural factories for building your application, including, Smart Client, Web Service, and Mobile Client<br />Red-Gate .NET Reflector is a Cool Tool!<br />Allows you to view, navigate, and search through the class hierarchies of .NET assemblies<br />Look at the code behind the objects in .NET Framework classes to see how they work<br />
    12. 12. Resources<br />MSDN Architecture Center<br /> (Software Architecture Resources)<br />Data & Object Factory (.NET Design Patterns)<br />Microsoft Patterns & Practices<br /><br />.NET Reflector<br />System.Reflection Namespace<br /><br />My Blog (Dan Douglas)<br />
    13. 13. Questions?<br />Dan Douglas |Senior Software Developer/ Architect     Blog: Twitter: @Dan_Douglas E-mail:<br />Consulting Inquiries? (519) 777-2258<br />