<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>!FrAgile Thinking &#187; Domain Driven Design</title>
	<atom:link href="http://blog.jendrusz.pl/tag/domain-driven-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jendrusz.pl</link>
	<description>Software Development, Agile, Microsoft .NET, Muzyka</description>
	<lastBuildDate>Thu, 23 Jul 2009 13:11:23 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.jendrusz.pl' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/8887127bb14be5b999f37b1921b33c0a?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>!FrAgile Thinking &#187; Domain Driven Design</title>
		<link>http://blog.jendrusz.pl</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.jendrusz.pl/osd.xml" title="!FrAgile Thinking" />
	<atom:link rel='hub' href='http://blog.jendrusz.pl/?pushpress=hub'/>
		<item>
		<title>Wstęp do Domain Driven Design</title>
		<link>http://blog.jendrusz.pl/2008/11/17/wstep-do-domain-driven-design/</link>
		<comments>http://blog.jendrusz.pl/2008/11/17/wstep-do-domain-driven-design/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 10:38:14 +0000</pubDate>
		<dc:creator>jenrom</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Projekty Informatyczne]]></category>

		<guid isPermaLink="false">http://jendrusz.wordpress.com/?p=9</guid>
		<description><![CDATA[Pierwszy wpis techniczny &#8211; długo zastanawiałem się nad tym, czego powinien on dotyczyć? Kiedy w zasadzie powinien się tutaj pojawić? W momencie zdobycia rzetelnej wiedzy na dany temat, poznania potrzeb i wymagań szanownych odbiorców, czy może w piękny jesienny dzień (niczym spadający liść, który zapowiada nadchodzącą zimę, a więc proces-cykl). Jedyne, czego byłem pewny to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jendrusz.pl&blog=5537249&post=9&subd=jendrusz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><!--[if !mso]&gt;--></p>
<p>Pierwszy wpis techniczny &#8211;  długo zastanawiałem się nad tym, czego powinien on dotyczyć? Kiedy  w zasadzie powinien się tutaj pojawić? W momencie zdobycia rzetelnej  wiedzy na dany temat, poznania potrzeb i wymagań szanownych odbiorców,  czy może w piękny jesienny dzień (niczym spadający liść, który  zapowiada nadchodzącą zimę, a więc proces-cykl). Jedyne, czego byłem  pewny to to, że nie będzie to wpis dotyczący jednowątkowego tematu.  Początkowo myślałem, że warto by było omówić szeroki temat dotyczących  maperów obiektowo relacyjnych, koncentrując się na NHiernate i Linq  To Sql. Tak jednak się nie stało (mimo to zapewniam, że prędzej  czy później tego rodzaju wpisy się pokażą), uznałem, że jest  to zbyt techniczny/skomplikowany temat na sam początek (a przecież  nie chciałbym nikogo zniechęcić).</p>
<p>Ostatecznie zdecydowałem się  omówić temat „<a href="http://domaindrivendesign.org/" target="_blank">Domain  Driven Design</a>”.  DDD jest według mnie, a także według cenionych przeze mnie autorytetów,  jedną z najciekawszych koncepcji wytwarzania oprogramowania. Dodatkowym  bodźcem, który skłonił mnie do opisania DDD była lektura książki <a href="http://www.domainlanguage.com/about/ericevans.html" target="_blank">Erica Evansa</a> „<a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215" target="_blank">Domain  Driven Design – tackling complexity in the hart of software</a>”.</p>
<p>Zaczynamy.</p>
<p>Czym jest Domain Driven Design(DDD)?</p>
<p>Nie jest to łatwa odpowiedź,  dlatego, że nie jest możliwe w dwóch czy trzech zdaniach opisać  najważniejsze cechy tej koncepcji. Wydaje mi się, że najłatwiej  można by ująć, że DDD to koncepcja pozwalająca na realizację projektów  IT zapobiegająca tworzeniu się przepaści pomiędzy osobami znającymi  biznes(klient, analityk) a zespołem tworzącym dany projekt. Zapewne  sobie myślicie, co w tym takiego wielce rewolucyjnego, w końcu każdy  projekt wymaga pewnej współpracy pomiędzy biznesem, dla którego  realizowany jest projekt a działem IT, który go realizuje. Pytanie,  które powstaje – co to znaczy „pewna współpraca”? Chyba  każdy już zna poniżej przedstawiony rysunek.</p>
<p style="text-align:center;page-break-after:avoid;" align="center"><!--[if gte vml 1]&gt;                    &lt;![endif]--><!--[if !vml]--><!--[endif]--></p>
<p style="text-align:center;" align="center"><a href="http://jendrusz.files.wordpress.com/2008/11/etapy-budowy-systemu2.jpg"><img class="aligncenter size-full wp-image-12" title="etapy-budowy-systemu" src="http://jendrusz.files.wordpress.com/2008/11/etapy-budowy-systemu2.jpg?w=455&#038;h=261" alt="etapy-budowy-systemu" width="455" height="261" /></a></p>
<p style="text-align:center;" align="center">Źródła: http://maluga.com.pl/wp-content/uploads/etapy-budowy-systemu.jpg</p>
<p>Rysunek ten moim zdaniem przedstawia  właśnie efekt tej „pewnej współpracy”, w której często sam  brałem udział i zapewne jeszcze nieraz będę <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Można by pomyśleć,  że przyczyny efektu końcowego przedstawionego na rysunku są związane  ze źle zebranymi wymaganiami lub ze złą formą przekazania ich programistom.  Owszem, często się tak dzieje, że specyfikacja jest niezrozumiała,  mało przejrzysta czy zawiła, co w znacznej mierze wpływa na niepowodzenie  projektów informatycznych. Nawet w najbardziej optymalnej sytuacji  sama specyfikacja nigdy nie wystarczy, by zbudować w pełni odpowiadający  klientowi system informatyczny. W większości przypadków specyfikacja  zostaje interpretowana na wiele sposobów i w efekcie końcowym oprogramowanie  nie staje się rzeczywistym odzwierciedleniem domeny biznesowej.</p>
<p>Dzieje  się przede wszystkim tak, dlatego, że w projektach tego typu nie występuje  jawna komunikacja pomiędzy osobami znającymi daną domenę biznesową  a zespołami wytwarzającymi oprogramowanie. Dlatego też model stworzony  przez programistów odbiega od pożądanej postaci. Jednym z głównych  powodów, który decyduje o braku wcześniej wspomnianej współpracy,  jest różnica żargonów, pomiędzy tymi stosowanymi w danej domenie  biznesowej a tymi używanym przez programistów. W dzisiejszych  czasach większość projektów informatycznych jest realizować koncentrując  się przede wszystkim na danych i relacjach występujących pomiędzy  tymi danymi. Prowadzi to do tego, że w rozmowach pomiędzy programistami  pojawiają się sformułowania typu „do tabeli zamówienia powinna zostać dodany nowy rekord w przypadku, gdy&#8230;”. Te słowa  dla osoby z biznesu są całkowicie nie zrozumiałe, dlatego, że nie  zna ona się na bazach danych &#8211; i dobrze, bo bylibyśmy bezrobotni.</p>
<p>Panaceum na tego typu bolączki jest wprowadzenie spójnego wszechobecnego  języka, tzw. ”ubiquitous  language”. Ubiquitous language jest jednym z najważniejszych  elementów Domain Driven Design, dlatego, że zapewnia on spójną komunikację  pomiędzy dwoma światami – biznesu i programistów. Język ten należy  kształtować od samego początku projektu, rozwijając go przede wszystkim  w trakcie konwersacji, w ramach, których zostają omawiane wymagania  biznesowe. Konwersacje te, służące przekazaniu i rozpoznaniu potrzeb  klienta, są jednym z głównych elementów metodologii zarządzania  projektów zwanymi metodologiami zwinnymi (Agile). Dlatego też, jednym  z podstawowych wymagań zastosowania DDD jest sposób prowadzenia projektów  przy użyciu metodologii zwinnych.</p>
<p>Samo zdefiniowanie wspólnego  języka pomiędzy klientem a zespołem, nie zapewnia sukcesu. Dopiero  zaimplementowanie systemu informatycznego w sposób taki by odzwierciadlał  występujące w języku „ubiquitous language” elementów zapewni  ścieżkę do sukcesu. Implementacja ta jest dokonywana przy pomocy  modelu obiektowego znanego, jako wzorzec <a href="http://martinfowler.com/eaaCatalog/domainModel.html" target="_blank">Domain  Model</a> pozwalającego  na abstrakcję modelu biznesowego wyrażonego w postaci kodu.   Więcej informacji na temat architektury aplikacji, w której skład  wchodzi Domain Model można znaleźć <a href="http://rafalb.com/Blog.aspx?id=10" target="_blank">tutaj</a>. Dodatkowo zapewniam, że przyszłe  wpisy będą koncentrowały się na implementacji tego wzorca, jako  że przedstawia on serce aplikacji opartej o DDD.</p>
<p>Jednym z najważniejszych  wymogów DDD względem implementacji modelu obiektowego przedstawiającego  domenę biznesową jest to by obiekty zawarte w tym modelu nie przedstawiały  tylko i wyłącznie rzeczowniki pojawiające się w „ubiquitous language”,  ale również czasowniki. W końcu to czasowniki przedstawiają zachowanie,  którym cechuje się logika każdego systemu informatycznego. To stwierdzeni  może się wydawać błahe i oczywiste, ale w większości systemów  zapomina się o tym stosując modele obiektowe oparte o klasy biznesowe  posiadające tylko i wyłącznie pola będące rzeczownikami. Model  składający się z klas bez metod przedstawiających czasowniki został  zdefiniowany, jako anty wzorzec znany szerzej, jako <a href="http://www.martinfowler.com/bliki/AnemicDomainModel.html" target="_blank">Anemic Domain Model</a>. Najczęstszym powodem występowania  tego wzorca jest definicja modelu obiektowego przy użyciu a wręcz  mapowaniu wcześniej stworzonego schematu relacyjnej bazy danych będącego  jedynie odzwierciedleniem stanu obiektów.</p>
<p><!--[if gte mso 9]&gt;  Normal 0 21       MicrosoftInternetExplorer4  &lt;![endif]--> W kolejnym wpisie postaram się przedstawić przykład konwersacji pomiędzy ekspertem domeny biznesowej a programistą. Ta konwersacja na celu będzie miała ukazać przykład tworzenia się jezyka „ubiquitous language”, współdzielonego pomiędzy nimi. Następnie na podstawie elementów zawartych w tym języku wyznaczony zostanie przykładowy model obiektowy wraz z jego implementacją.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jendrusz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jendrusz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jendrusz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jendrusz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jendrusz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jendrusz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jendrusz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jendrusz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jendrusz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jendrusz.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jendrusz.pl&blog=5537249&post=9&subd=jendrusz&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.jendrusz.pl/2008/11/17/wstep-do-domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8bcd127033469a9da5c4d426782db6cd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jenrom</media:title>
		</media:content>

		<media:content url="http://jendrusz.files.wordpress.com/2008/11/etapy-budowy-systemu2.jpg" medium="image">
			<media:title type="html">etapy-budowy-systemu</media:title>
		</media:content>
	</item>
	</channel>
</rss>