SlideShare a Scribd company logo
Pragmatic Architecture in .NET
Cory House
@housecor | bitnative.com
The problem.
X is good It Depends
Three Simple Goals:
1. Cost vs benefit
2. Contrast extremes
3. Review our options in .NET
Why?
Save money.
Save effort.
Save time.
Why Not?
To improve my resume’.
To challenge myself.
To experiment.
Assumptions
1. Web based
2. RDBMS
3. Enterprise line of business app
Astronaut Assessment
We must use <shiny new technology> for this!
Reinvent the wheel
100% test coverage
Never ORM
Always code to an interface
Use all the patterns
Resume Driven Development
Consider Simplicity
1. Do simplest thing that could possibly work
2. Lean / Agile principles
3. YAGNI
4. 80/20 Rule
Consider Complexity
• Unit Testing
• Coding to an interface
• SOA
• Rich Domain Model
• Layered N-teir architecture
Which is better?
Tightly Coupled
No Tests
No Layers
No API
Coded to Interfaces
100% Test coverage
Rich Domain Model
Service Oriented
It depends.
What if I said…
• $250k over budget
• Customers hated it, or worse, ignored it
• Idea didn’t pan out
• Project funding dried up
• 1 month late = worthless
Work expands to fill available time.
Parkinson’s Law
Agile Estimation: Flex one.
Quality
Date Cost
Features*
Architecture
Reuse
Performance
Security
Testing
Scalability
Documentation
* Fat chance
Quality is reduced to meet deadlines.
Software quality is directly related to deadline sanity.
Deadline and manpower are often a constant.
Thus, software quality is directly related to deadline
sanity.
Quality software requires realistic deadlines.
Q: Is debt bad?
Later
Now
A: Is the deadline hard?
Hard vs Soft Deadlines
Trade show
Published advertising
X-team dependencies
1st to market or dead
Network effects
Single loud customer
WAG
Salesman misspoke
MS Project said so
Perfect architecture? Who cares.
Facebook
Twitter
StackOverflow
The problem is getting people to care.
We’re paid for solutions, not code.
Unit Testing
– Insurance
– Investment in the future (ease of maint)
– Potential long-term cost in complexity/manpower
Enough Theory…
Let’s get geeky.
Presentation
Service
Domain
Data
Web Forms vs MVC
JavaScript, CSS, jQuery, Knockout, Angular, IoC
Web API, WCF, ASMX, ServiceStack or POCOs
C#, VB.Net
Entity Framework, nHibernate, LLBLGen, Dapper, ADO.Net
UI
API
Business Logic
(BLL)
Data Access
(DAL)
Presentation
Service
Domain
Persistence
Layers vs Tiers
Logical Physical
Tiers
Scalability
Security
Abstract complexity
Minimize dependences
Reusable
Performance cost
Increased complexity
Layers
Separate concerns
Aid understanding
Abstract complexity
Support testing
Minimize dependences
Standardize
Enable reuse
Leak
More code
Small app?
methods = layers.
ORM honors DRY
1. Database
2. Class property
3. Select statements
4. Insert statements
5. Update statements
6. Delete statements
7. SQL marshalling code
1. Database
2. Class property
3. .hbm.xml file
When ORM?
Go for it:
• DRY = faster development
• Speedier changes
• RDBMS agnostic
• Type safe interface
• Avoid writing SQL
• SQL Injection protection
• Security, performance, ca
ching, mapping OOTB
Pass:
• Lose control over SQL
• DBAs lose control
• Security concerns
• Performance penalty
SOA
Heterogeneous systems
Autonomous
Reusable
Formal
Performance hit
Risky changes
Both sides must test
Architectural LevelsL1
Simplest
thing
L2
Somewhere
in between
L3
Every tool
in the shed
Level 1
Presentation
Domain &
Persistence
Web Forms
Active Record Pattern
Linq-2-SQL, Subsonic, Castle ActiveRecord
Active Record
Presentation
Domain
Data
Active Record
Customer Address Purchase
Customer Address Purchase
DB Tables
Classes
One instance = One row
Active Record
Simple & obvious
Speedy dev and changes
Compliments CRUD apps
Good for simple domain
No OR mismatch
Honors YAGNI
Rigid: Domain model = DB
Leads to God object
Low cohesion: Breaks SRP
Hard to test
Tricky transactions
Repository pattern = pain
Level 3
Presentation
Service
Domain
Persistence
ASP.Net MVC, Knockout/Angular
Repository Pattern
nHibernate, EF POCOs, Dapper
DDD with POCOs
WCF, ServiceStack
Domain Model
It’s all about the objects.
Domain Model
Customer Address Purchase
Customer
with list of addresses
Purchase
DB Tables
Classes
Note OR Mismatch
Business Layer Patterns: Domain Model
Complex business domain
Leverage design patterns
Speak business language
Abstracts ugly DB schema
Large team
Reusable
Learning curve
Time-consuming design
Long-term commitment
DB mapping overhead
Level 3 Summary
Testable
Manage object lifecycle
AOP via dynamic proxies
Swappable UI or DAL
Speaks in business language
Leverage design patterns
Slower initial dev
Larger initial dev cost
Learning curve
More places to change
Senior developers
Bottom Line: L1 vs L3
Points to Add a Feature
Level 1
1. UI
2. DB
3. Implement BL (in AR class)
4. Regen DAL
Level 3
1. UI
2. DB
3. Implement BL in POCO
4. Update/create interface
5. Update IoC bootstrap
6. Update DB mapping
7. Update/Add service call
8. Add/update tests
Choice by Complexity
Level 3
Level 2Level 1
Effort to
enhance
Application Complexity
Architectural Levels
Level 1 Level 2 Level 3
Centralized Data Access ?
Mockable Data Access ?
Central Lifetime Management ?
Separation of Concerns ?
Domain Driven Design ?
Unit Testing Friendly ?
Concurrent Development ?
Service Oriented ?
SOLID ?
SPA friendly ?
Simplest thing/YAGNI
Architecture Selection
MVP
Junior team
Small team
Simple Domain
Tight timeline
Throwaway
No security concerns
Little chance for reuse
Flagship product
Senior Team
Large Team
Complex domain
Flexible timeline
Long-term
Security matters
Other apps could reuse
Reading
Bottom Line
1. Consider the simplest thing that could possibly
work.
2. Context matters. X isn’t good or bad.
3. Best practices have a benefit and cost.
Pragmatic Architecture in .NET
Ad

Recommended

Pragmatic Architecture for Agile Teams - GeeCON 2014
Pragmatic Architecture for Agile Teams - GeeCON 2014
Janne Sinivirta
 
Code Review Matters and Manners
Code Review Matters and Manners
Trisha Gee
 
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Joseph Yoder
 
Level Up Your Automated Tests
Level Up Your Automated Tests
Trisha Gee
 
Level Up Your Automated Tests
Level Up Your Automated Tests
Trisha Gee
 
Clean Code and Common Engineering Practices
Clean Code and Common Engineering Practices
Ruth Sperer
 
Six Steps to Conversation Driven Development
Six Steps to Conversation Driven Development
Rasa Technologies
 
Scrum + bdd + ddd
Scrum + bdd + ddd
Helder De Oliveira
 
Is your code SOLID enough?
Is your code SOLID enough?
SARCCOM
 
Is Groovy better for testing than Java?
Is Groovy better for testing than Java?
Trisha Gee
 
Tips sukses berkarir sebagai developer dan programmer 2021
Tips sukses berkarir sebagai developer dan programmer 2021
DicodingEvent
 
Software Development Essential Skills
Software Development Essential Skills
John Choi
 
The five expertise of a software architect
The five expertise of a software architect
Lior Bar-On
 
Test Driven Development
Test Driven Development
Samnang Chhun
 
Deploy your Rasa Chatbots like a Boss with DevOps | Rasa Summit 2021
Deploy your Rasa Chatbots like a Boss with DevOps | Rasa Summit 2021
Rasa Technologies
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
Andy Maleh
 
Design Smells
Design Smells
Giorgio Vespucci
 
Mobile engineering at GOJEK Scale
Mobile engineering at GOJEK Scale
raditya gumay
 
Good Code / Bad Code
Good Code / Bad Code
Kelly Harrop
 
How to sustain a tool building community-driven effort
How to sustain a tool building community-driven effort
Jordi Cabot
 
Low-code vs Model-Driven Engineering
Low-code vs Model-Driven Engineering
Jordi Cabot
 
(A)TDD The what, why and how
(A)TDD The what, why and how
Alexander van Trijffel
 
Software quality
Software quality
5minpause
 
Software development fundamentals
Software development fundamentals
Alfred Jett Grandeza
 
A CQRS Journey
A CQRS Journey
Chrysovalantis Koutsoumpos
 
Using Rasa to Power an Immersive Multimedia Conversational Experience | Rasa ...
Using Rasa to Power an Immersive Multimedia Conversational Experience | Rasa ...
Rasa Technologies
 
How to become a software developer
How to become a software developer
Eyob Lube
 
Clean code and Coding Standards
Clean code and Coding Standards
Mahesh Salaria
 
Pragmatic Architecture
Pragmatic Architecture
guestedb3ee
 
Pragmatic Architecture, Today (v2)
Pragmatic Architecture, Today (v2)
Bart Blommaerts
 

More Related Content

What's hot (20)

Is your code SOLID enough?
Is your code SOLID enough?
SARCCOM
 
Is Groovy better for testing than Java?
Is Groovy better for testing than Java?
Trisha Gee
 
Tips sukses berkarir sebagai developer dan programmer 2021
Tips sukses berkarir sebagai developer dan programmer 2021
DicodingEvent
 
Software Development Essential Skills
Software Development Essential Skills
John Choi
 
The five expertise of a software architect
The five expertise of a software architect
Lior Bar-On
 
Test Driven Development
Test Driven Development
Samnang Chhun
 
Deploy your Rasa Chatbots like a Boss with DevOps | Rasa Summit 2021
Deploy your Rasa Chatbots like a Boss with DevOps | Rasa Summit 2021
Rasa Technologies
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
Andy Maleh
 
Design Smells
Design Smells
Giorgio Vespucci
 
Mobile engineering at GOJEK Scale
Mobile engineering at GOJEK Scale
raditya gumay
 
Good Code / Bad Code
Good Code / Bad Code
Kelly Harrop
 
How to sustain a tool building community-driven effort
How to sustain a tool building community-driven effort
Jordi Cabot
 
Low-code vs Model-Driven Engineering
Low-code vs Model-Driven Engineering
Jordi Cabot
 
(A)TDD The what, why and how
(A)TDD The what, why and how
Alexander van Trijffel
 
Software quality
Software quality
5minpause
 
Software development fundamentals
Software development fundamentals
Alfred Jett Grandeza
 
A CQRS Journey
A CQRS Journey
Chrysovalantis Koutsoumpos
 
Using Rasa to Power an Immersive Multimedia Conversational Experience | Rasa ...
Using Rasa to Power an Immersive Multimedia Conversational Experience | Rasa ...
Rasa Technologies
 
How to become a software developer
How to become a software developer
Eyob Lube
 
Clean code and Coding Standards
Clean code and Coding Standards
Mahesh Salaria
 
Is your code SOLID enough?
Is your code SOLID enough?
SARCCOM
 
Is Groovy better for testing than Java?
Is Groovy better for testing than Java?
Trisha Gee
 
Tips sukses berkarir sebagai developer dan programmer 2021
Tips sukses berkarir sebagai developer dan programmer 2021
DicodingEvent
 
Software Development Essential Skills
Software Development Essential Skills
John Choi
 
The five expertise of a software architect
The five expertise of a software architect
Lior Bar-On
 
Test Driven Development
Test Driven Development
Samnang Chhun
 
Deploy your Rasa Chatbots like a Boss with DevOps | Rasa Summit 2021
Deploy your Rasa Chatbots like a Boss with DevOps | Rasa Summit 2021
Rasa Technologies
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
Andy Maleh
 
Mobile engineering at GOJEK Scale
Mobile engineering at GOJEK Scale
raditya gumay
 
Good Code / Bad Code
Good Code / Bad Code
Kelly Harrop
 
How to sustain a tool building community-driven effort
How to sustain a tool building community-driven effort
Jordi Cabot
 
Low-code vs Model-Driven Engineering
Low-code vs Model-Driven Engineering
Jordi Cabot
 
Software quality
Software quality
5minpause
 
Using Rasa to Power an Immersive Multimedia Conversational Experience | Rasa ...
Using Rasa to Power an Immersive Multimedia Conversational Experience | Rasa ...
Rasa Technologies
 
How to become a software developer
How to become a software developer
Eyob Lube
 
Clean code and Coding Standards
Clean code and Coding Standards
Mahesh Salaria
 

Viewers also liked (7)

Pragmatic Architecture
Pragmatic Architecture
guestedb3ee
 
Pragmatic Architecture, Today (v2)
Pragmatic Architecture, Today (v2)
Bart Blommaerts
 
Modelo de expediente para arquitectura
Modelo de expediente para arquitectura
Danny Guevara
 
ea2009 Enterprise Architecture keynote Final
ea2009 Enterprise Architecture keynote Final
Marc Caltabiano
 
Teoria funcional
Teoria funcional
enrique miranda
 
Metodos de diseño arquitectonico
Metodos de diseño arquitectonico
Vianey Isabel Mujica Campos
 
Proceso metodológico del diseño arquitectónico
Proceso metodológico del diseño arquitectónico
Jorge Granados Valencia
 
Pragmatic Architecture
Pragmatic Architecture
guestedb3ee
 
Pragmatic Architecture, Today (v2)
Pragmatic Architecture, Today (v2)
Bart Blommaerts
 
Modelo de expediente para arquitectura
Modelo de expediente para arquitectura
Danny Guevara
 
ea2009 Enterprise Architecture keynote Final
ea2009 Enterprise Architecture keynote Final
Marc Caltabiano
 
Proceso metodológico del diseño arquitectónico
Proceso metodológico del diseño arquitectónico
Jorge Granados Valencia
 
Ad

Similar to Pragmatic Architecture in .NET (20)

Elements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Enea Gabriel
 
Day1
Day1
madamewoolf
 
2010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week1
Wolfram Arnold
 
J2EE Performance And Scalability Bp
J2EE Performance And Scalability Bp
Chris Adkin
 
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
NCCOMMS
 
Usemon; Building The Big Brother Of The Java Virtual Machinve
Usemon; Building The Big Brother Of The Java Virtual Machinve
Paul René Jørgensen
 
Application Architecture April 2014
Application Architecture April 2014
Lars-Erik Kindblad
 
Asp.Net_ Developer Resume Remotely
Asp.Net_ Developer Resume Remotely
SumitKumar2504
 
Latest trends in information technology
Latest trends in information technology
Eldos Kuriakose
 
MongoDB Evenings Toronto - Monolithic to Microservices with MongoDB
MongoDB Evenings Toronto - Monolithic to Microservices with MongoDB
MongoDB
 
Linq To The Enterprise
Linq To The Enterprise
Daniel Egan
 
IT Modernization For Process Modernization
IT Modernization For Process Modernization
Dheeraj Remella
 
Whats New In 2010 (Msdn & Visual Studio)
Whats New In 2010 (Msdn & Visual Studio)
Steve Lange
 
CV_SwapnilGupta
CV_SwapnilGupta
Swapnil Gupta
 
RailswayCon 2010 - Command Your Domain
RailswayCon 2010 - Command Your Domain
Lourens Naudé
 
The Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs Public
David Solivan
 
Syllabus for Technical courses
Syllabus for Technical courses
Montek1Learning
 
Shaloo Verma
Shaloo Verma
Shaloo Verma
 
Kasi Resume
Kasi Resume
kasi reddy
 
Onion Architecture with S#arp
Onion Architecture with S#arp
Gary Pedretti
 
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Enea Gabriel
 
2010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week1
Wolfram Arnold
 
J2EE Performance And Scalability Bp
J2EE Performance And Scalability Bp
Chris Adkin
 
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
NCCOMMS
 
Usemon; Building The Big Brother Of The Java Virtual Machinve
Usemon; Building The Big Brother Of The Java Virtual Machinve
Paul René Jørgensen
 
Application Architecture April 2014
Application Architecture April 2014
Lars-Erik Kindblad
 
Asp.Net_ Developer Resume Remotely
Asp.Net_ Developer Resume Remotely
SumitKumar2504
 
Latest trends in information technology
Latest trends in information technology
Eldos Kuriakose
 
MongoDB Evenings Toronto - Monolithic to Microservices with MongoDB
MongoDB Evenings Toronto - Monolithic to Microservices with MongoDB
MongoDB
 
Linq To The Enterprise
Linq To The Enterprise
Daniel Egan
 
IT Modernization For Process Modernization
IT Modernization For Process Modernization
Dheeraj Remella
 
Whats New In 2010 (Msdn & Visual Studio)
Whats New In 2010 (Msdn & Visual Studio)
Steve Lange
 
RailswayCon 2010 - Command Your Domain
RailswayCon 2010 - Command Your Domain
Lourens Naudé
 
The Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs Public
David Solivan
 
Syllabus for Technical courses
Syllabus for Technical courses
Montek1Learning
 
Onion Architecture with S#arp
Onion Architecture with S#arp
Gary Pedretti
 
Ad

Recently uploaded (20)

FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
OpenPOWER Foundation & Open-Source Core Innovations
OpenPOWER Foundation & Open-Source Core Innovations
IBM
 
Creating Inclusive Digital Learning with AI: A Smarter, Fairer Future
Creating Inclusive Digital Learning with AI: A Smarter, Fairer Future
Impelsys Inc.
 
Improving Data Integrity: Synchronization between EAM and ArcGIS Utility Netw...
Improving Data Integrity: Synchronization between EAM and ArcGIS Utility Netw...
Safe Software
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
AI vs Human Writing: Can You Tell the Difference?
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
AI VIDEO MAGAZINE - June 2025 - r/aivideo
AI VIDEO MAGAZINE - June 2025 - r/aivideo
1pcity Studios, Inc
 
9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
The Future of Technology: 2025-2125 by Saikat Basu.pdf
The Future of Technology: 2025-2125 by Saikat Basu.pdf
Saikat Basu
 
From Manual to Auto Searching- FME in the Driver's Seat
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
 
OWASP Barcelona 2025 Threat Model Library
OWASP Barcelona 2025 Threat Model Library
PetraVukmirovic
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
revolcs10
 
MuleSoft for AgentForce : Topic Center and API Catalog
MuleSoft for AgentForce : Topic Center and API Catalog
shyamraj55
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
OpenPOWER Foundation & Open-Source Core Innovations
OpenPOWER Foundation & Open-Source Core Innovations
IBM
 
Creating Inclusive Digital Learning with AI: A Smarter, Fairer Future
Creating Inclusive Digital Learning with AI: A Smarter, Fairer Future
Impelsys Inc.
 
Improving Data Integrity: Synchronization between EAM and ArcGIS Utility Netw...
Improving Data Integrity: Synchronization between EAM and ArcGIS Utility Netw...
Safe Software
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
AI vs Human Writing: Can You Tell the Difference?
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
AI VIDEO MAGAZINE - June 2025 - r/aivideo
AI VIDEO MAGAZINE - June 2025 - r/aivideo
1pcity Studios, Inc
 
9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
The Future of Technology: 2025-2125 by Saikat Basu.pdf
The Future of Technology: 2025-2125 by Saikat Basu.pdf
Saikat Basu
 
From Manual to Auto Searching- FME in the Driver's Seat
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
 
OWASP Barcelona 2025 Threat Model Library
OWASP Barcelona 2025 Threat Model Library
PetraVukmirovic
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
revolcs10
 
MuleSoft for AgentForce : Topic Center and API Catalog
MuleSoft for AgentForce : Topic Center and API Catalog
shyamraj55
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 

Pragmatic Architecture in .NET

Editor's Notes

  • #4: Unit testingDomain Driven DesignSOAEvery abstraction has a cost. Know what you&apos;re getting and giving.
  • #8: not games, embedded software)
  • #10: http://www.xprogramming.com/Practices/PracSimplest.htmlGet 80 of the benefit from 20% of the features.
  • #14: 6 months: Annual trade show, Ad campaign,
  • #16: Quality: Features, Scope, Architecture, Reuse, Performance, Security
  • #17: Note: Rarely is scope decreased, deadlines moved, or manpower added.
  • #18: Often deadlines are arbitrary – you estimate so executives know about when something will be released. Real deadline
  • #20: Facebook uses PHPTwitterStackOverflow - used Linq-2-SQL (Active record pattern). Now #85 globallyThe problem is getting people to care
  • #26: Peformance Cost: Translation. Often offset by performance tuning, via encapsulation (e.g. caching queries)
  • #27: Reusable: HTTP, Telnet, SSH use TCP/IPLeaky: Update all layers to add UI fieldPerformance Cost: Translation. Often offset by performance tuning, via encapsulation (e.g. caching queries)
  • #28: Escalate to separate classes and modules as complexity justifies
  • #29: On the other hand, you know how it works. You can debug it. It&apos;s all right there in your own persistence layer, not buried in the bowels of a 3rd party tool.
  • #30: Note under pass - Sprocs can be used to please DBAs, but lose are required by DBAs (mitigates benefits)
  • #36: http://www.martinfowler.com/eaaCatalog/activeRecord.htmlhttp://www.mehdi-khalili.com/orm-anti-patterns-part-1-active-record
  • #38: Each object owns the logic that is relevant to its piece.
  • #40: UseDataMapper pattern to resolve variant relational object schemas
  • #44: Insert chart from pg 29Note: Not mutually exclusive. Can use each as needed in diff contexts.
  • #47: .Net architecturePOEAADDD