Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
‘Cloud Ready’ Design through
Application Software Infrastructure
Florin Coros
About me
Co-Founder
@florincoros
Partner & Co-Founder
blog.iquarc.com/florin
Outdated Enterprise Software
3
Enterprise Software
Old Technologies
Costly to maintain
and update
Re-Implement on a Modern Architecture
Legacy System
• High costs to update
• Shetty UX
• Outdated functionalities
• Not sc...
On-Premise or Cloud or Both?
5
Build and Operate for On-Premises
Deployable in Azure
Enable a gradual migration into the Cloud
Cloud migration does not r...
Source code dependencies can only
point inwards
• Nothing in an inner circle can know anything
at all about something in a...
What did we already do?
8
Design
Envision
solutions
Setup rules
and practices
Managing
Complexity
Quality
Change
Separatio...
Importance of Managing Complexity
when projects do fail for reasons that are primarily
technical, the reason is often
unco...
Importance of Managing Complexity
Scalability
Availability
Multitenancy
Security
Authorization
App Infrastructure Enforces the Architecture
Application Infrastructure
The Application Foundation
Wrongly Built House
Different Solutions to the Same Problem
Which one is the ONE?
App Infrastructure – Primary TOOL to
Control Complexity and Size
How to do it?
Invest in Design and App. Infrastructure
Enforce consistency
Enforce structure
Focus on Modularity, Abstract...
Good Design vs Bad Design
http://martinfowler.com/bliki/DesignStaminaHypothesis.html
iQuarc AppBoot Library
Lightweight library that handles the startup of an application
Implements
Separation of Constructio...
iQuarc AppBoot: Modularity
<<Interface>>
IModule
+ Initialize()
Application
+ Initialize()
*
+ Modules[]
AppModule1
+ Init...
Application Hosted in Any .NET Process
• The application is not aware of the process it is
hosted in
• The application is ...
App Boot: Dependency Injection
<<Attribute>>
ServiceAttribute
+ ServiceAttribute()
+ServiceAttribute(Type contract)
+ Serv...
public IEnumerable<Policy> GetPolicyFromMutation(Mutation mut)
{
var policies = repository.GetEntities<PolicyImage>()
.Whe...
Isolate from external libraries
<<static class>>
Log
+LogError()
+LogWarining()
Exception Wrappers Decorators
<<Interface>...
Application Infrastructure – Shaping to Context
.NET Framework
WF
WCF
WEB API
ASP.NET
Entity
Framework
. . . Unity
NServic...
When to do it?
cumulativefunctionality
time
completion
construction
ready
design payoff
When to do it?cumulativefunctionality
time
completion
construction
ready
design payoff
time
Arc
Arc
Infra
FunctionalityInf...
Thank You!
Florin Coros
Partner and Co-founder, iQuarc
florin.coros@iquarc.com
blog.iquarc.com/florin
@florincoros
Upcoming SlideShare
Loading in …5
×

Cloud Ready Design through Application Software Infrastructure

518 views

Published on

Badly designed code is one of the highest price we pay as an industry. In many cases the cost of adding or changing features increases with the time we advance into the project. The bigger the project gets, the more complex it gets and the more costly it is to work on it, if it lacks structure. If you need to migrate it, you need to rewrite it all.

In this session I will show from real world projects experience how to keep your team efficient changing the code when you need to move into the Cloud, with what I call the Application Software Infrastructure. It assures code quality through structure rather than relying on discipline only. It documents the architecture into code and bridges this way the architectural diagrams and the code structures.

Published in: Software
  • Be the first to comment

Cloud Ready Design through Application Software Infrastructure

  1. 1. ‘Cloud Ready’ Design through Application Software Infrastructure Florin Coros
  2. 2. About me Co-Founder @florincoros Partner & Co-Founder blog.iquarc.com/florin
  3. 3. Outdated Enterprise Software 3 Enterprise Software Old Technologies Costly to maintain and update
  4. 4. Re-Implement on a Modern Architecture Legacy System • High costs to update • Shetty UX • Outdated functionalities • Not scalable, not reliable Modern System • Accessible everywhere • Actual technologies • Good maintainability 4
  5. 5. On-Premise or Cloud or Both? 5
  6. 6. Build and Operate for On-Premises Deployable in Azure Enable a gradual migration into the Cloud Cloud migration does not require a rewrite or reengineering First phase use IaaS Second phase use PaaS Quality Isolation Separation Build, Test and Deploy for On-Premises only Large and Complex System Deployable on Azure Use PaaS 6
  7. 7. Source code dependencies can only point inwards • Nothing in an inner circle can know anything at all about something in an outer circle • Abstractions and application concepts are independent of frameworks • frameworks are used as tools, not to cram the system into their limiting constraints 7 http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html Separate the core of the app from the frameworks and the mechanisms
  8. 8. What did we already do? 8 Design Envision solutions Setup rules and practices Managing Complexity Quality Change Separations Abstraction & Encapsulation Explain & Validate Diagrams Prototypes
  9. 9. Importance of Managing Complexity when projects do fail for reasons that are primarily technical, the reason is often uncontrolled complexity 9
  10. 10. Importance of Managing Complexity Scalability Availability Multitenancy Security Authorization
  11. 11. App Infrastructure Enforces the Architecture
  12. 12. Application Infrastructure
  13. 13. The Application Foundation
  14. 14. Wrongly Built House
  15. 15. Different Solutions to the Same Problem
  16. 16. Which one is the ONE?
  17. 17. App Infrastructure – Primary TOOL to Control Complexity and Size
  18. 18. How to do it? Invest in Design and App. Infrastructure Enforce consistency Enforce structure Focus on Modularity, Abstraction, Encapsulation Independent Modules Hide the frameworks Manage Dependencies Dependency Injection Discoverability 18
  19. 19. Good Design vs Bad Design http://martinfowler.com/bliki/DesignStaminaHypothesis.html
  20. 20. iQuarc AppBoot Library Lightweight library that handles the startup of an application Implements Separation of Construction and Configuration from Use Modularity Defines and abstracts a modular application Makes the application independent of the host process Dependencies Management Dependency Injection Enforces consistency in declaring dependencies Encourages good practices Encourages separation between data and behavior 20
  21. 21. iQuarc AppBoot: Modularity <<Interface>> IModule + Initialize() Application + Initialize() * + Modules[] AppModule1 + Initialize() AppModule2 + Initialize() • Modular Application Support • Application modules do not depend on Frameworks • Application can be hosted in any .NET process iQuarcAppBoot
  22. 22. Application Hosted in Any .NET Process • The application is not aware of the process it is hosted in • The application is isolated from framework specifics • The host process is not aware of what modules it hosts • The host process is isolated from application logic • Benefits: • Flexible deployments o same host can load different modules depending on configuration o Flexibility in development and testing • Framework setup is separated from application setup 22 <<Attribute>> ServiceAttribute + ServiceAttribute() +ServiceAttribute(Type contract) + ServiceAttribute(Type t, Lifetime lifetime) Bootstrapper +Bootstrapper(Assembly[] assemblies) +Run() Application + Initialize() iQuarcAppBoot
  23. 23. App Boot: Dependency Injection <<Attribute>> ServiceAttribute + ServiceAttribute() +ServiceAttribute(Type contract) + ServiceAttribute(Type t, Lifetime lifetime) Bootstrapper +Bootstrapper(Assembly[] assemblies) +Run() • Makes Programming Against Interfaces the de facto programming model • Abstracts and hides the Dependency Container • Provides a maintainable mechanism for declaring services implementation • Dictates how Dependency Injection is used iQuarcAppBoot
  24. 24. public IEnumerable<Policy> GetPolicyFromMutation(Mutation mut) { var policies = repository.GetEntities<PolicyImage>() .Where(image => image.MutationId==mut.Id) .Select(image => new Policy { Id = image.PolicyId, ValidAt = image.Mutation.Date //.. }).ToList(); // do other calculations / grouping on data return policies; } public void CalculateChanges(ChangeEvent change) { using (var uof = repository.CreateUnitOfWork()) { var policies = uof.GetEntities<PolicyImage>() .Where(i => i.Status == ImageStatus.Calculating && . i.EvendId == change.Id); foreach (PolicyImage image in policies) { image.Ammunt = GetAmmountFor(image, change); } uof.SaveChanges(); } } Encapsulate Data Access Concerns <<Interface>> IRepository +GetEntities<T>() : IQueriable<T> <<Interface>> IUnitOfWork +SaveChanges() Database Repository UnitOfWork <<Stereotype>> <<DTO>> Plan <<DTO>> Contract +CreateUnitOfWork() +GetEntities<T>():IQueriable<T> iQuarcDataAccess
  25. 25. Isolate from external libraries <<static class>> Log +LogError() +LogWarining() Exception Wrappers Decorators <<Interface>> API Interfaces 25
  26. 26. Application Infrastructure – Shaping to Context .NET Framework WF WCF WEB API ASP.NET Entity Framework . . . Unity NServiceBus Log4Net . . . Application Infrastructure Application Functionalities
  27. 27. When to do it? cumulativefunctionality time completion construction ready design payoff
  28. 28. When to do it?cumulativefunctionality time completion construction ready design payoff time Arc Arc Infra FunctionalityInfra FunctionalityInfra Functionality Functionality Functionality Functionality RepositoryImpl + GetEntities<T>() : IQueriable() IRepository IUnitOfWork + SaveChanges() IModule <<Attribute>> ServiceAttribute iQuarc Functionality
  29. 29. Thank You! Florin Coros Partner and Co-founder, iQuarc florin.coros@iquarc.com blog.iquarc.com/florin @florincoros

×