SlideShare una empresa de Scribd logo
1 de 24
Practical Enterprise Application Development
Agenda Introduction Enterprise Architecture and Design What is Bad Design? Good Design Principles for  Enterprise Development Single Responsibility Principle The Open Close Principle  Dependency Inversion Principle Demo: Applying Principles
Introduction Why we are here? From Project development to Product development As we build framework on these principles We want you to start taking care of them To achieve our vision we need to strive for it
Enterprise Architecture    “Enterprise Architecture is typically used to describe an organization-wide framework for portraying and incorporating the business processes, information flows, systems, applications, data and infrastructure to effectively and efficiently support the organization needs.”
Enterprise ArchitectureDeveloper’s point of view Defining a process, framework and set of patterns to design, develop, build and maintain all the software that an organization Unified development platform for creating all elements of software at all levels of design The reusable elements can then be used to geed or drive other applications with similar need Defining solid foundation of code and practices that eventually facilitate interoperability in the heterogeneous software environment
Enterprise Development Patterns and practices adopted by programmers endeavoring to implement enterprise architecture They address five key areas: Reliability Flexibility Separations of Concerns Reusability  Maintainability
Hold on hold… One might think that simple, non-enterprise code that delivers a particular feature is identical in value to enterprise code that delivers precisely the same feature? While enterprise sample might look a bit more complex (only at first), the resulting class or module ultimately provides more reliability or is more maintainable
Bad design is... Hard to change! A single change break lots of other code Rigid Fragile Can’t be ‘extended’  Immobile
Good Design Principles Enterprise development requires a change in methodologies We are going to look some good design principles now By core, we take care of two things Modularity Loosely Coupled Classes
The Single Responsibility Principle "A responsibility is a reason to change, a class or module should have one, and only one, reason to change."
The Single Responsibility Principle “There should never be more than one reason for a class to change.” Dijkstra’sSoC: Separation of Concerns Applies on every level of code
BusinessPartnerValidator BusinessPartner Validator DB Trade What is wrong here: Changes if DB changes or Business Logic Changes
RefactoredBusinessPartnerValidator BusinessPartner Validator BusinessPartner Source Trade DB What's its job? Classes must have an identifiable single responsibility.
The Open Closed Principle “Software Entities (Classes, Modules, Functions, etc.) should be open for extension, but closed for modification”
The Open Closed Principle Modules that conform to the open-closed principle have two primary attributes Open For Extension behavior of the module can be extended Closed for Modification The source code of such a module is inviolate The normal way to extend the behavior of a module is to make changes to that module. How can these two opposing attributes be resolved?
The Open Closed Principle Abstraction is the key to achieve it Server Client Closed Client
The Open Closed Principle Abstract Server Client Server Open Client
Liskov Substitution Principle “Functions that reference a base class must be able to use objects of derived classes without knowing it."
Dependency Inversion Principle “High level modules should not depend upon low level modules. Both should depend upon abstractions. “ “Abstractions should not depend upon details. Details should depend upon abstractions.”
BusinessParty Validator Introduce stability with abstraction High Level (Less Stable) BusinessParty Source BusinessParty Validator Trade DB Low Level (More Stable)
Better BusinessPartner Validator <Interface> IBusinessPartnerSource BusinessPartnerValidator BusinessPartySource Trade DB
Extensible BusinessParty Validator <Interface> IBusinessPartnerSource BusinessPartyValidator Trade WSBusinessPartnerSource DbBusinessPartySource DB Cloud
Let’s Do It DEMO
Reference and Further Learning Professional Enterprise .NET Jon Arking and Scott Millett Combating Software Entropies with Design Principles and Patterns at Tech-Ed ME HammadRajjoub ObjectMentor.com  http://www.objectmentor.com/resources/articles/ Practices and Patterns on MSDN http://msdn.microsoft.com/en-us/practices/default.aspx

Más contenido relacionado

Similar a Practical Enterprise Application Development

Different Methodologies Used By Programming Teams
Different Methodologies Used By Programming TeamsDifferent Methodologies Used By Programming Teams
Different Methodologies Used By Programming TeamsNicole Gomez
 
Software Architecture for Agile Development
Software Architecture for Agile DevelopmentSoftware Architecture for Agile Development
Software Architecture for Agile DevelopmentHayim Makabee
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship ChecklistRyan Polk
 
The Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary VersionThe Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary VersionPhilip Schwarz
 
Software design principles - jinal desai
Software design principles - jinal desaiSoftware design principles - jinal desai
Software design principles - jinal desaijinaldesailive
 
Le cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenaires
Le cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenairesLe cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenaires
Le cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenairesClub Alliances
 
Introduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptxIntroduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptxaasssss1
 
Tech challenges in a large scale agile project
Tech challenges in a large scale agile projectTech challenges in a large scale agile project
Tech challenges in a large scale agile projectHarald Soevik
 
ADUF - Adaptable Design Up Front
ADUF -  Adaptable Design Up FrontADUF -  Adaptable Design Up Front
ADUF - Adaptable Design Up FrontHayim Makabee
 
System design process.pptx
System design process.pptxSystem design process.pptx
System design process.pptxNajibMuhammad16
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"GlobalLogic Ukraine
 
Software development philosophies v1
Software development philosophies v1Software development philosophies v1
Software development philosophies v1Praveen Nair
 
04 designing architectures
04 designing architectures04 designing architectures
04 designing architecturesMajong DevJfu
 
Dependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and PatternsDependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and PatternsJuan Lopez
 
Week 7 Github - SI- Architecture.pptx
Week 7 Github - SI-  Architecture.pptxWeek 7 Github - SI-  Architecture.pptx
Week 7 Github - SI- Architecture.pptxArjayBalberan1
 
Enterprise Architecture
Enterprise ArchitectureEnterprise Architecture
Enterprise ArchitectureVikas Grover
 

Similar a Practical Enterprise Application Development (20)

Different Methodologies Used By Programming Teams
Different Methodologies Used By Programming TeamsDifferent Methodologies Used By Programming Teams
Different Methodologies Used By Programming Teams
 
Software Architecture for Agile Development
Software Architecture for Agile DevelopmentSoftware Architecture for Agile Development
Software Architecture for Agile Development
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship Checklist
 
The Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary VersionThe Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary Version
 
Solid
SolidSolid
Solid
 
Software design principles - jinal desai
Software design principles - jinal desaiSoftware design principles - jinal desai
Software design principles - jinal desai
 
Le cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenaires
Le cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenairesLe cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenaires
Le cloudvupardesexperts 9pov-curationparloicsimon-clubclouddespartenaires
 
Introduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptxIntroduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptx
 
Tech challenges in a large scale agile project
Tech challenges in a large scale agile projectTech challenges in a large scale agile project
Tech challenges in a large scale agile project
 
ADUF - Adaptable Design Up Front
ADUF -  Adaptable Design Up FrontADUF -  Adaptable Design Up Front
ADUF - Adaptable Design Up Front
 
System design process.pptx
System design process.pptxSystem design process.pptx
System design process.pptx
 
The unified process
The unified processThe unified process
The unified process
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
 
testing
testingtesting
testing
 
Software development philosophies v1
Software development philosophies v1Software development philosophies v1
Software development philosophies v1
 
04 designing architectures
04 designing architectures04 designing architectures
04 designing architectures
 
Dependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and PatternsDependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and Patterns
 
Software Development Models
Software Development ModelsSoftware Development Models
Software Development Models
 
Week 7 Github - SI- Architecture.pptx
Week 7 Github - SI-  Architecture.pptxWeek 7 Github - SI-  Architecture.pptx
Week 7 Github - SI- Architecture.pptx
 
Enterprise Architecture
Enterprise ArchitectureEnterprise Architecture
Enterprise Architecture
 

Más de Adil Mughal

Write cleaner, maintainable, and testable code in Android with MVVM
Write cleaner, maintainable, and testable code in Android with MVVMWrite cleaner, maintainable, and testable code in Android with MVVM
Write cleaner, maintainable, and testable code in Android with MVVMAdil Mughal
 
Code Sharing Between Windows Phone/Store Apps
Code Sharing Between Windows Phone/Store AppsCode Sharing Between Windows Phone/Store Apps
Code Sharing Between Windows Phone/Store AppsAdil Mughal
 
Community Contribution Experience
Community Contribution ExperienceCommunity Contribution Experience
Community Contribution ExperienceAdil Mughal
 
Web Development using ASP.NET MVC at HEC
Web Development using ASP.NET MVC at HECWeb Development using ASP.NET MVC at HEC
Web Development using ASP.NET MVC at HECAdil Mughal
 
Web development using ASP.NET MVC
Web development using ASP.NET MVC Web development using ASP.NET MVC
Web development using ASP.NET MVC Adil Mughal
 
Quality Assurance in SDLC
Quality Assurance in SDLCQuality Assurance in SDLC
Quality Assurance in SDLCAdil Mughal
 
2 Day - WPF Training by Adil Mughal
2 Day - WPF Training by Adil Mughal2 Day - WPF Training by Adil Mughal
2 Day - WPF Training by Adil MughalAdil Mughal
 
What's New in Visual Studio 2010
What's New in Visual Studio 2010What's New in Visual Studio 2010
What's New in Visual Studio 2010Adil Mughal
 
DevNext - How we build applications in Industry
DevNext - How we build applications in IndustryDevNext - How we build applications in Industry
DevNext - How we build applications in IndustryAdil Mughal
 
DevNext - Web Programming Concepts Using Asp Net
DevNext - Web Programming Concepts Using Asp NetDevNext - Web Programming Concepts Using Asp Net
DevNext - Web Programming Concepts Using Asp NetAdil Mughal
 
Windows 7 For Geeks
Windows 7 For GeeksWindows 7 For Geeks
Windows 7 For GeeksAdil Mughal
 

Más de Adil Mughal (11)

Write cleaner, maintainable, and testable code in Android with MVVM
Write cleaner, maintainable, and testable code in Android with MVVMWrite cleaner, maintainable, and testable code in Android with MVVM
Write cleaner, maintainable, and testable code in Android with MVVM
 
Code Sharing Between Windows Phone/Store Apps
Code Sharing Between Windows Phone/Store AppsCode Sharing Between Windows Phone/Store Apps
Code Sharing Between Windows Phone/Store Apps
 
Community Contribution Experience
Community Contribution ExperienceCommunity Contribution Experience
Community Contribution Experience
 
Web Development using ASP.NET MVC at HEC
Web Development using ASP.NET MVC at HECWeb Development using ASP.NET MVC at HEC
Web Development using ASP.NET MVC at HEC
 
Web development using ASP.NET MVC
Web development using ASP.NET MVC Web development using ASP.NET MVC
Web development using ASP.NET MVC
 
Quality Assurance in SDLC
Quality Assurance in SDLCQuality Assurance in SDLC
Quality Assurance in SDLC
 
2 Day - WPF Training by Adil Mughal
2 Day - WPF Training by Adil Mughal2 Day - WPF Training by Adil Mughal
2 Day - WPF Training by Adil Mughal
 
What's New in Visual Studio 2010
What's New in Visual Studio 2010What's New in Visual Studio 2010
What's New in Visual Studio 2010
 
DevNext - How we build applications in Industry
DevNext - How we build applications in IndustryDevNext - How we build applications in Industry
DevNext - How we build applications in Industry
 
DevNext - Web Programming Concepts Using Asp Net
DevNext - Web Programming Concepts Using Asp NetDevNext - Web Programming Concepts Using Asp Net
DevNext - Web Programming Concepts Using Asp Net
 
Windows 7 For Geeks
Windows 7 For GeeksWindows 7 For Geeks
Windows 7 For Geeks
 

Último

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 

Último (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

Practical Enterprise Application Development

  • 2. Agenda Introduction Enterprise Architecture and Design What is Bad Design? Good Design Principles for Enterprise Development Single Responsibility Principle The Open Close Principle Dependency Inversion Principle Demo: Applying Principles
  • 3. Introduction Why we are here? From Project development to Product development As we build framework on these principles We want you to start taking care of them To achieve our vision we need to strive for it
  • 4. Enterprise Architecture “Enterprise Architecture is typically used to describe an organization-wide framework for portraying and incorporating the business processes, information flows, systems, applications, data and infrastructure to effectively and efficiently support the organization needs.”
  • 5. Enterprise ArchitectureDeveloper’s point of view Defining a process, framework and set of patterns to design, develop, build and maintain all the software that an organization Unified development platform for creating all elements of software at all levels of design The reusable elements can then be used to geed or drive other applications with similar need Defining solid foundation of code and practices that eventually facilitate interoperability in the heterogeneous software environment
  • 6. Enterprise Development Patterns and practices adopted by programmers endeavoring to implement enterprise architecture They address five key areas: Reliability Flexibility Separations of Concerns Reusability Maintainability
  • 7. Hold on hold… One might think that simple, non-enterprise code that delivers a particular feature is identical in value to enterprise code that delivers precisely the same feature? While enterprise sample might look a bit more complex (only at first), the resulting class or module ultimately provides more reliability or is more maintainable
  • 8. Bad design is... Hard to change! A single change break lots of other code Rigid Fragile Can’t be ‘extended’ Immobile
  • 9. Good Design Principles Enterprise development requires a change in methodologies We are going to look some good design principles now By core, we take care of two things Modularity Loosely Coupled Classes
  • 10. The Single Responsibility Principle "A responsibility is a reason to change, a class or module should have one, and only one, reason to change."
  • 11. The Single Responsibility Principle “There should never be more than one reason for a class to change.” Dijkstra’sSoC: Separation of Concerns Applies on every level of code
  • 12. BusinessPartnerValidator BusinessPartner Validator DB Trade What is wrong here: Changes if DB changes or Business Logic Changes
  • 13. RefactoredBusinessPartnerValidator BusinessPartner Validator BusinessPartner Source Trade DB What's its job? Classes must have an identifiable single responsibility.
  • 14. The Open Closed Principle “Software Entities (Classes, Modules, Functions, etc.) should be open for extension, but closed for modification”
  • 15. The Open Closed Principle Modules that conform to the open-closed principle have two primary attributes Open For Extension behavior of the module can be extended Closed for Modification The source code of such a module is inviolate The normal way to extend the behavior of a module is to make changes to that module. How can these two opposing attributes be resolved?
  • 16. The Open Closed Principle Abstraction is the key to achieve it Server Client Closed Client
  • 17. The Open Closed Principle Abstract Server Client Server Open Client
  • 18. Liskov Substitution Principle “Functions that reference a base class must be able to use objects of derived classes without knowing it."
  • 19. Dependency Inversion Principle “High level modules should not depend upon low level modules. Both should depend upon abstractions. “ “Abstractions should not depend upon details. Details should depend upon abstractions.”
  • 20. BusinessParty Validator Introduce stability with abstraction High Level (Less Stable) BusinessParty Source BusinessParty Validator Trade DB Low Level (More Stable)
  • 21. Better BusinessPartner Validator <Interface> IBusinessPartnerSource BusinessPartnerValidator BusinessPartySource Trade DB
  • 22. Extensible BusinessParty Validator <Interface> IBusinessPartnerSource BusinessPartyValidator Trade WSBusinessPartnerSource DbBusinessPartySource DB Cloud
  • 24. Reference and Further Learning Professional Enterprise .NET Jon Arking and Scott Millett Combating Software Entropies with Design Principles and Patterns at Tech-Ed ME HammadRajjoub ObjectMentor.com http://www.objectmentor.com/resources/articles/ Practices and Patterns on MSDN http://msdn.microsoft.com/en-us/practices/default.aspx

Notas del editor

  1. The operative phrase here is all of the software. It includes reusable tools for building client applications, websites, databases, office applications, business automation tools, scripts, and just about anything else that a company may use to get things done.
  2. Enterprise development commonly refers to the patterns and practices adopted by programmers endeavoring to implement enterprise architecture.It is the employment of certain approaches and methodologies that aim to achieve many of the root goals inherent to a successful enterprise system.Reliability: Most would agree that designing systems that are reliable is a must. Yet coding for reliability is a departure from business as usual. This is especially true in the rapid application development community. Many enterprise enthusiasts exchange the term reliability for testability, since most modern enterprise coding patterns aim to facilitate unit testing. Writing code that can be well tested means changing the way that a system’s functionality is modularized.Flexibility: Requirements can change. As a result, so must the software that supports them. If the code that you write prevents an application or system from being extensible, we would say it lacks flexibility. A flexible system allows for the changing of core features without violating unrelated services or attributes. FLEXIBILITY IS DIFFERENT FROM INTEROPERABILITY. Separation of Concerns: Separation of concerns is simply the process of breaking a system or application down into distinct functional layers with limited overlapping of functionality. Like flexibility, separation of concerns address the ability to modularize code and make it more pliable, with the added benefit of logical division.Reusability: Sharing features and services is tantamount to good enterprise design. As code is broken down and separated into logical pieces, these pieces should be designed to provide a distinct feature or satisfy a particular requirement of other system that invoke it. In other words, classes at any one logical level should be reusable by other classes in the same logical level.Maintainability: Maintainability refers to the capacity of a system to be altered or modified. The term maintainability actually means the ease with which a software product can be modified in order to support:StabilityAnalyzabilityChangeability Testability
  3. Yet this shortsighted evaluation fails to address the greater needs of the system, namely core enterprise concepts.
  4. How many times have you come across the code that you can qualify as a ‘bad design’? Or atlease and most commonly would have said, That’s not the way I would have done it.Before we move on. Lets agree on what&apos;s a bad design? Ok it’s a bit difficult to be exact about the metrics of bad design in software. But lets agree on some common aspects of bad design.A piece of software that fulfills its requirements and yet exhibits any or all of the following threetraits has a bad design.1. It is hard to change because every change affects too many other parts of the system.(Rigidity)2. When you make a change, unexpected parts of the system break. (Fragility)3. It is hard to reuse in another application because it cannot be disentangled fromthe current application. (Immobility)Moreover, it would be difficult to demonstrate that a piece of software that exhibits none of those traits, i.e. it is flexible, robust, and reusable, and that also fulfills all its requirements, has a bad design. Thus, we can use these three traits as a way to unambiguouslydecide if a design is “good” or “bad”.Code that’s hard to change is bad… Rigid code is bad!Code that has lots of ripple effects.. A single change break lots of other code. Fragile code is bad!Code that cant be re-used… Code that cant be ‘extended’ is bad.. Immobile
  5. Along with new set of development tools and design patterns, enterprise development requires a change in methodologies.
  6. If a class has more then one responsibility, then the responsibilities become coupled. Changes to one responsibility may impair or inhibit the class’ ability to meet the others. This kind of coupling leads to fragile designs that break in unexpected ways when changed.
  7. What is responsibility? … It is a reason for change.If you can think of more than one motive for changing a class, then that class has more than one responsibility.The term separation of concerns was probably coined by Edsger W. Dijkstra in his 1974 paper &quot;On the role of scientific thought&quot;[1].Let me try to explain to you, what to my taste is characteristic for all intelligent thinking. It is, that one is willing to study in depth an aspect of one&apos;s subject matter in isolation for the sake of its own consistency, all the time knowing that one is occupying oneself only with one of the aspects. We know that a program must be correct and we can study it from that viewpoint only; we also know that it should be efficient and we can study its efficiency on another day, so to speak. In another mood we may ask ourselves whether, and if so: why, the program is desirable. But nothing is gained --on the contrary!-- by tackling these various aspects simultaneously. It is what I sometimes have called &quot;the separation of concerns&quot;, which, even if not perfectly possible, is yet the only available technique for effective ordering of one&apos;s thoughts, that I know of. This is what I mean by &quot;focusing one&apos;s attention upon some aspect&quot;: it does not mean ignoring the other aspects, it is just doing justice to the fact that from this aspect&apos;s point of view, the other is irrelevant. It is being one- and multiple-track minded simultaneously.
  8. Example do demonstrate role based interfaces IVE examples
  9. Classes should have a single responsibility or jobDevelopers should have that job in mind when they work on a classA developer should easily be able to write a block comment at the top of a class identifying its job.That comment should not have the word AND in it.As architects and leads we should be able to ask this question.. Whats the job of this class? a developer should always have this job in mind use intuitive and simple names remember! no conjunctions (ANDS)
  10. When a single change to a program results in a cascade of changes to dependent modules, that program exhibits the undesirable attributes that we have come to associate with “bad” design. The program becomes fragile, rigid, unpredictable and unreusable. The open closed principle attacks this in a very straightforward way. It says that you should design modules that never change. When requirements change, you extend the behavior of suchmodules by adding new code, not by changing old code that already works.
  11. When a single change to a program results in a cascade of changes to dependent modules, that program exhibits the undesirable attributes that we have come to associate with “bad” design. The program becomes fragile, rigid, unpredictable and unreusable. The open closed principle attacks this in a very straightforward way. It says that you should design modules that never change. When requirements change, you extend the behavior of suchmodules by adding new code, not by changing old code that already works.1. They are “Open For Extension”.This means that the behavior of the module can be extended. That we can make the module behave in new and different ways as the requirements of the application change, or to meet the needs of new applications.2. They are “Closed for Modification”.The source code of such a module is inviolate. No one is allowed to make sourcecode changes to it.It would seem that these two attributes are at odds with each other. The normal way to extend the behavior of a module is to make changes to that module. A module that cannot be changed is normally thought to have a fixed behavior. How can these two opposing attributes be resolved?
  12. The abstractions are abstract base classes, and the unbounded group of possible behaviors is represented by all the possible derivative classes.It is possible for a module to manipulate an abstraction. Such a module can be closed for modification since it depends upon anabstraction that is fixed. Yet the behavior of that module can be extended by creating new derivatives of the abstraction.Figure 1 shows a simple design that does not conform to the open-closed principle.Both the Client and Server classes are concrete. There is no guarantee that the member functions of the Server class are virtual. The Client class uses the Server class.If we wish for a Client object to use a different server object, then the Client class must be changed to name the new server class.
  13. Figure 2 shows the corresponding design that conforms to the open-closed principle.In this case, the AbstractServer class is an abstract class with pure-virtual member functions. the Client class uses this abstraction. However objects of the Client class will be using objects of the derivative Server class. If we want Client objects to use a different server class, then a new derivative of the AbstractServer class can be created. The Client class can remain unchanged.
  14. The importance of this principle becomes obvious when you consider the consequences of violating it. If there is a function which does not conform to the LSP, then that function uses a pointer or reference to a base class, but must know about all the derivatives of that base class. Such a function violates the Open-Closed principle because it must be modified whenever a new derivative of the base class is created.There is a strong relationship between the LSP and the concept of Design by Contract as expounded by Bertrand Meyer2.
  15. *Uml compatible.