{"id":251,"date":"2007-08-30T18:49:13","date_gmt":"2007-08-30T18:49:13","guid":{"rendered":"http:\/\/kubasek.com\/blog\/pragmatic_craftsman\/?p=251"},"modified":"2007-08-30T18:49:13","modified_gmt":"2007-08-30T18:49:13","slug":"what-is-a-good-software-architecture","status":"publish","type":"post","link":"https:\/\/pragmaticcraftsman.kubasek.com\/2007\/08\/30\/what-is-a-good-software-architecture\/","title":{"rendered":"What is a good software architecture?"},"content":{"rendered":"<p>Constructing a good architecture is a tough task. In my developer\u2019s career, I have not come across too many architects that really do a decent job creating good \u2013 cohesive &#8211; architectures. That just reiterates my point that architecting a system is not an easy task.<\/p>\n<p>What is a good architecture, though? What are its characteristics? I found some definite answers to this question in a book I\u2019m reading now, Object Oriented Analysis and Design with Applications, 3rd edition. These are some of the best definitions and views on software architecture I have come across.<\/p>\n<p>\u201cA system that has a sound architecture is one that has <b>conceptual integrity<\/b>. Having a \u201cclean internal structure\u201d is essential to constructing a system that is understandable, can be extended and reorganized, and is maintainable and testable.\u201d<\/p>\n<p>\u201cThere is no right way to craft the architecture of a given system.\u201d<\/p>\n<p><ol><b>Three Common Attributes of Good Software Architectures<\/b><\/p>\n<li>They are constructed in a <b>well-defined layers of abstraction<\/b>, each layer representing a coherent abstraction, provided through a well-defined and controlled interface, and built on equally well-defined and controlled facilities at lower levels of abstraction.<\/li>\n<li>There is a <b>clear separation of concerns between the interface and implementation<\/b> of each layer, making it possible to change the implementation of a layer without violating the assumptions made by its clients.<\/li>\n<li>The <b>architecture is simple<\/b>: Common behavior is achieved through common abstractions and common mechanisms.<\/li>\n<\/ul>\n<p>Architectures constructed in this way tend to be less complex and more robust and resilient. They also enable more effective reuse.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Constructing a good architecture is a tough task. In my developer\u2019s career, I have not come across too many architects that really do a decent job creating good \u2013 cohesive [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-251","post","type-post","status-publish","format-standard","hentry","category-architecture-design"],"_links":{"self":[{"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/posts\/251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/comments?post=251"}],"version-history":[{"count":0,"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/posts\/251\/revisions"}],"wp:attachment":[{"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/media?parent=251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/categories?post=251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pragmaticcraftsman.kubasek.com\/wp-json\/wp\/v2\/tags?post=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}