Design Paterns Articles

design-patterns

https://msdn.microsoft.com/en-us/library/ee658124.aspx - Key Principles of Software Architecture
http://martinfowler.com/bliki/AnemicDomainModel.html
http://martinfowler.com/eaaCatalog/identityMap.html
http://lostechies.com/chrismissal/2009/05/28/anti-patterns-and-worst-practices-monster-objects/
http://martinfowler.com/articles/mocksArentStubs.html
http://martinfowler.com/articles/evodb.html
http://martinfowler.com/articles/continuousIntegration.html
Code Smell
http://www.aboutus.org/Ward_Cunningham
Patterns and Practices
http://www.laputan.org/mud/
Portland Pattern Repository
http://perldesignpatterns.com/
http://www.extremeprogramming.org/
http://www.extremeperl.org/bk/home
http://www.uml.org/
http://lambda-the-ultimate.org/
http://fundae.wordpress.com/2008/05/14/functional-programming-101-lambda-forms/
http://martinfowler.com/articles/evodb.html
http://martinfowler.com/books/refactoringDatabases.html
http://martinfowler.com/articles/richardsonMaturityModel.html
http://www.informit.com/store/product.aspx?isbn=032150206X
http://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
http://martinfowler.com/ieeeSoftware/enterpriseArchitects.pdf
http://martinfowler.com/ieeeSoftware/marketecture.pdf
http://martinfowler.com/books/hohmann.html
http://martinfowler.com/books/eaa.html
http://martinfowler.com/eaaCatalog/
http://www.drdobbs.com/errant-architectures/184414966
http://martinfowler.com/eaaCatalog/transactionScript.html
http://martinfowler.com/eaaCatalog/domainModel.html
http://martinfowler.com/eaaCatalog/tableModule.html
http://martinfowler.com/eaaCatalog/serviceLayer.html
http://martinfowler.com/eaaCatalog/dataMapper.html
http://martinfowler.com/eaaCatalog/unitOfWork.html
http://martinfowler.com/eaaCatalog/identityMap.html
http://martinfowler.com/eaaCatalog/lazyLoad.html
http://martinfowler.com/eaaCatalog/identityField.html
http://martinfowler.com/eaaCatalog/foreignKeyMapping.html
http://martinfowler.com/eaaCatalog/associationTableMapping.html
http://martinfowler.com/eaaCatalog/dependentMapping.html
http://martinfowler.com/eaaCatalog/embeddedValue.html
http://martinfowler.com/eaaCatalog/serializedLOB.html
http://martinfowler.com/eaaCatalog/singleTableInheritance.html
http://martinfowler.com/eaaCatalog/classTableInheritance.html
http://martinfowler.com/eaaCatalog/concreteTableInheritance.html
http://martinfowler.com/eaaCatalog/inheritanceMappers.html
http://martinfowler.com/eaaCatalog/metadataMapping.html
http://martinfowler.com/eaaCatalog/queryObject.html
http://martinfowler.com/eaaCatalog/repository.html
http://martinfowler.com/eaaCatalog/pageController.html
http://martinfowler.com/eaaCatalog/frontController.html
http://martinfowler.com/eaaCatalog/templateView.html
http://martinfowler.com/eaaCatalog/transformView.html
http://martinfowler.com/eaaCatalog/twoStepView.html
http://martinfowler.com/eaaCatalog/applicationController.html
http://martinfowler.com/eaaCatalog/remoteFacade.html
http://martinfowler.com/eaaCatalog/dataTransferObject.html
http://martinfowler.com/eaaCatalog/optimisticOfflineLock.html
http://martinfowler.com/eaaCatalog/pessimisticOfflineLock.html
http://martinfowler.com/eaaCatalog/coarseGrainedLock.html
http://martinfowler.com/eaaCatalog/implicitLock.html
http://martinfowler.com/eaaCatalog/clientSessionState.html
http://martinfowler.com/eaaCatalog/serverSessionState.html
http://martinfowler.com/eaaCatalog/databaseSessionState.html
http://martinfowler.com/eaaCatalog/gateway.html
http://martinfowler.com/eaaCatalog/mapper.html
http://martinfowler.com/eaaCatalog/layerSupertype.html
http://martinfowler.com/eaaCatalog/separatedInterface.html
http://martinfowler.com/eaaCatalog/separatedInterface.html
http://martinfowler.com/eaaCatalog/registry.html
http://martinfowler.com/eaaCatalog/valueObject.html
http://martinfowler.com/eaaCatalog/money.html
http://martinfowler.com/eaaCatalog/specialCase.html
http://martinfowler.com/eaaCatalog/plugin.html
http://martinfowler.com/eaaCatalog/serviceStub.html
http://martinfowler.com/eaaCatalog/recordSet.html
http://martinfowler.com/bliki/OrmHate.html
http://martinfowler.com/articles/rubyAtThoughtWorks.html
http://martinfowler.com/bliki/ruby.html
http://martinfowler.com/bliki/TechnicalDebtQuadrant.html
http://martinfowler.com/bliki/DigitalSLR.html
http://martinfowler.com/articles/obamaSoftware.html
http://martinfowler.com/bliki/MercurialSquashCommit.html
http://martinfowler.com/bliki/RequestStreamMap.html
http://martinfowler.com/bliki/ComparativeValues.html
http://martinfowler.com/bliki/IntentionalSoftware.html
http://www.google.com/events/io/2009/sessions/ThoughtWorksAppEngineJava.html
http://msdn.microsoft.com/en-us/data//dd727707.aspx
http://www.infoq.com/presentations/fowlere-xley-democratic-political-technology
http://martinfowler.com/bliki/EagerReadDerivation.html
http://domaindrivendesign.org/
http://martinfowler.com/bliki/FlaccidScrum.html
http://martinfowler.com/bliki/FeatureBranch.html
http://martinfowler.com/bliki/SelfInitializingFake.html
http://martinfowler.com/bliki/TestDouble.html
http://martinfowler.com/bliki/ComposedRegex.html
http://martinfowler.com/bliki/IllustrativeProgramming.html
http://channel9.msdn.com/blogs/charles/expert-to-expert-martin-fowler-and-chris-sells-perspectives-on-domain-specific-languages
http://martinfowler.com/bliki/ContradictoryObservations.html
http://martinfowler.com/bliki/NashvilleProject.html
http://martinfowler.com/bliki/DslMigration.html
http://martinfowler.com/bliki/RulesEngine.html
http://martinfowler.com/bliki/CQRS.html
http://martinfowler.com/articles/planningXpIteration.html
http://martinfowler.com/eaaDev/EventSourcing.html
http://martinfowler.com/eaaDev/OrganizingPresentations.html
http://martinfowler.com/eaaDev/ParallelModel.html
http://martinfowler.com/eaaDev/RetroactiveEvent.html
http://martinfowler.com/articles/lmax.html
http://martinfowler.com/apsupp/accountability.pdf
http://martinfowler.com/articles/nosql-intro.pdf
http://martinfowler.com/apsupp/apchap3.pdf
http://martinfowler.com/articles/languageWorkbench.html
http://martinfowler.com/eaaDev/uiArchs.html
http://www.martinfowler.com/articles/newMethodologyOriginal.html
http://martinfowler.com/articles/itsNotJustStandingUp.html
http://martinfowler.com/eaaCatalog/concreteTableInheritance.html

http://martinfowler.com/eaaDev/index.html
http://martinfowler.com/eaaDev/uiArchs.html
http://martinfowler.com/articles/consumerDrivenContracts.html
http://martinfowler.com/articles/nonDeterminism.html
http://martinfowler.com/articles/newMethodology.html
http://martinfowler.com/articles/mocksArentStubs.html
http://martinfowler.com/articles/designDead.html
http://martinfowler.com/articles/agileOffshore.html
http://www.martinfowler.com/articles/injection.html
http://martinfowler.com/eaaCatalog/plugin.html
http://martinfowler.com/articles/originalContinuousIntegration.html
http://martinfowler.com/books/continuousDelivery.html
http://www.martinfowler.com/bliki/TestDouble.html
http://jamesshore.com/Blog/Continuous-Integration-is-an-Attitude.html
http://martinfowler.com/bliki/PendingHead.html
http://www.martinfowler.com/bliki/DiffDebugging.html
http://www.martinfowler.com/bliki/EnterpriseRails.html
http://martinfowler.com/bliki/
http://martinfowler.com/design.html
http://martinfowler.com/bliki/AbundantMutation.html
http://martinfowler.com/bliki/DesignStaminaHypothesis.html
http://martinfowler.com/bliki/Seedwork.html
http://martinfowler.com/bliki/AssetCapture.html
http://martinfowler.com/bliki/StranglerApplication.html
http://martinfowler.com/bliki/EvolutionarySOA.html
http://martinfowler.com/bliki/TolerantReader.html
http://www.ibm.com/developerworks/java/library/j-eaed1/index.html
http://en.wikipedia.org/wiki/Factory_pattern
http://en.wikipedia.org/wiki/Strategy_pattern
http://en.wikipedia.org/wiki/Architecture_description_language
http://en.wikipedia.org/wiki/Plug-in_%28computing%29
http://en.wikipedia.org/wiki/Inversion_of_control
http://en.wikipedia.org/wiki/Delegation_%28programming%29
http://www.javalobby.org/articles/di-heritage/
http://www.jroller.com/page/kdonald/20050330#ioc_we_get_it
http://www.pyrasun.com/mike/mt/archives/2004/11/06/15.46.14/index.html
http://www.theserverside.com/news/1321158/A-beginners-guide-to-Dependency-Injection
http://tutorials.jenkov.com/dependency-injection/index.html
http://www.developer.com/net/net/article.php/3636501/Writing-More-Testable-Code-with-Dependency-Injection.htm
http://codebetter.com/jeremymiller/2005/10/06/the-dependency-injection-pattern-%E2%80%93-what-is-it-and-why-do-i-care/
http://www.codeproject.com/Articles/13831/Dependency-Injection-for-Loose-Coupling
http://www.midmarsh.co.uk/planetjava/tutorials/language/WatchingtheObservables.PDF
http://jcp.org/en/jsr/detail?id=330
http://yan.codehaus.org/Dependency+Injection+Types
http://www.drdobbs.com/tools/dependency-injection-testable-objects/185300375

Active Record
Dependencies Injection
MVC
MVP
MVVM
ORM

Design Patterns help, but like everything else, over using it, thus abusing it may lead to unmaintainable code (code that are hard to understand).

Know the alternatives and judge the trade-offs of using one alternative over another.

If a system has business benefits, delaying those benefits cost money. However, you don't want to make decision now that will hamper future growth. But if you add flexibility now and get it wrong, the complexity added for flexibility's sake may actually make it harder to evolve in the future and may delay deployment and thus delay the benefit. Although such systems may be small, most enterprises have a lot of them so the cumulative effect of an inappropriate architecture can be significant.

Only build feature that are requested by the customers. Validate the ideas with customers or with the rest of your teams. Don't just bake the feature into the system just because you think that the customer will need it. At least, validate the idea with the rest of your team.

Choosing an architecture means that you have to understand the particular problems of your system (or requirements) and choose an appropriate design based on that understanding. It is about choices and alternatives. Even when you choose a particular pattern, you'll have to modify it to meet your needs. You cannot build enterprise software without thinking.
Use layers and APIs. Divide your application into sub-components or services so that each sub-component and service can be individually tested and exposed. The result is that you have high quality software (testing each individual sub-component is easier than testing the whole entire complex software), and your services can be re-used outside of your own main application.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License