<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-8864435396524375431.post1670039962737219947..comments</id><updated>2009-11-12T13:15:12.235+02:00</updated><title type='text'>Comments on Систематизация автоматизации: Хороший дизайн должен быть SOLID: TOP-5 архитектур...</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://igor.quatrocode.com/feeds/1670039962737219947/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html'/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-2465254699152489562</id><published>2009-11-12T13:15:12.235+02:00</published><updated>2009-11-12T13:15:12.235+02:00</updated><title type='text'>Well, I can't fully agree with this opinion. I.e. ...</title><content type='html'>Well, I can&amp;#39;t fully agree with this opinion. I.e. modern languages like C# can&amp;#39;t check the behaviour aspects of the inheritance. Thats why the Design by contract approach with automated theormes proving is still on the very early stages of implementation.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/2465254699152489562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/2465254699152489562'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1258024512235#c2465254699152489562' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-5126173011365417227</id><published>2009-11-10T23:42:56.026+02:00</published><updated>2009-11-10T23:42:56.026+02:00</updated><title type='text'>Seems like OOP languages themselves give us a good...</title><content type='html'>Seems like OOP languages themselves give us a good examples of LSP-conforming system designs. This is why developers can simply upcast their objects without noticing LSP in this act :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5126173011365417227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5126173011365417227'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1257889376026#c5126173011365417227' title=''/><author><name>aarendar</name><uri>http://aarendar.wordpress.com/</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-5680257666240697915</id><published>2008-11-17T10:14:00.000+02:00</published><updated>2008-11-17T10:14:00.000+02:00</updated><title type='text'>&gt;&gt;Я иммел ввиду, что предпочтительней использовать...</title><content type='html'>&amp;gt;&amp;gt;Я иммел ввиду, что предпочтительней использовать интерфейсы (к вопросу о гибкости). &lt;BR/&gt;&amp;gt;&amp;gt; К тому же писать тесты к &amp;quot;интерфейсному коду&amp;quot; гораздо легче.&lt;BR/&gt;&lt;BR/&gt;И в чем была бы разница? Мы же не далем гибкость ради гибкости. Если есть ситуации в которых абстраный луче (а в данном примере он действительно лучше), то зачем городить интерфейс, а потом еще абстракную реализацию?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5680257666240697915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5680257666240697915'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1226909640000#c5680257666240697915' title=''/><author><name>Mike Chaliy</name><uri>http://dev.net.ua/blogs/mikechaliy/default.aspx</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-6691503693620723378</id><published>2008-10-27T01:24:00.000+02:00</published><updated>2008-10-27T01:24:00.000+02:00</updated><title type='text'>Ну, если так, то в данном конкретном случае этот и...</title><content type='html'>Ну, если так, то в данном конкретном случае этот интерфейс не не нес бы никакой смысловой нагрузки для примера. &lt;BR/&gt;&lt;BR/&gt;По этой же причине реализации методов заменены тремя точками :)&lt;BR/&gt;&lt;BR/&gt;Но в реальном коде в нем был бы смысл, безусловно.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/6691503693620723378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/6691503693620723378'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225063440000#c6691503693620723378' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3070063720845114327</id><published>2008-10-27T01:11:00.000+02:00</published><updated>2008-10-27T01:11:00.000+02:00</updated><title type='text'>"Или я что-то не понимаю, но если я просто вместо ...</title><content type='html'>"Или я что-то не понимаю, но если я просто вместо abstract class напишу interface - то я получу ошибки в духе "'HttpServiceClient' does not implement interface member 'ServiceClient.ServiceUri'". Так что, наврерное, не оно :)"&lt;BR/&gt;- ну если не реализовать, то и не скомпилится.&lt;BR/&gt;Я иммел ввиду, что предпочтительней использовать интерфейсы (к вопросу о гибкости). К тому же писать тесты к "интерфейсному коду" гораздо легче.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3070063720845114327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3070063720845114327'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225062660000#c3070063720845114327' title=''/><author><name>Kigorw</name><uri>http://www.kigorw.com</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-655879622272666383</id><published>2008-10-27T01:06:00.000+02:00</published><updated>2008-10-27T01:06:00.000+02:00</updated><title type='text'>А относительно TDD и спецификаций, то вы бы его по...</title><content type='html'>А относительно TDD и спецификаций, то вы бы его получили на стадии рефакторинга в какой-то момоент времени, а певое приближение дейтсвительно было бы классом с кучей методов.&lt;BR/&gt;&lt;BR/&gt;Но соглашусь, что все дейтсвительно зависит от ситуации и массы других предпослок. Посему стоит рассматривать вариант "стоит или не стоит городить спецификации" и рассуждать о сложности реализации тсключительно в конкретном контексте.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/655879622272666383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/655879622272666383'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225062360000#c655879622272666383' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-1503572483769793514</id><published>2008-10-27T01:00:00.000+02:00</published><updated>2008-10-27T01:00:00.000+02:00</updated><title type='text'>Или я что-то не понимаю, но если я просто вместо a...</title><content type='html'>Или я что-то не понимаю, но если я просто вместо abstract class напишу interface - то я получу ошибки в духе "'HttpServiceClient' does not implement interface member 'ServiceClient.ServiceUri'". Так что, наврерное, не оно :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1503572483769793514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1503572483769793514'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225062000000#c1503572483769793514' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3898829200798159158</id><published>2008-10-27T00:46:00.000+02:00</published><updated>2008-10-27T00:46:00.000+02:00</updated><title type='text'>public interface IServiceClient{    // Property de...</title><content type='html'>public interface IServiceClient&lt;BR/&gt;{&lt;BR/&gt;    // Property declaration:&lt;BR/&gt;    string ServiceUri&lt;BR/&gt;    {&lt;BR/&gt;        get;&lt;BR/&gt;        set;&lt;BR/&gt;    }&lt;BR/&gt;}&lt;BR/&gt;&lt;BR/&gt;- оно?&lt;BR/&gt;&lt;BR/&gt;"Вы же не станете утверждать, например, что IoC нужен только для того, чтобы клиент имел возможность гибкой конфигурации приложения?"&lt;BR/&gt;- не стану. Зато стану утверждать, что для этого всегда обязательно внедрять в проект Spring.NET или еще что-то подобное.&lt;BR/&gt;&lt;BR/&gt;Используя ТДД, я бы получил самое простое решение, которым Спецификация не является.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3898829200798159158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3898829200798159158'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225061160000#c3898829200798159158' title=''/><author><name>Kigorw</name><uri>http://www.blogger.com/profile/09850913869781508736</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3476600498731268605</id><published>2008-10-27T00:35:00.000+02:00</published><updated>2008-10-27T00:35:00.000+02:00</updated><title type='text'>Дело не в гибкости для клиента. Вы же не станете у...</title><content type='html'>Дело не в гибкости для клиента. Вы же не станете утверждать, например, что IoC нужен только для того, чтобы клиент имел возможность гибкой конфигурации приложения?&lt;BR/&gt;&lt;BR/&gt;Да и по объему кода едва ли разница столь значима, чтобы говорить о значительных преимуществах одного из методов.&lt;BR/&gt;&lt;BR/&gt;Кроме того, если вы будете использовать TDD, то у вас такое решение со спецификациями получиться само собой :)&lt;BR/&gt;&lt;BR/&gt;А по поводу интерфейсов я не понял, к чему вы клоните. Лучше приведите код :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3476600498731268605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3476600498731268605'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225060500000#c3476600498731268605' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-2713587428002200021</id><published>2008-10-27T00:13:00.000+02:00</published><updated>2008-10-27T00:13:00.000+02:00</updated><title type='text'>Дело в деньгах клиента, который платит. Гибкое реш...</title><content type='html'>Дело в деньгах клиента, который платит. Гибкое решение должно предполагать окупаемость.&lt;BR/&gt;&lt;BR/&gt;http://msdn.microsoft.com/en-us/library/64syzecx.aspx - на счет интерфейсов</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/2713587428002200021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/2713587428002200021'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225059180000#c2713587428002200021' title=''/><author><name>Kigorw</name><uri>http://www.blogger.com/profile/09850913869781508736</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-9025003547424576142</id><published>2008-10-26T23:55:00.000+02:00</published><updated>2008-10-26T23:55:00.000+02:00</updated><title type='text'>Дело не в количестве, а в качестве :)а abstract cl...</title><content type='html'>Дело не в количестве, а в качестве :)&lt;BR/&gt;&lt;BR/&gt;а abstract class ServiceClient, потому что там public string ServiceUri{ get; set; }</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/9025003547424576142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/9025003547424576142'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225058100000#c9025003547424576142' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17428314672741021655'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3852920253431692952</id><published>2008-10-26T23:45:00.000+02:00</published><updated>2008-10-26T23:45:00.000+02:00</updated><title type='text'>В случае с LogViewer - не факт, что для 3-5 методо...</title><content type='html'>В случае с LogViewer - не факт, что для 3-5 методов выборки есть смысл городить спецификацию.&lt;BR/&gt;&lt;BR/&gt;Почему &lt;BR/&gt;abstract class ServiceClient  &lt;BR/&gt;а не&lt;BR/&gt;interface ISeviceClient?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3852920253431692952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3852920253431692952'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1225057500000#c3852920253431692952' title=''/><author><name>Kigorw</name><uri>http://www.blogger.com/profile/09850913869781508736</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://igor.quatrocode.com/2008/09/solid-top-5.html' ref='tag:blogger.com,1999:blog-8864435396524375431.post-1670039962737219947' source='http://www.blogger.com/feeds/8864435396524375431/posts/default/1670039962737219947' type='text/html'/></entry></feed>