<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Komentarze do: Domain Driven Design pt.2 &#8211; rodzaje obiektów</title>
	<atom:link href="http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/</link>
	<description>Programming, designing, exploring</description>
	<lastBuildDate>Wed, 25 Jan 2012 16:00:38 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>Autor: Wojciech Soczyński</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-228</link>
		<dc:creator>Wojciech Soczyński</dc:creator>
		<pubDate>Thu, 29 Jul 2010 19:49:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-228</guid>
		<description>@michal wujas: Hm zastanawia mnie czy taka duża encja jak cały sklep ma w ogóle sens ?  Może sensowniejsze było by jakieś inne podejście np zamiast tworzyć ekosystem w którym każdy sklep jest podmiotem aplikacji lepiej by było wydzielić sklep jako osobną aplikację i stworzyć osobną aplikacje do zarządzania nimi. Co do użytkowników to rzeczywiście jest to problematyczne, ciekawy jestem też gdzie leży granica metodologi DDD.</description>
		<content:encoded><![CDATA[<p>@michal wujas: Hm zastanawia mnie czy taka duża encja jak cały sklep ma w ogóle sens ?  Może sensowniejsze było by jakieś inne podejście np zamiast tworzyć ekosystem w którym każdy sklep jest podmiotem aplikacji lepiej by było wydzielić sklep jako osobną aplikację i stworzyć osobną aplikacje do zarządzania nimi. Co do użytkowników to rzeczywiście jest to problematyczne, ciekawy jestem też gdzie leży granica metodologi DDD.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Michał Wujas</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-227</link>
		<dc:creator>Michał Wujas</dc:creator>
		<pubDate>Thu, 29 Jul 2010 08:25:39 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-227</guid>
		<description>Przykładem &quot;dużej&quot; encji jest sklep w systemie sklepów internetowych. Do encji tej należy wiele obiektów od tych bazujących na rekordzie z bazy danych jak produkty, klienci, zamówienia, magazyn po kontener na pliki, szatę graficzną etc. 

Problem pojawia się gdy implementujemy funkcjonalności typu generacja faktury w pdfie dla klienta indywidualnego, taka czynność wykorzystuje (w kilku procentach) każdy obiekt z przedstawionych powyżej. Jednak przy jej tworzeniu przerost encji sprawia trudność w poruszaniu się po całym ekosystemie, problemy z wydajnością czy zbytnie powiązanie obiektów ze sobą.

Drugim przykładem jest użytkownik który może pełnić wiele ról jednocześnie (właściciel sklepu, kupujący - w 4 typach, użytkownik poczty, uczestnik programu partnerskiego etc.).  
Można by w danym kontekście pracować na encji &quot;użytkownik poczty&quot; i mieć dostęp tylko do jego kontekstu gdyby nie fakt że dojdzie do scenariusza w którym użytkownik pełni 2-3 funkcje jednocześnie.</description>
		<content:encoded><![CDATA[<p>Przykładem &#8222;dużej&#8221; encji jest sklep w systemie sklepów internetowych. Do encji tej należy wiele obiektów od tych bazujących na rekordzie z bazy danych jak produkty, klienci, zamówienia, magazyn po kontener na pliki, szatę graficzną etc. </p>
<p>Problem pojawia się gdy implementujemy funkcjonalności typu generacja faktury w pdfie dla klienta indywidualnego, taka czynność wykorzystuje (w kilku procentach) każdy obiekt z przedstawionych powyżej. Jednak przy jej tworzeniu przerost encji sprawia trudność w poruszaniu się po całym ekosystemie, problemy z wydajnością czy zbytnie powiązanie obiektów ze sobą.</p>
<p>Drugim przykładem jest użytkownik który może pełnić wiele ról jednocześnie (właściciel sklepu, kupujący &#8211; w 4 typach, użytkownik poczty, uczestnik programu partnerskiego etc.).<br />
Można by w danym kontekście pracować na encji &#8222;użytkownik poczty&#8221; i mieć dostęp tylko do jego kontekstu gdyby nie fakt że dojdzie do scenariusza w którym użytkownik pełni 2-3 funkcje jednocześnie.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Wojciech Soczyński</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-226</link>
		<dc:creator>Wojciech Soczyński</dc:creator>
		<pubDate>Wed, 28 Jul 2010 18:49:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-226</guid>
		<description>@alan: przekonałeś mnie, chociaż szczerze powiem, że dopiero raczkuje w temacie DDD i oba artykuły które popełniłem, bardziej traktuje jako opis swojego researchu nad tematem. Tym bardziej fajnie jest mieć feedback od kogoś kto ma już pewne doświadczenie w tej dziedzinie. Jeżeli to możliwe, chciałbym zobaczyć Twoją pracę dyplomową wraz z kodem (oczywiście jak skończysz), może pokusisz się o publikacje jej w jakimś fachowym piśmie lub portalu ?
@michał wujas: mógłbyś podać przykład modelu domeny w którym są tak duże encje ?</description>
		<content:encoded><![CDATA[<p>@alan: przekonałeś mnie, chociaż szczerze powiem, że dopiero raczkuje w temacie DDD i oba artykuły które popełniłem, bardziej traktuje jako opis swojego researchu nad tematem. Tym bardziej fajnie jest mieć feedback od kogoś kto ma już pewne doświadczenie w tej dziedzinie. Jeżeli to możliwe, chciałbym zobaczyć Twoją pracę dyplomową wraz z kodem (oczywiście jak skończysz), może pokusisz się o publikacje jej w jakimś fachowym piśmie lub portalu ?<br />
@michał wujas: mógłbyś podać przykład modelu domeny w którym są tak duże encje ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Alan Gabriel Bem</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-224</link>
		<dc:creator>Alan Gabriel Bem</dc:creator>
		<pubDate>Wed, 28 Jul 2010 17:43:01 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-224</guid>
		<description>&lt;blockquote&gt;Co do zakwalifikowania Repozytoriów jako serwisy, wynika to z tego, że po pierwsze świadczą one usługi na rzecz klas domenowych, po drugie nie mają własnej tożsamości (nie są encjami), oraz atrybutów (nie są wartościami). Tak to wygląda z mojej perspektywy, jednak mogę się mylić ;)&lt;/blockquote&gt;

Ja się uczyłem, że serwisy powinny wykonywać logikę biznesową, która nie pasuje do żadnych z encji, stąd ich pełna nazwa &quot;Domain Services&quot; np.

&lt;pre&gt;&lt;code&gt;
$konto1-&gt;przelej(1000, $konto2); // przelewany 1000 dolców z rachunku 1 do rachunku 2
&lt;/code&gt;&lt;/pre&gt;

Z perspektywy &quot;czystości&quot; kodu jest ładnie i schludnie, ale z perspektywy eksperta dziedziny mamy wielkie WTF! - jak jedno konto może nadzorować przelew na drugie?

&lt;pre&gt;&lt;code&gt;
$przelewacz-&gt;przelej(1000, $konto1, $konto2); // przelewacz jest serwisem, nie encją
&lt;/code&gt;&lt;/pre&gt;

I już wszystko wróciło do normy.

Kiedyś na taką odpowiedź, od razu zapytałbym się &quot;taaaaa, mądralo? A gdzie ja mam niby wysyłać maile, jak nie w serwisie, po np. zapisaniu encji?&quot;. Podpowiem: &quot;Domain Events&quot; :)

Repozytoria natomiast są samodzielnymi i odrębnymi bytami (w świecie DDD), których zadaniem jest głównie &lt;em&gt;perzystencja obiektów&lt;/em&gt;. Nie wtryniają się w logikę biznesową.

&lt;blockquote&gt;wynika to jednak z faktu, że oba rodzaje obiektów zwykle dostajemy gotowe w ramach jakiegoś frameworku lub innych bibliotek (Doctrine czy kontener DI).&lt;/blockquote&gt;

1. Osobiście nigdy nie zastąpiłbym porządnej fabryki kontenerem IoC.
Aby lepiej zobrazować o co mi chodzi, zadam pytanie: Umiesz zastąpić buildera kontenerem? No właśnie nie bardzo - po prostu się nie da - a oba (builder i fabryka) robią to samo, &lt;em&gt;tworzą obiekt, który jest na tyle skomplikowany, że nie wystarczy zwykłe &lt;i&gt;new Object();&lt;/i&gt;&lt;/em&gt; - z tym, że builder pozwala ingerować w sam proces tego tworzenia.
Fabryki są częścią infrastruktury i jako takie nie powinny być zastępowane czymś co pochodzi z warstwy aplikacji (a tam rezyduje kontener).

2. Warstwa dziedziny jest świadoma interfejsu warstwy infrastruktury. Dlatego ja zawsze tworzę w niej (w. dziedziny) przynajmniej interfejsy dla repozytoriów, fabryk i serwisów. Te interfejsy, mogą potem być implementowane w warstwie infrastruktury przez np. repozytoria oparte o Doctrine2, ale też własne klasy z obsługą PDO, etc. - nie polegam tylko na tym co dostarczają mi narzędzia.

Nadmienię, że kontenera IoC używam już jednak przy pobieraniu fabryk.

&lt;blockquote&gt;Natomiast uważam, że najistotniejszą rzeczą w całym DDD jest właściwe wymodelowanie klas encji i serwisów. Bez tego, projekt w ddd raczej nie ma szans na szczęśliwy finisz.&lt;/blockquote&gt;

Dla mnie w idealnym projekcie DDD, dziedzina powinna być tak skończenie wymodelowana, że:
 - Każdy kto spojrzy na diagram od razu wie o co &quot;cho&quot;
 - Na podstawie implementacji kodu z tego diagramu można zbudować cała infrastrukturę (stąd te interfejsy)

Kończę właśnie aplikację do pracy dyplomowej - mały project manager - w którym, aby udowodnić tą tezę: warstwa dziedziny jest zupełnie innym projektem (logicznie: eer, bo jest warstwą dziedziny; fizycznie: mieści się w zupełnie innym repozytorium GIT). Cała warstwę infrastruktury mam już wewnątrz projektu głównej aplikacji (Symfony2 + Doctrine2).

P.S. Skasuj poprzedni post ;P Zrobiłem mały edit, żeby lepiej się czytało.</description>
		<content:encoded><![CDATA[<blockquote><p>Co do zakwalifikowania Repozytoriów jako serwisy, wynika to z tego, że po pierwsze świadczą one usługi na rzecz klas domenowych, po drugie nie mają własnej tożsamości (nie są encjami), oraz atrybutów (nie są wartościami). Tak to wygląda z mojej perspektywy, jednak mogę się mylić <img src='http://blog.wsoczynski.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p></blockquote>
<p>Ja się uczyłem, że serwisy powinny wykonywać logikę biznesową, która nie pasuje do żadnych z encji, stąd ich pełna nazwa &#8222;Domain Services&#8221; np.</p>
<pre><code>
$konto1-&gt;przelej(1000, $konto2); // przelewany 1000 dolców z rachunku 1 do rachunku 2
</code></pre>
<p>Z perspektywy &#8222;czystości&#8221; kodu jest ładnie i schludnie, ale z perspektywy eksperta dziedziny mamy wielkie WTF! &#8211; jak jedno konto może nadzorować przelew na drugie?</p>
<pre><code>
$przelewacz-&gt;przelej(1000, $konto1, $konto2); // przelewacz jest serwisem, nie encją
</code></pre>
<p>I już wszystko wróciło do normy.</p>
<p>Kiedyś na taką odpowiedź, od razu zapytałbym się &#8222;taaaaa, mądralo? A gdzie ja mam niby wysyłać maile, jak nie w serwisie, po np. zapisaniu encji?&#8221;. Podpowiem: &#8222;Domain Events&#8221; <img src='http://blog.wsoczynski.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Repozytoria natomiast są samodzielnymi i odrębnymi bytami (w świecie DDD), których zadaniem jest głównie <em>perzystencja obiektów</em>. Nie wtryniają się w logikę biznesową.</p>
<blockquote><p>wynika to jednak z faktu, że oba rodzaje obiektów zwykle dostajemy gotowe w ramach jakiegoś frameworku lub innych bibliotek (Doctrine czy kontener DI).</p></blockquote>
<p>1. Osobiście nigdy nie zastąpiłbym porządnej fabryki kontenerem IoC.<br />
Aby lepiej zobrazować o co mi chodzi, zadam pytanie: Umiesz zastąpić buildera kontenerem? No właśnie nie bardzo &#8211; po prostu się nie da &#8211; a oba (builder i fabryka) robią to samo, <em>tworzą obiekt, który jest na tyle skomplikowany, że nie wystarczy zwykłe <i>new Object();</i></em> &#8211; z tym, że builder pozwala ingerować w sam proces tego tworzenia.<br />
Fabryki są częścią infrastruktury i jako takie nie powinny być zastępowane czymś co pochodzi z warstwy aplikacji (a tam rezyduje kontener).</p>
<p>2. Warstwa dziedziny jest świadoma interfejsu warstwy infrastruktury. Dlatego ja zawsze tworzę w niej (w. dziedziny) przynajmniej interfejsy dla repozytoriów, fabryk i serwisów. Te interfejsy, mogą potem być implementowane w warstwie infrastruktury przez np. repozytoria oparte o Doctrine2, ale też własne klasy z obsługą PDO, etc. &#8211; nie polegam tylko na tym co dostarczają mi narzędzia.</p>
<p>Nadmienię, że kontenera IoC używam już jednak przy pobieraniu fabryk.</p>
<blockquote><p>Natomiast uważam, że najistotniejszą rzeczą w całym DDD jest właściwe wymodelowanie klas encji i serwisów. Bez tego, projekt w ddd raczej nie ma szans na szczęśliwy finisz.</p></blockquote>
<p>Dla mnie w idealnym projekcie DDD, dziedzina powinna być tak skończenie wymodelowana, że:<br />
 &#8211; Każdy kto spojrzy na diagram od razu wie o co &#8222;cho&#8221;<br />
 &#8211; Na podstawie implementacji kodu z tego diagramu można zbudować cała infrastrukturę (stąd te interfejsy)</p>
<p>Kończę właśnie aplikację do pracy dyplomowej &#8211; mały project manager &#8211; w którym, aby udowodnić tą tezę: warstwa dziedziny jest zupełnie innym projektem (logicznie: eer, bo jest warstwą dziedziny; fizycznie: mieści się w zupełnie innym repozytorium GIT). Cała warstwę infrastruktury mam już wewnątrz projektu głównej aplikacji (Symfony2 + Doctrine2).</p>
<p>P.S. Skasuj poprzedni post ;P Zrobiłem mały edit, żeby lepiej się czytało.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Michał Wujas</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-222</link>
		<dc:creator>Michał Wujas</dc:creator>
		<pubDate>Wed, 28 Jul 2010 16:34:12 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-222</guid>
		<description>Gdyby DDD dało się nauczyć na podstawie tutoriali pracę nad projektem gdzie jest kilkaset encji i banda programistów stałaby się znacznie przyjemniejsza ;-)
A encje w dużych projektach lubią się rozrastać do niemożliwych rozmiarów bo występują w bardzo różnych kontekstach i wtedy to już tylko zdrowy rozsądek ratuje...</description>
		<content:encoded><![CDATA[<p>Gdyby DDD dało się nauczyć na podstawie tutoriali pracę nad projektem gdzie jest kilkaset encji i banda programistów stałaby się znacznie przyjemniejsza <img src='http://blog.wsoczynski.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
A encje w dużych projektach lubią się rozrastać do niemożliwych rozmiarów bo występują w bardzo różnych kontekstach i wtedy to już tylko zdrowy rozsądek ratuje&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Wojciech Soczyński</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-221</link>
		<dc:creator>Wojciech Soczyński</dc:creator>
		<pubDate>Wed, 28 Jul 2010 15:42:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-221</guid>
		<description>Fakt, może trochę potraktowałem repozytoria i fabryki &quot;po łebkach&quot;, wynika to jednak z faktu, że oba rodzaje obiektów zwykle dostajemy gotowe w ramach jakiegoś frameworku lub innych bibliotek (Doctrine czy kontener DI). 
Natomiast uważam, że najistotniejszą rzeczą w całym DDD jest właściwe wymodelowanie klas encji i serwisów. Bez tego, projekt w ddd raczej nie ma szans na szczęśliwy finisz.
Co do zakwalifikowania Repozytoriów jako serwisy, wynika to z tego, że po pierwsze świadczą one usługi na rzecz klas domenowych, po drugie nie mają własnej tożsamości (nie są encjami), oraz atrybutów (nie są wartościami). Tak to wygląda z mojej perspektywy, jednak mogę się mylić ;)</description>
		<content:encoded><![CDATA[<p>Fakt, może trochę potraktowałem repozytoria i fabryki &#8222;po łebkach&#8221;, wynika to jednak z faktu, że oba rodzaje obiektów zwykle dostajemy gotowe w ramach jakiegoś frameworku lub innych bibliotek (Doctrine czy kontener DI).<br />
Natomiast uważam, że najistotniejszą rzeczą w całym DDD jest właściwe wymodelowanie klas encji i serwisów. Bez tego, projekt w ddd raczej nie ma szans na szczęśliwy finisz.<br />
Co do zakwalifikowania Repozytoriów jako serwisy, wynika to z tego, że po pierwsze świadczą one usługi na rzecz klas domenowych, po drugie nie mają własnej tożsamości (nie są encjami), oraz atrybutów (nie są wartościami). Tak to wygląda z mojej perspektywy, jednak mogę się mylić <img src='http://blog.wsoczynski.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Alan Gabriel Bem</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-220</link>
		<dc:creator>Alan Gabriel Bem</dc:creator>
		<pubDate>Wed, 28 Jul 2010 14:56:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-220</guid>
		<description>Ups, sorry, uciekł mi ten akapit mówiący o repozytoriach.

Mimo wszystko potraktowałeś je (repozytoria) bardzo po łebkach oraz nie mogę się z Tobą zgodzić, że repozytoria są serwisami.</description>
		<content:encoded><![CDATA[<p>Ups, sorry, uciekł mi ten akapit mówiący o repozytoriach.</p>
<p>Mimo wszystko potraktowałeś je (repozytoria) bardzo po łebkach oraz nie mogę się z Tobą zgodzić, że repozytoria są serwisami.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Alan Gabriel Bem</title>
		<link>http://blog.wsoczynski.pl/2010/07/28/domain-driven-design-pt-2-rodzaje-obiektow/comment-page-1/#comment-219</link>
		<dc:creator>Alan Gabriel Bem</dc:creator>
		<pubDate>Wed, 28 Jul 2010 14:52:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.wsoczynski.pl/?p=232#comment-219</guid>
		<description>Jak zwykle bardzo fajnie i rzeczowo.....


....ale jak mogłeś nie wspomnieć nic o repozytoriach (i ewentualnie o fabrykach), które odgrywają tak duża rolę w faktycznym podziale dziedzina-infrastruktura?

:)</description>
		<content:encoded><![CDATA[<p>Jak zwykle bardzo fajnie i rzeczowo&#8230;..</p>
<p>&#8230;.ale jak mogłeś nie wspomnieć nic o repozytoriach (i ewentualnie o fabrykach), które odgrywają tak duża rolę w faktycznym podziale dziedzina-infrastruktura?</p>
<p> <img src='http://blog.wsoczynski.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

