{"id":36,"date":"2005-11-29T17:42:26","date_gmt":"2005-11-29T16:42:26","guid":{"rendered":"http:\/\/www.epischel.de\/wordpress\/?p=36"},"modified":"2012-04-09T11:45:31","modified_gmt":"2012-04-09T10:45:31","slug":"domain-driven-design","status":"publish","type":"post","link":"https:\/\/www.epischel.de\/wordpress\/2005\/11\/domain-driven-design\/","title":{"rendered":"Domain-Driven Design"},"content":{"rendered":"<p>Die letzten Wochen habe ich &#8222;<a href=\"http:\/\/www.domaindrivendesign.org\/book\/index.html\">Domain-Driven Design<\/a>&#8220; von Eric Evans gelesen (bei <a href=\"http:\/\/www.lob.de\/cgi-bin\/work\/outputexpert?id=438c7302abc97&#038;frame=yes&#038;flag=new&#038;menupic=yes&#038;mode=viewone&#038;titnr=221683156&#038;linkcol=e4bf0f&#038;stich=+Eric+Evans+&#038;katalog=255\">Lehmanns<\/a>, <a href=\"http:\/\/www.amazon.de\/exec\/obidos\/ASIN\/0321125215\/qid=1133277928\/sr=2-1\/ref=sr_2_11_1\/028-1562738-5249368\">Amazon<\/a>). Ich finde, dieses Buch ist f\u00fcr Software-Entwickler sehr empfehlenswert, die sich des objektorientierte Programmiermodells bedienen.<\/p>\n<p>Im Buch geht es darum, wie man gute Objektmodell f\u00fcr Fachdom\u00e4nen erstellt (daher Domain-driven). Da es sich um ein ganzes Buch zu diesem Thema handelt, f\u00e4ngt es gar nicht erst bei &#8222;Substantive sind potentielle Klassen&#8220; an, wie es sonst doch recht \u00fcblich in OO-B\u00fcchern ist. Evans stellt Patterns vor, die ganz unterschiedlichen Scope haben (von &#8222;Entities&#8220; bis &#8222;Systemmetapher&#8220;) und stellt diese Patterns auch in Zusammenhang zueinander.<\/p>\n<p>Das Ziel von domain-driven design sind &#8222;Deep Models&#8220;, d.h. Modelle und deren Implementierung (!!!), die aus der vertieften Analyse der Dom\u00e4ne entstehen. Ihr Mehrwert ist ein tiefes Verst\u00e4ndnis der Dom\u00e4ne durch die Entwickler, eine gr\u00f6\u00dfere \u00dcbereinstimmung im Wissen der Entwickler und Fachleute, verbesserte Wartbarkeit und vereinfachte Erweiterbarkeit.<\/p>\n<p>Ganz klar wird allerdings herausgestellt, dass domain-driven design  kein &#8222;must-have&#8220; ist, sondern das es auch Alternativen gibt.<\/p>\n<p>Domain-driven design bedeutet nicht up-front design, sondern: Modell und Implementierung geh\u00f6ren zusammen; das Modell ben\u00f6tigt das Feedback durch die Implementierung. Es wird durch vertiefende Kenntnis (das ist ein Prozess!) der Entwickler \u00fcber die Dom\u00e4ne gewonnen, Refactoring \u00fcbertr\u00e4gt neu gewonnene Kenntisse auf das Modell und damit die Implementierung.<\/p>\n<p>Highlights f\u00fcr mich sind:<\/p>\n<ul>\n<li>Unterscheidung zwischen Entities und Value Objects<\/li>\n<li>Layers &#8211; so habe ich mir das schon immer vorgestellt<\/li>\n<li>Ubiquitous Language &#8211; eine gemeinsame (Fach-)Sprache ist Voraussetzung f\u00fcr gute Kommunikation<\/li>\n<li>Intention-Revealing Interfaces &#8211; verbessert Lesbarkeit des Codes, damit Wartbarkeit und Verst\u00e4ndlichkeit<\/li>\n<li>Bounded Context &#8211; in welchem Kontext gilt ein Modell \u00fcberhaupt (davon kann es in einer Anwendung mehrere geben)<\/li>\n<li>Responsibility Layers &#8211; Verantwortlichkeiten innerhalb eines Objektmodell in Schichten aufteilen<\/li>\n<\/ul>\n<p>Das Buch kann man auch bei <a href=\"http:\/\/safari.oreilly.com\">Safari <\/a>online lesen.<\/p>\n<div class=\"syndication-links\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Die letzten Wochen habe ich &#8222;Domain-Driven Design&#8220; von Eric Evans gelesen (bei Lehmanns, Amazon). Ich finde, dieses Buch ist f\u00fcr Software-Entwickler sehr empfehlenswert, die sich des objektorientierte Programmiermodells bedienen. Im Buch geht es darum, wie man gute Objektmodell f\u00fcr Fachdom\u00e4nen erstellt (daher Domain-driven). Da es sich um ein ganzes Buch zu diesem Thema handelt, f\u00e4ngt&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"mf2_syndication":[],"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[119],"series":[],"class_list":["post-36","post","type-post","status-publish","format-standard","hentry","category-entwicklung","tag-entwicklung","kind-"],"kind":false,"_links":{"self":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts\/36","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/comments?post=36"}],"version-history":[{"count":3,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts\/36\/revisions"}],"predecessor-version":[{"id":337,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/posts\/36\/revisions\/337"}],"wp:attachment":[{"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/media?parent=36"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/categories?post=36"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/tags?post=36"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.epischel.de\/wordpress\/wp-json\/wp\/v2\/series?post=36"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}