http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&feed=atom&action=history
TDD + DDD + MVP + GoF + PoEAA = Love! (AgileDays-2009) - История изменений
2024-03-29T08:19:50Z
История изменений этой страницы в вики
MediaWiki 1.26.4
http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&diff=42758&oldid=prev
VitaliyFilippov в 12:19, 23 июля 2013
2013-07-23T12:19:10Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 12:19, 23 июля 2013</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l105" >Строка 105:</td>
<td colspan="2" class="diff-lineno">Строка 105:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: Программирование (доклады)]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: Программирование (доклады)]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория:Архитектура (доклады)]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория:Архитектура (доклады)]]</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">{{replicate-from-custiswiki-to-lib}}</ins></div></td></tr>
</table>
VitaliyFilippov
http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&diff=31405&oldid=prev
StasFomin в 12:43, 18 октября 2011
2011-10-18T12:43:52Z
<p></p>
<table class='diff diff-contentalign-left'>
<tr style='vertical-align: top;' lang='ru'>
<td colspan='1' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='1' style="background-color: white; color:black; text-align: center;">Версия 12:43, 18 октября 2011</td>
</tr><tr><td colspan='2' style='text-align: center;' lang='ru'><div class="mw-diff-empty">(нет различий)</div>
</td></tr></table>
StasFomin
http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&diff=30451&oldid=prev
StasFomin в 18:18, 10 октября 2011
2011-10-10T18:18:23Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 18:18, 10 октября 2011</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l103" >Строка 103:</td>
<td colspan="2" class="diff-lineno">Строка 103:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: AgileDays-2009 (наша запись)]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: AgileDays-2009 (наша запись)]]</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Категория: Программирование (доклады)]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Категория:Архитектура (доклады)]]</ins></div></td></tr>
</table>
StasFomin
http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&diff=27358&oldid=prev
StasFomin в 18:11, 15 июня 2011
2011-06-15T18:11:51Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 18:11, 15 июня 2011</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l103" >Строка 103:</td>
<td colspan="2" class="diff-lineno">Строка 103:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: AgileDays-2009 (наша запись)]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: AgileDays-2009 (наша запись)]]</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;">[[Категория:Собрания AgileRussia.ru]]</del></div></td><td colspan="2"> </td></tr>
</table>
StasFomin
http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&diff=24739&oldid=prev
StasFomin в 15:23, 18 апреля 2011
2011-04-18T15:23:04Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 15:23, 18 апреля 2011</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1" >Строка 1:</td>
<td colspan="2" class="diff-lineno">Строка 1:</td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"><noinclude>{{ActualBanner2}}</noinclude></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== TDD + DDD + MVP + GoF + PoEAA = Love! ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== TDD + DDD + MVP + GoF + PoEAA = Love! ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>;Докладчик: [http://users.livejournal.com/_flykin_/ Антон Бевзюк] (Intel)</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>;Докладчик: [http://users.livejournal.com/_flykin_/ Антон Бевзюк] (Intel)</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l101" >Строка 101:</td>
<td colspan="2" class="diff-lineno">Строка 99:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>{{caution}} ''К сожалению, видео не совсем полное, мудак-оператор (я, [[Участник:StasFomin|Стас Фомин]]), куда-то задевал конец выступления. Сорри!''</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>{{caution}} ''К сожалению, видео не совсем полное, мудак-оператор (я, [[Участник:StasFomin|Стас Фомин]]), куда-то задевал конец выступления. Сорри!''</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"><noinclude>{{ActualBanner2}}</noinclude></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: AgileDays-2009 (наша запись)]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория: AgileDays-2009 (наша запись)]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория:Собрания AgileRussia.ru]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[Категория:Собрания AgileRussia.ru]]</div></td></tr>
</table>
StasFomin
http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&diff=24625&oldid=prev
StasFomin в 13:57, 17 апреля 2011
2011-04-17T13:57:16Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='ru'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Версия 13:57, 17 апреля 2011</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1" >Строка 1:</td>
<td colspan="2" class="diff-lineno">Строка 1:</td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"><noinclude>{{ActualBanner2}}</noinclude></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== TDD + DDD + MVP + GoF + PoEAA = Love! ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== TDD + DDD + MVP + GoF + PoEAA = Love! ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>;Докладчик: [http://users.livejournal.com/_flykin_/ Антон Бевзюк] (Intel)</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>;Докладчик: [http://users.livejournal.com/_flykin_/ Антон Бевзюк] (Intel)</div></td></tr>
</table>
StasFomin
http://lib.custis.ru/index.php?title=TDD_%2B_DDD_%2B_MVP_%2B_GoF_%2B_PoEAA_%3D_Love!_(AgileDays-2009)&diff=23354&oldid=prev
StasFomin: Новая страница: «== TDD + DDD + MVP + GoF + PoEAA = Love! == ;Докладчик: [http://users.livejournal.com/_flykin_/ Антон Бевзюк] (Intel) * http://www.slideshare.net...»
2011-03-02T12:21:17Z
<p>Новая страница: «== TDD + DDD + MVP + GoF + PoEAA = Love! == ;Докладчик: [http://users.livejournal.com/_flykin_/ Антон Бевзюк] (Intel) * http://www.slideshare.net...»</p>
<p><b>Новая страница</b></p><div>== TDD + DDD + MVP + GoF + PoEAA = Love! ==<br />
;Докладчик: [http://users.livejournal.com/_flykin_/ Антон Бевзюк] (Intel)<br />
* http://www.slideshare.net/Nfilippov/tdd-ddd-mvp-go-f-po-eaa-love<br />
<br />
----<br />
<small><br />
Наша команда имеет более чем 6-летний опыт использования гибких методологий.<br />
<br />
За это время мы разработали десятки бизнес-приложений. Мы используем передовые практики (Scrum, XP, Kanban) и шаблоны (GoF, PoEAA), доказавшие свою эффективность.<br />
<br />
Мы расскажем о том, как мы «поженили» все это разнообразие в одном финансовом приложении.<br />
Это приложение спроектировано по Domain-Driven Design (DDD), разработка ведется в строгом следовании парному программированию. Test-Driven Development (TDD) обеспечивает 100 %ное покрытие тестами бизнес-логики, а применение шаблонов MVP и Model-View-Viewmodel позволяет протестировать презентационную логику unit-тестами без применения внешних инструментов для тестирования интерфейса.<br />
<br />
Построенная доменная модель постоянно эволюционирует в соответствии с растущими и постоянно изменяющимися требованиями. Нам удалось добиться того, что изменения в коде проходят сравнительно легко из за гибкой, приспособленной к изменениям архитектуры и дизайна приложения. Это достигается за счет использования множества шаблонов проектирования (GoF, PoEAA, DDD).<br />
<br />
Отличительной особенностью нашего кода является то, что он вообще не содержит комментариев без ущерба для понимания. Код самодокументирующийся. Мы активно используем DSL для упрощения написания тестов. К настоящему моменту система содержит 4500+ тестов, которые выполняются не более 1 минуты.<br />
<br />
Наш доклад раскрывает ряд best practices в области программной инженерии, например:<br />
<br />
* Автоматизированный деплоймент (на развертывание приложения уходит около 10 минут, делается это одним кликом).<br />
* Специализированные парные станции<br />
* Совместное использование всех практик XP (синергетический эффект)<br />
* ''Kaizen'' (постоянный пересмотр как процесса разработки, так и самого кода)<br />
* Элементы fun’а<br />
<br />
В этом году мы успешно выдержали внешний и внутренний аудиты, нацеленные на анализ качества кода и оправданность использованных нами решений. Внешний аудит проводился специалистами Microsoft. По результатам этих проверок наш проект получил высокие оценки процесса и продукта.<br />
</small><br />
----<br />
<br />
{{slideshareembed|tdddddmvpgofpoeaalove-091215035619-phpapp02|640|480}}<br />
<br />
{{vimeoembed|8333707|640|512}}<br />
<br />
Краткое резюме описываемого проекта в цифрах (в стиле заставки [[RuPedia:Numb3rs|сериала «Numb3rs»]]:<br />
* <tt>2</tt> года<br />
* <tt>12</tt> разработчиков<br />
* <tt>50</tt> человеко-лет (''нет, вдумайтесь — это целая человеческая жизнь, по крайней мере, в разумном возрасте, среднего мужчины в РФ'')<br />
* <tt>32</tt> проекта в solution’е Visual Studio<br />
* <tt>3</tt>-хзвенная архитектура (WebForms/WinForms-клиент и MSSQL)<br />
* <tt>140000</tt> строк<br />
* <tt>100000</tt> из них — это строки <tt>5000</tt> тестов<br />
* <tt>20</tt> экранных форм<br />
* <tt>10</tt> Гб БД.<br />
<br />
{{note}} По нашим меркам, это совсем небольшой проект, с удивительно большими затратами людских и временных ресурсов. Впрочем, читателю лучше сделать самостоятельное сравнение с своими проектами, а для подсчета различных SLOC-метрик рекомендуем использовать утилиту [http://cloc.sf.net CLOC].<br />
<br />
Ребятам удалось активно заинтересовать аудиторию — ведь с одной строны продемонстрировано следование самым модным тенденциям в архитектуре и разработке, плюс удивительный факт, что их Intel-группа успешно прошла оценку аудиторами из Microsoft.<br />
С другой — таки осталось непонятно, оправдано ли это экономически.<br />
<br />
Из отзывов наших сотрудников:<br />
----<br />
<small><br />
С точки зрения архитектуры подход Intel’а отличается от книжного DDD, который описывал в своем докладе и Андрей Бибичев (например, если почитать [http://www.infoq.com/minibooks/domain-driven-design-quickly тут ]).<br />
Используя принцип ''Inversion of Control'', они изолируют сборку с классами домена от инфраструктуры. Таким образом, домен у них не зависит ни от чего, и поэтому хорошо портируется, тестируется, и легко переносит существенные изменения инфраструктуры. Именно это, «чистый домен», они и ставят во главу угла своего подхода.<br />
<br />
…Ребята также показались TDD-экстремистами, не знаю насколько это хорошо или плохо. Их мантры такие<br />
* Подумай->Напиши тест, который падает где ты ожидаешь -> Сделай минимальное исправление<br />
* Assert, по-хорошему, должен быть один, а исправление — минимальным. Если это не так, скорее всего нужен еще один тест.<br />
<br />
… Все-таки они там TDD-маньяки и стремятся оттестировать все, что можно, и что нельзя. С тестированием «чистого домена» все более-менее просто, а дальше они начали тестировать GUI. По опыту прошлых проектов было известно, что ручное и скриптовое тестирование малоэффективно и мучительно. Поэтому они начали думать, как приспособить инструменты и методики ''unit''-тестирования к тестированию GUI. Для этого они начали пересматривать архитектуру GUI-слоя (как неоднократно звучало, TDD — это не тесты, это методика проектирования!)<br />
<br />
… Докладчики рассмотрели несколько паттернов устройства GUI (''ModelViewController -> ModelViewPresenter -> ModelViewViewmodel''). Собственно, смысл этого сводится к тому, чтобы сделать View единственной и максимально простой, зависящей от платформы частью паттерна, а все остальное — покрыть тестами.<br />
<br />
… Я так понял, что этот подход позволил им достаточно безболезненно перевести клиента с WinForms на WebForms. С замечанием из зала о том, что для Web-интерфейса с активным использованием JavaScript’а на клиенте такой подход не работает, докладчикам пришлось, …, согласиться.<br />
<br />
… Докладчики с гордостью заявляли, что стараются тестировать все, что может сломаться и с чем бывают проблемы: код, конфигурации, хранимые процедуры, даже связывание (''binding'') GUI. Любопытно, что в тестах они проповедуют принцип «1 тест — 1 assert». Мне не очень понятно, как это можно реально соблюдать, не впадая в безумное дублирование, и какой в этом смысл. Книжное «сразу понятно, что сломалось» смешно — нам почему-то и без этого принципа обычно понятно, что сломалось.<br />
<br />
…Реализация DDD-подхода в данном случае состоит в том, что domain описан в отдельной сборке, которая является полностью независимой. Для обеспечения независимости используется прием ''Inversion-of-Control'' и одноименная библиотека.<br />
* Плата за такой чистый дизайн велика — для каждого типа доменный модели нужен еще тип, реализующий для него работу с базой<br />
* Зато 5000 тестов работают одну минуту.<br />
<br />
…Действительно впечатляющие данные — 5000 тестов у них выполняются за минуту.<br />
Около 200 тестов, все-таки требующих наличия БД, у них выполняются минут за 10 и их запускают нечасто.<br />
<br />
…Тесты, как известно, должны быть максимально простыми и выразительными. Поэтому они активно используют в тестах всякие практики типа ''FluentInterfaces'', а также забавные методы-расширения, например, для задания дат в виде 11.12.of2009().<br />
<br />
… При написании тестов использует свои ''embedded DSL''. Например, вот такое:<br />
<code-csharp><br />
var testDate = 11.12.of2009<br />
<br />
public static class DoubleExtensions<br />
{<br />
public DateTime of2009(this double date)<br />
{<br />
return new DateTime((int)date.Floor(), (int)(date-date.Floor())*100, 2009)<br />
}<br />
<br />
}<br />
</code-csharp><br />
<br />
…Много обсуждаемая в форумах по архитектуре (например, [http://rsdn.ru/Forum/MsgList.aspx?group=design здесь]) проблема — как отделять домен от инфраструктуры доступа к данным так, чтобы это было красиво и удобно. Они для этого активно используют паттерн ''Specification'' с возможностью сложных операций над спецификациями.<br />
<br />
…Не со всем хочется согласиться, но заставляет задуматься, что можно улучшить в наших системах с точки зрения общей архитектуры/тестопригодности. Выкладывать свой ''framework'' как пример архитектурного паттерна они отказываются, ссылаясь на коммерческую тайну.<br />
</small><br />
<br />
----<br />
<br />
Кстати, повторимся, дискуссия о «правильном DDD» продолжилась и в [http://users.livejournal.com/_flykin_/101026.html онлайне]. Присоединяйтесь к ней, если есть конструктивные замечания.<br />
<br />
{{caution}} ''К сожалению, видео не совсем полное, мудак-оператор (я, [[Участник:StasFomin|Стас Фомин]]), куда-то задевал конец выступления. Сорри!''<br />
<br />
[[Категория: AgileDays-2009 (наша запись)]]<br />
<br />
[[Категория:Собрания AgileRussia.ru]]</div>
StasFomin