Sander Hoogendoorn Principal Technology Officer Capgemini The Netherlands SESSION CODE: ARC303.

Slides:



Advertisements
Similar presentations
Expression Blend 4 – deep dive
Advertisements

Yii – How Power Comes Introduction, OOP & Design Patterns Presented at: Nextbridge Multan Center Aug 25, 2011.
Spring, Hibernate and Web Services 13 th September 2014.
Enterprise Smart Clients Architecture, Patterns, Design, Best Practices Keith Elder Manager, Sr. Software Engineer Quicken Loans Blog:
CSLA Presenter Sergey Barskiy, senior consultant at Magenic Technologies your questions Send an in order.
Software Architecture Patterns (2). what is architecture? (recap) o an overall blueprint/model describing the structures and properties of a "system"
CMPT 370: Information Systems Design Instructor: Curtis Cartmill, Simon Fraser University – Summer 2003 Lecture Topic: Layered Architecture Class Exercise:
T HE B ASICS O F S OFTWARE A RCHITECTURE F OR.NET D EVELOPERS Dan Douglas | Senior Software Developer/ Architect Blog:
Session-01. Layers Struts 2 Framework The struts 2 framework is used to develop MVC-based web application. Struts 1.0 was released in June The.
User Group 2015 Version 5 Features & Infrastructure Enhancements.
By Bob Bunson  Simulation of software development project  Fictitious system from Concept to Code  Oriented around the.
CRM WEB UI – ARCHITECTURE- DEFINITIONS For More details please go to
Joe Kuemerle Lead Developer PreEmptive Solutions - SESSION CODE: DEV306.
Design for Testability: Mocks, Stubs, Refactoring, and User Interfaces Benjamin Day.
Sometimes it is the stuff you know that hinders true progress.
Why Analysis Process Refer to earlier chapters Models what the system will do makes it easier for understanding no environment considered (hence, system.
Presenter - Donn Felker.  Senior Consultant for Microsoft Gold Certified Partner- Statêra.  8 years of experience in developing and architecting enterprise.
Todd Snyder Development Team Lead Infragistics Experience Design Group.
Building Web Sites with ASP.NET MVC Framework Noam King CTO Sela College
The Secrets of Effective Technical Talks: How to Explain Tech without Tucking Them In! Presented by Mark Minasi and Mark Russinovich SESSION CODE: SIA334.
Building an Offline Smart Client using Domain-Driven Design Principles Tim McCarthy.
Ashwin Sarin Program Manager Microsoft Corporation SESSION CODE: COS204.
Boris Jabes Senior Program Manager Microsoft Corporation SESSION CODE: DEV319 Scale & Productivity in Visual C
Presentation. Recap A multi layer architecture powered by Spring Framework, ExtJS, Spring Security and Hibernate. Taken advantage of Spring’s multi layer.
Inversion Of Control & Dependency Injection Break Apart The Dependencies Oren Eini Senior Developer We! Consulting Group
Sage ACT! 2013 SDK Update Brian P. Mowka March 23, 2012 Template date: October 2010.
Janssen Jones Virtual Machine MVP Indiana University SESSION CODE: VIR403.
Bradley Millington Senior Program Manager Microsoft Corporation SESSION CODE: WEB 306.
Architectural Patterns Support Lecture. Software Architecture l Architecture is OVERLOADED System architecture Application architecture l Architecture.
Suhail Dutta Program Manager Microsoft Corporation SESSION CODE: DEV402.
Chandrika Shankarnarayan Senior Program Manager Microsoft Corporation SESSION CODE: ASI301.
.  A multi layer architecture powered by Spring Framework, ExtJS, Spring Security and Hibernate.  Taken advantage of Spring’s multi layer injection.
Object Oriented Software Development
Alternative Architectures: Inversion of Control Mike Hadlow mikehadlow.blogspot.com.
Paul Litwin Programmer Manager Fred Hutchinson Cancer Research Center SESSION CODE: WEB206.
Omar Khan SESSION CODE: WSV331. Simplification.
Model View Controller MVC Web Software Architecture.
Jeff King Senior Program Manager, Visual Studio Microsoft Corporation SESSION CODE: WEB305.
Lori Dirks Expression Community Manager Microsoft Corporation SESSION CODE: WEB309.
Chris Mayo Microsoft Corporation SESSION CODE: UNC207.
Richard Campbell Co-Founder Strangeloop Networks SESSION CODE: WEB315.
Srinath Venkatasubramanian Alliance Manager Sonata Software Limited SESSION CODE: BIP203.
SESSION CODE: MGT205 Chris Harris Program Manager Microsoft Corporation.
Andrew Connell, MVP Developer, Instructor & Author Critical Path Training, LLC. SESSION CODE: OSP305.
Introducing Visual Studio 2010: What It Is and Why You Should Care
David Ollason Lead Program Manager Microsoft Corporation SESSION CODE: UNC322 The New Communicator “14” Platform.
BIO202 | Building Effective Data Visualizations and Maps with Microsoft SQL Server 2008 Reporting Services BIU08-INT | Using.
Martin Woodward Program Manager Microsoft Corporation SESSION CODE: DEV308.
SESSION CODE: COS301. So what do we do?
David A. Carley Senior SDE Microsoft Corporation SESSION CODE: DEV318.
Cube Measure Group Measure Partition Cube Dimension Dimension Attribute Attribute Relationship Hierarchy Level Cube Attribute Cube Hierarchy.
Christophe Fiessinger & Jan Kalis Senior Technical Product Manager Microsoft Corporation SESSION CODE: OSP209.
Ken Getz Senior Consultant MCW Technologies, LLC SESSION CODE: WCL202.
Understanding Dependency Injection… and those pesky containers Miguel A. Castro Architect -
Presented by Alexey Vedishchev Developing Web-applications with Grails framework American University of Nigeria, 2016 Intro To MVC Architecture.
Adding Concurrency to a Programming Language Peter A. Buhr and Glen Ditchfield USENIX C++ Technical Conference, Portland, Oregon, U. S. A., August 1992.
Andrew Connell, MVP Developer, Instructor & Author Critical Path Training, LLC. SESSION CODE: OSP319.
Introduction ITEC 420.
Introducing the Microsoft® .NET Framework
Structure of a web application
Tech Ed North America /13/ :13 AM Required Slide
End to end app development ASP.NET, WCF, WF, EF, & RIA Services
Present by Andie Saizan, MCP
Branching and Merging Practices
High Availability: A Contrarian View
Improving the structure of existing code
Tech Ed North America /1/ :36 AM Required Slide
LitwareHR v2: an S+S reference application
Designing For Testability
Tech Ed North America /6/2019 2:07 PM Required Slide
Presentation transcript:

Sander Hoogendoorn Principal Technology Officer Capgemini The Netherlands SESSION CODE: ARC303

It always takes longer than you expect, even when you take into account Hofstadter’s Law

Frameworks, like pizzas, only come in only two sizes: too big and too small.

General Purpose Frameworks Enterprise Library, Spring.Net, Castle, NakedObjects, ADF, SubSonic, … General Purpose Frameworks Enterprise Library, Spring.Net, Castle, NakedObjects, ADF, SubSonic, … Single goaled frameworks – verticals Dependency injection: ObjectBuilder, Unity, Castle Windsor, (MEF) Logging: Log4Net, Logging Block, Common.Logging Exception handling: Exception Handling Block Apect orientation: PostSharp, SetPoint Search: Lucene.net, NLucene Portals: DotNetNuke, Umbraco, Orchard CMS Single goaled frameworks – verticals Dependency injection: ObjectBuilder, Unity, Castle Windsor, (MEF) Logging: Log4Net, Logging Block, Common.Logging Exception handling: Exception Handling Block Apect orientation: PostSharp, SetPoint Search: Lucene.net, NLucene Portals: DotNetNuke, Umbraco, Orchard CMS Single goaled frameworks – architectural User interface: Silverlight, ASP.NET MVC, WPF, ASP.NET Ajax, Spring MVC Process: UI Process Application Block, WF Domain: Entity Framework, NHibernate, NEO Data: Entity Framework, Hibernate, Castle ActiveRecord, CSLA Services: WCF, WCF RIA Single goaled frameworks – architectural User interface: Silverlight, ASP.NET MVC, WPF, ASP.NET Ajax, Spring MVC Process: UI Process Application Block, WF Domain: Entity Framework, NHibernate, NEO Data: Entity Framework, Hibernate, Castle ActiveRecord, CSLA Services: WCF, WCF RIA

The way out of trouble is never as simple as the way in.

What if we require additional features that aren’t covered by our framework? What if we decide that another framework might be better than the one we’re using now? What if the author of our favorite framework suddenly stops developing it? What if the framework contains bugs? And what if the new version of our framework is implemented totally different?

An application developer An application developer A framework developer A framework developer

I don’t care if it works on your machine! We are not shipping your machine! Here’s … beta!

Only in theory, practice and theory are the same

End of lifecycle?

Some basic patterns that might help you

Dependencies  Using frameworks is simply good, gringo  However, be very aware of dependencies Minimize dependencies  Frameworks reflect software architecture, not vice versa  Define your own layer supertypes  Apply dependency injecton / extensibility  Apply additional patterns  Many more patterns, some very basic, will increase minimizing dependencies

Architecture starts when you carefully put two bricks together. There it begins.

Presentation Process Domain Data / Services Outside world Pages UserControls Panels Use cases Workflow Domain objects / Entities Factories / Repositories Enums / Value objects / Smart references [Mapping] Service gateways Service locators [Mapping] Databases Services / ESB PeoplesoftSAPBizTalkJava Software architecture vs frameworks Software architecture is leading Layers, elements, responsibilities, collaboration Frameworks supports architecture! Code reflects architecture Software architecture vs frameworks Software architecture is leading Layers, elements, responsibilities, collaboration Frameworks supports architecture! Code reflects architecture

From a programmer's point of view the user is a peripheral that types when you issue a read request.

What’s a layer supertype Ollie?  Acts as a supertype for all types in its layer  All types inherit from the layer supertype Well Stan, it’s characteristics are  Name expresses common behaviour  Forces common features on all inherited types  Ideal starting point for services  Initially the layer supertype is empty  Reserve layer supertype for future additions  Extension methods don’t (always) help, you know

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.

What is the matter Mister Fawlty? The problem Manual, is that  I want to use constants in my application  But I want to define them in my framework and extend them in my application  Enumeration won’t do – there’s no inheritance [PrincipalPermission(SecurityAction.Demand, Role = "Teller")]

Descriptor Defines a restricted but application specific extendible list of definitions Useful when  Enums can not be inherited  Framework defines enumeration types that need to be extended in application code  Define layer supertype using reflection  Pre-define frequently used instances [PrincipalPermission(SecurityAction.Demand, Roles.Teller)]

XML is like violence - if it doesn’t solve your problems, you are not using enough of it.

What do you think it is? Create true separation between definition and implementation, so that the two can vary independently and can be replaced easily Looks like a typical case of dependency injection to me  Call functionality without having to know the actual implementation  Implement replaceable services  Apply implementations in different contexts  Plug-in services at run-time So …  Single topic services  Single or multiple implemenations need to be handled, which differs dependant on context, like with Windows API, logging or error handling  Unit testing

Did you know that there are different types of this dependency injection? Arggh… Yeah, sure. There’s  Constructor injection  Property (setter) injection  And even manual injection  Extending MEF style? Who cares doc?

Yes, XML will hurt you too!

"Teamwork is a lot of people doing what I say“

Definition  The manager-provider pattern creates a simple facade for a (set of) interfaced implementation(s) In practice  Facade holding one or a collection of instances of a particular interface  Methods to call methods from interface  At run-time, using dependency injection, actual implementation are injected Useful when  Generic services need to be called, which may have different implementations  Manager prevents having to loop through each of a list of implementation  Flexibility to add or remove implementation without change the application code

Dependencies  Using frameworks is simply good, gringo  However, be very aware of dependencies Minimize dependencies  Frameworks reflect software architecture, not vice versa  Define your own layer supertypes  Apply dependency injecton / extensibility  Apply additional patterns  Many more patterns, some very basic, will increase minimizing dependencies

or LinkedIn: aahoogendoorn

Sign up for Tech·Ed 2011 and save $500 starting June 8 – June 31 st You can also register at the North America 2011 kiosk located at registration Join us in Atlanta next year