SlideShare a Scribd company logo
Orthogonal ArchitectureA pragmatic approachSergey ShishkinInterComponentWare AGsergey.shishkin@icw.dehttp://shishkin.org
This talk is supposed to be focused on...
This talk is not supposed to discuss in detail...
What is architecture?
Architecture Open Space 2009http://picasaweb.google.com/lcorneliussen/ArchitectureNETOpenSpace2009#5347109274901628498
The decisions that are hard to change—Martin Fowler, PoEA
Reversibility
The Last Responsible Moment
S.O.L.I.D.
Open/Closed Principle
Presentation Patterns
The ViewpublicclassEditPatientView:UserControl, IEditPatientView{  privateEditPatientPresenter presenter;   publicEditPatientView()  {    PatientName = newTextBoxAdapter(patientNameTextBox);  }   publicIViewElementPatientName { get; set; }   privatevoidOnSaveClicked(object sender, EventArgs e)  {    presenter.SavePatient();  }}
The PresenterpublicclassEditPatientPresenter : Presenter{  publicvoidSavePatient()  {    if (Validate(view.PatientName.IsRequired("Name is required")))    {      var name = view.PatientName.Text;      ...    }  }  ...}
The TestpublicclassWhen_patient_name_is_missing : InstanceContextSpecification<EditPatientPresenter>{  protectedoverridevoid Because()  {    The<IEditPatientView>().PatientName.Text = "";  }   [Observation]  publicvoidShould_display_error_message()  {    The<IEditPatientView>().PatientName.ErrorMessage      .ShouldNotBeNull();  }}
Dependency Injection Container
Constructor InjectionI’m not going to call this constructor in my codepublicclassEditPatientPresenter{  privateIEditPatientView view;  privateIMessageBus bus;   publicEditPatientPresenter(IEditPatientView view, IMessageBus bus)  {    this.view = view;    this.bus = bus;  }}
Message Bus / Event Broker
Message BuspublicclassEditPatientPresenter{  ...   publicvoidSavePatient()  {    var command = newEditPatientCommand { Patient = view.Patient };    bus.Send(command);  }}
Service LayerpublicclassPatientHandler : IHandler<EditPatientCommand>{  publicvoid Handle(EditPatientCommand message)  {    using (vartx = newTransactionScope())    {      var patient = repository.Get(message.PatientId);patient.ChangeName(message.PatientName);repository.Save(patient);tx.Complete();    }  }}
Data Access Layer / O/R Mapper
QueryingpublicstaticclassPatientRepositoryExtensions{  publicstaticICollection<Patient> FindByName(    thisIRepository<Patient> repository,    stringsearchText)  {    returnrepository.AllEntities      .Where(p => p.Name.Contains(searchText))      .ToList();  }}var collection = repository.FindByName(“Smith”);
Aspect-Oriented Programming
AutomatedTestsContinuousIntegrationRefactoring
ResourcesSOLIDhttp://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOodPresentation Patterns:http://www.jeremydmiller.com/ppatterns/Clean Code Developerhttp://clean-code-developer.deBooks:Michael Feathers, “Working effectively with legacy code”Robert C. Martin, “Clean code” and “Agile principles, patterns and practices in C#”Martin Fowler, “Patterns of enterprise architecture”
Q&ASergey Shishkinsergey.shishkin@icw.dehttp://shishkin.org
Orthogonal Architecture

More Related Content

PPTX
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
PDF
Modern Software Architecture Styles and Patterns
PPTX
Pivotal Cloud Foundry: Cloud Native Architecture
PPTX
Android Architecture Components
PDF
Javascript basic course
PPTX
DeadLock Preventer
PDF
Popup view on Mortar
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
Modern Software Architecture Styles and Patterns
Pivotal Cloud Foundry: Cloud Native Architecture
Android Architecture Components
Javascript basic course
DeadLock Preventer
Popup view on Mortar

Similar to Orthogonal Architecture (20)

PPTX
iPOJO 2.x - a tale about dynamism
PPTX
Design pattern proxy介紹 20130805
PPTX
Design pattern proxy介紹 20130805
PDF
Knockout mvvm-m4-slides
PPTX
Clean Code - Design Patterns and Best Practices at Silicon Valley Code Camp
PDF
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...
PPTX
Avoiding and dealing with conflicting updates in Oak
PPTX
Building non-blocking JavaFX 8 applications with JacpFX [CON1823]
PPTX
Developing pedagogically sound ples
PPTX
Interact your wearable and an iot device
PPTX
KMS TechCon 2014 - Interesting in JavaScript
PPTX
Design Patterns - Part 1 of 2
PPT
Eclipse Training - Standard Extension Points and APIs
PPT
09 Application Design
PPTX
Solid Principles
PPT
Eclipse Summit Europe '10 - Test UI Aspects of Plug-ins
PPTX
PPTX
PDF
softshake 2014 - Java EE
PPTX
Easier smart home development with simulators and rule engines
iPOJO 2.x - a tale about dynamism
Design pattern proxy介紹 20130805
Design pattern proxy介紹 20130805
Knockout mvvm-m4-slides
Clean Code - Design Patterns and Best Practices at Silicon Valley Code Camp
Dicoding Developer Coaching #30: Android | Mengenal Macam-Macam Software Desi...
Avoiding and dealing with conflicting updates in Oak
Building non-blocking JavaFX 8 applications with JacpFX [CON1823]
Developing pedagogically sound ples
Interact your wearable and an iot device
KMS TechCon 2014 - Interesting in JavaScript
Design Patterns - Part 1 of 2
Eclipse Training - Standard Extension Points and APIs
09 Application Design
Solid Principles
Eclipse Summit Europe '10 - Test UI Aspects of Plug-ins
softshake 2014 - Java EE
Easier smart home development with simulators and rule engines
Ad

More from Sergey Shishkin (8)

PDF
Scaling Engineering Organizations with Patterns
PDF
Hitchhiker's Guide to Functional Programming
PDF
Hitchhiker's Guide to Functional Programming
PPTX
NOSQL - not only sql
PPTX
REST - You're Doing It Wrong
PPTX
Specification by Example
PDF
NOSQL in the Cloud
PPT
Asynchronous Messaging @DNUG Cologne, 07.04.2009
Scaling Engineering Organizations with Patterns
Hitchhiker's Guide to Functional Programming
Hitchhiker's Guide to Functional Programming
NOSQL - not only sql
REST - You're Doing It Wrong
Specification by Example
NOSQL in the Cloud
Asynchronous Messaging @DNUG Cologne, 07.04.2009
Ad

Recently uploaded (20)

PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
A novel scalable deep ensemble learning framework for big data classification...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
WOOl fibre morphology and structure.pdf for textiles
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Web App vs Mobile App What Should You Build First.pdf
PDF
Enhancing emotion recognition model for a student engagement use case through...
PDF
project resource management chapter-09.pdf
PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PDF
Hybrid model detection and classification of lung cancer
PDF
Mushroom cultivation and it's methods.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
NewMind AI Weekly Chronicles - August'25-Week II
Group 1 Presentation -Planning and Decision Making .pptx
A novel scalable deep ensemble learning framework for big data classification...
Digital-Transformation-Roadmap-for-Companies.pptx
WOOl fibre morphology and structure.pdf for textiles
A comparative study of natural language inference in Swahili using monolingua...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Web App vs Mobile App What Should You Build First.pdf
Enhancing emotion recognition model for a student engagement use case through...
project resource management chapter-09.pdf
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
Hybrid model detection and classification of lung cancer
Mushroom cultivation and it's methods.pdf
Programs and apps: productivity, graphics, security and other tools
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
Univ-Connecticut-ChatGPT-Presentaion.pdf
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
Unlocking AI with Model Context Protocol (MCP)
cloud_computing_Infrastucture_as_cloud_p
MIND Revenue Release Quarter 2 2025 Press Release
NewMind AI Weekly Chronicles - August'25-Week II

Orthogonal Architecture

Editor's Notes

  • #2: PROVIDE YOU SESSION CODE AND NAME AS IT WAS DEFINED BY AGENDA OWNERS.WELCOME ATTENDEES. INTRODUCE YOURSELF AND YOUR SESSION.
  • #20: Aggregate root (as in DDD)
  • #23: Logging, exception handling, transactions
  • #24: PROVIDE 5 MIN BEFORE SESSION ENDS FOR Q&A.