{"id":1363,"date":"2014-07-12T23:42:43","date_gmt":"2014-07-12T22:42:43","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1363"},"modified":"2018-08-30T00:12:08","modified_gmt":"2018-08-29T23:12:08","slug":"component-design","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/","title":{"rendered":"Component design"},"content":{"rendered":"<p>This week I gave a presentation titled &#8220;<a href=\"http:\/\/bit.ly\/component-design\">Component design: Getting cohesion and coupling right<\/a>&#8221; at <a href=\"https:\/\/www.wikimedia.de\">Wikimedia Deutschland<\/a>.<\/p>\n<p><a href=\"http:\/\/jeroendedauw.github.io\/slides\/craftmanship\/components\/#\/\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1364\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/slides-0-first\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first.jpg\" data-orig-size=\"1129,604\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"slides-0-first\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-1024x547.jpg\" class=\"alignnone wp-image-1364 size-large\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-1024x547.jpg\" alt=\"slides-0-first\" width=\"550\" height=\"293\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-1024x547.jpg 1024w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-300x160.jpg 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-100x53.jpg 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-150x80.jpg 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-200x106.jpg 200w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-450x240.jpg 450w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-600x320.jpg 600w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-900x481.jpg 900w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first.jpg 1129w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n<p>Components are a level of organization, in between classes and layers. They are an<br \/>\nimportant mechanism in avoiding monolithic designs and big balls of mud. While<br \/>\neveryone can recognize a component when they see one, many people are unaware of<br \/>\nthe basic principles that guide good component design.<\/p>\n<p>This presentation is aimed at developers. It is suitable both for people new to the field<br \/>\nand those with many years of experience.<\/p>\n<p>The topics covered include:<\/p>\n<ul>\n<li>What is a component?<\/li>\n<li>Which things go together?<\/li>\n<li>How do components relate to each other?<\/li>\n<li>How are common problems avoided?<\/li>\n<\/ul>\n<p>You can <a href=\"http:\/\/jeroendedauw.github.io\/slides\/craftmanship\/components\/#\/\">view the slides<\/a>, or <a href=\"https:\/\/github.com\/JeroenDeDauw\/slides\/blob\/master\/craftmanship\/components\/README.md\">look at the source<\/a>.<\/p>\n<p><a href=\"http:\/\/jeroendedauw.github.io\/slides\/craftmanship\/components\/#\/1\/3\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1365\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/slides-1-benefits\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits.jpg\" data-orig-size=\"1129,604\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"slides-1-benefits\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-1024x547.jpg\" class=\"alignnone wp-image-1365 size-large\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-1024x547.jpg\" alt=\"slides-1-benefits\" width=\"550\" height=\"293\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-1024x547.jpg 1024w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-300x160.jpg 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-100x53.jpg 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-150x80.jpg 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-200x106.jpg 200w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-450x240.jpg 450w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-600x320.jpg 600w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits-900x481.jpg 900w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-1-benefits.jpg 1129w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a> <a href=\"http:\/\/jeroendedauw.github.io\/slides\/craftmanship\/components\/#\/2\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1366\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/slides-2-questions\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions.jpg\" data-orig-size=\"1129,604\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"slides-2-questions\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-1024x547.jpg\" class=\"alignnone size-large wp-image-1366\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-1024x547.jpg\" alt=\"slides-2-questions\" width=\"550\" height=\"293\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-1024x547.jpg 1024w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-300x160.jpg 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-100x53.jpg 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-150x80.jpg 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-200x106.jpg 200w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-450x240.jpg 450w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-600x320.jpg 600w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions-900x481.jpg 900w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-2-questions.jpg 1129w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a> <a href=\"http:\/\/jeroendedauw.github.io\/slides\/craftmanship\/components\/#\/3\/2\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1367\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/slides-3-adp\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp.jpg\" data-orig-size=\"1129,604\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"slides-3-adp\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-1024x547.jpg\" class=\"alignnone size-large wp-image-1367\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-1024x547.jpg\" alt=\"slides-3-adp\" width=\"550\" height=\"293\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-1024x547.jpg 1024w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-300x160.jpg 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-100x53.jpg 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-150x80.jpg 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-200x106.jpg 200w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-450x240.jpg 450w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-600x320.jpg 600w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp-900x481.jpg 900w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-3-adp.jpg 1129w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a> <a href=\"http:\/\/jeroendedauw.github.io\/slides\/craftmanship\/components\/#\/9\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1368\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/slides-4-cat\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat.jpg\" data-orig-size=\"1129,604\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"slides-4-cat\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-1024x547.jpg\" class=\"alignnone size-large wp-image-1368\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-1024x547.jpg\" alt=\"slides-4-cat\" width=\"550\" height=\"293\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-1024x547.jpg 1024w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-300x160.jpg 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-100x53.jpg 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-150x80.jpg 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-200x106.jpg 200w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-450x240.jpg 450w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-600x320.jpg 600w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat-900x481.jpg 900w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-4-cat.jpg 1129w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week I gave a presentation titled &#8220;Component design: Getting cohesion and coupling right&#8221; at Wikimedia Deutschland. Components are a&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[8],"tags":[328,67,353,340,197,200,316,305,336],"class_list":["post-1363","post","type-post","status-publish","format-standard","hentry","category-software","tag-clean-code","tag-component","tag-component-design","tag-components","tag-planet-wikimedia","tag-presentation","tag-software-design","tag-wikidata","tag-wmde"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Component design - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Component design - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"This week I gave a presentation titled &#8220;Component design: Getting cohesion and coupling right&#8221; at Wikimedia Deutschland. Components are a&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-12T22:42:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-29T23:12:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-1024x547.jpg\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"Component design\",\"datePublished\":\"2014-07-12T22:42:43+00:00\",\"dateModified\":\"2018-08-29T23:12:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/\"},\"wordCount\":124,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/slides-0-first-1024x547.jpg\",\"keywords\":[\"Clean Code\",\"Component\",\"Component design\",\"Components\",\"Planet Wikimedia\",\"Presentation\",\"Software design\",\"wikidata\",\"WMDE\"],\"articleSection\":[\"Software\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/\",\"name\":\"Component design - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/slides-0-first-1024x547.jpg\",\"datePublished\":\"2014-07-12T22:42:43+00:00\",\"dateModified\":\"2018-08-29T23:12:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/slides-0-first.jpg\",\"contentUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/slides-0-first.jpg\",\"width\":1129,\"height\":604},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2014\\\/07\\\/12\\\/component-design\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Component design\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Component design - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/","og_locale":"en_US","og_type":"article","og_title":"Component design - Blog of Jeroen De Dauw","og_description":"This week I gave a presentation titled &#8220;Component design: Getting cohesion and coupling right&#8221; at Wikimedia Deutschland. Components are a&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2014-07-12T22:42:43+00:00","article_modified_time":"2018-08-29T23:12:08+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-1024x547.jpg","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"Component design","datePublished":"2014-07-12T22:42:43+00:00","dateModified":"2018-08-29T23:12:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/"},"wordCount":124,"commentCount":1,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-1024x547.jpg","keywords":["Clean Code","Component","Component design","Components","Planet Wikimedia","Presentation","Software design","wikidata","WMDE"],"articleSection":["Software"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/","url":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/","name":"Component design - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first-1024x547.jpg","datePublished":"2014-07-12T22:42:43+00:00","dateModified":"2018-08-29T23:12:08+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first.jpg","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/07\/slides-0-first.jpg","width":1129,"height":604},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2014\/07\/12\/component-design\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"Component design"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-lZ","jetpack-related-posts":[{"id":1337,"url":"https:\/\/www.entropywins.wtf\/blog\/2014\/05\/06\/the-wikidata-phase3-software-components\/","url_meta":{"origin":1363,"position":0},"title":"The Wikidata phase3 software components","author":"Jeroen","date":"2014-05-06","format":false,"excerpt":"Work on the long awaited query functionality for the Wikidata project has already happened during a period of several months. Since queries are a completely disjoint feature set from the existing functionality, we decided to put it into a new component part of the Wikibase software. This component is called\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1287,"url":"https:\/\/www.entropywins.wtf\/blog\/2014\/03\/20\/status-of-the-new-wikibase-deserialization-code\/","url_meta":{"origin":1363,"position":1},"title":"Status of the new Wikibase (de)serialization code","author":"Jeroen","date":"2014-03-20","format":false,"excerpt":"A quick update on the status of the new serialization and deserialization code for Wikibase, the software behind Wikidata. For a long time now, we've had two serialization formats. One intended for external usage, and one intended for internal usage. The former one is the format our web API uses.\u2026","rel":"","context":"In &quot;Software&quot;","block_context":{"text":"Software","link":"https:\/\/www.entropywins.wtf\/blog\/category\/software\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2278,"url":"https:\/\/www.entropywins.wtf\/blog\/2018\/08\/14\/bounded-contexts-in-the-wikimedia-fundraising-software\/","url_meta":{"origin":1363,"position":2},"title":"Bounded Contexts in the Wikimedia Fundraising Software","author":"Jeroen","date":"2018-08-14","format":false,"excerpt":"In this follow-up to rewriting the Wikimedia Deutschland fundraising I tell the story of how we reorganized our codebases along the lines of the DDD strategic pattern Bounded Contexts. In 2016 the FUN team at Wikimedia Deutschland rewrote the Wikimedia Deutschland fundraising application. This new codebase uses The Clean Architecture\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Diagram depicting Clean Architecture + Bounded Contexts","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/Such-Clean-Diagram.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/Such-Clean-Diagram.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/Such-Clean-Diagram.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/Such-Clean-Diagram.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/Such-Clean-Diagram.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":1453,"url":"https:\/\/www.entropywins.wtf\/blog\/2015\/08\/11\/wikibase-datamodel-services\/","url_meta":{"origin":1363,"position":3},"title":"Wikibase DataModel Services","author":"Jeroen","date":"2015-08-11","format":false,"excerpt":"I'm happy to announce the immediate availability of a new Wikibase library: Wikibase DataModel Services (which I'll in this blog post refer to as DMS). Rationale behind the library The main motivation for introducing this new library is to reduce technical debt and draw more solid architectural boundaries in the\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1141,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/01\/new-database-abstraction-layer-for-mediawiki\/","url_meta":{"origin":1363,"position":4},"title":"New database abstraction layer for MediaWiki","author":"Jeroen","date":"2013-11-01","format":false,"excerpt":"Disclaimer: the views and opinions expressed in this blog post are my own, and do not reflect those of Wikmedia Germany or my colleagues. At Wikimedia Germany, we\u2019ve created a library that acts as database abstraction layer and which is largely build on top of the MediaWiki database abstraction layer.\u2026","rel":"","context":"With 1 comment","block_context":{"text":"With 1 comment","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/11\/01\/new-database-abstraction-layer-for-mediawiki\/#comments"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2330,"url":"https:\/\/www.entropywins.wtf\/blog\/2018\/08\/30\/base-libraries-should-be-stable\/","url_meta":{"origin":1363,"position":5},"title":"Base Libraries Should be Stable","author":"Jeroen","date":"2018-08-30","format":false,"excerpt":"In this post I go over the principles that govern package (library) design and one specific issue I have come across several times. Robert C Martin has proposed six Package Principles. Personally I find the (linked) description on Wikipedia rather confusing, especially if you do not already understand the principles.\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/lib-hierarchy-used-by-app.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/lib-hierarchy-used-by-app.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/lib-hierarchy-used-by-app.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2018\/08\/lib-hierarchy-used-by-app.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1363"}],"version-history":[{"count":3,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1363\/revisions"}],"predecessor-version":[{"id":2337,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1363\/revisions\/2337"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}