<?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>2011-09-21T15:08:37.365+03:00</updated><category term='SOLID'/><category term='LINQ'/><category term='Domain Driven Design'/><category term='jQuery'/><category term='Architecture'/><category term='REST'/><category term='OOD'/><category term='community'/><category term='IIS'/><category term='SOA'/><category term='Microsoft SQL Server'/><category term='ASP.NET'/><category term='TDD'/><category term='Agile'/><category term='WCF'/><category term='DSL'/><category term='Scrum'/><category term='Nemerle'/><category term='memcached'/><category term='NHibernate'/><category term='Patterns'/><category term='DDD'/><category term='ADO.NET Data Services'/><category term='distributed memory object caching system'/><category term='Defensive Programming'/><category term='kievaltnet'/><category term='Интеграция приложений'/><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><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-1072007889853425039</id><published>2011-09-20T23:02:23.177+03:00</published><updated>2011-09-20T23:02:23.177+03:00</updated><title type='text'>Ну и YAGNI конечно</title><content type='html'>Ну и YAGNI конечно</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1072007889853425039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1072007889853425039'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1316548943177#c1072007889853425039' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rMuuPtfsjzE/SQs3w9oK1ZI/AAAAAAAAFfU/m08xMedZGFU/S220/avatar.jpg'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-1957938911982646253</id><published>2011-09-20T23:01:09.927+03:00</published><updated>2011-09-20T23:01:09.927+03:00</updated><title type='text'>Как учебный пример, может и нет. Но в качестве при...</title><content type='html'>Как учебный пример, может и нет. Но в качестве примера боевого коде - why not, вполне. Главное, не забывать про DRY и KISS при этом :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1957938911982646253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1957938911982646253'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1316548869927#c1957938911982646253' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rMuuPtfsjzE/SQs3w9oK1ZI/AAAAAAAAFfU/m08xMedZGFU/S220/avatar.jpg'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-4314589601216697018</id><published>2011-09-20T18:33:08.227+03:00</published><updated>2011-09-20T18:33:08.227+03:00</updated><title type='text'>Спасибо за ответ :)
Я понимаю, что нужно использов...</title><content type='html'>Спасибо за ответ :)&lt;br /&gt;Я понимаю, что нужно использовать эти принципы с самого начала проектирования системы. Я сейчас тренируюсь в agile-разработке, и, соответственно, применяю все этапы проектирования: диаграммы, потом тесты, а потом уже код. И это буквально &amp;quot;вынуждает&amp;quot; писать гибкий код, используя все эти архитектурные принципы.&lt;br /&gt;Это я к тому, что часто бывает так: спроектированная поначалу бизнес-сущность выглядит как один модуль, а на этапе кодирования приходится разделять ее на несколько более мелких. Опять же, следуя принципу SRP. &lt;br /&gt;Пример, который я приводил в комментарии выше, является хорошим приемом организации SRP на уровне кодирования?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/4314589601216697018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/4314589601216697018'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1316532788227#c4314589601216697018' title=''/><author><name>IFeelGood</name><uri>http://alekseev74.ru</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1645973403'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-5168115733749118561</id><published>2011-09-20T12:33:07.434+03:00</published><updated>2011-09-20T12:33:07.434+03:00</updated><title type='text'>IFeelGood,

Слово &amp;quot;макстимально&amp;quot; тут лиш...</title><content type='html'>IFeelGood,&lt;br /&gt;&lt;br /&gt;Слово &amp;quot;макстимально&amp;quot; тут лишнее. Что чрезмерно - то не здраво, и использование принципов ради принципов не дает хорошего результата. Добавление вороха лишних абстракций разделит обязанности, но привнесет дополнительную сложность, с которой вам придется бороться с куда большим усердием, чем с, о боже, реализацией active record :)&lt;br /&gt;&lt;br /&gt;Для оценки качества исполнения принципа SRP могу порекомендовать попытаться сформулировать обязанности класса обычным человеческим языком. Если если получается средних размеров повесть, значит все плохо :) В идеале все должно вписываться в одном предложение.&lt;br /&gt;&lt;br /&gt;Кроме того, никоим образом эти принципы не рулят правилами организации приватных внутренностей классов. Тут уже каждый сам для себя решает что и как делать, главное, чтобы снаружи все вело себя предсказуемо, а зависимая логика может быть и спрятана, и заведена снаружи в виде неких дополнительных компонентов. Подумайте о том, как бы будете тестировать эту логику - это тоже поможет все грамотно раздедить.&lt;br /&gt;&lt;br /&gt;Ну и последнее: штука в том, что сами по себе синтаксические конструкции со словом class в начале не всегда соответствуют логическому понятию класса объектов. Код - это достаточно низкий уровень дизайна системы из за бедности современных языков программирования. Классический пример - понятия agregate roots и entities в сравнениии  с value objects в паттернах DDD: единственная точка входа в логику - это корень агрегата, который за собой может прятать с десяток других классов, но вместе образовывать тот самый единый класс в терминах теории ООП. Или взять тот же aggregate root, но реализованый в виде event source-а. Т.е. к этому агрегату добавляется еще пачка связанных событий и какой-то странный код по их обработке. В квадратиках все выглядит очень просто, но в коде получается куча синтаксического мусора. Кроме того, даже такие высокоуровневые логические понятия, как агрегаты тоже могут составлять конструкции еще более высоких уровней - домены логики, модули систем и т.д.&lt;br /&gt;&lt;br /&gt;Все это к тому, что не стоит рассматривать эти архитектурные принципы исключительно на уровне правил кодирования некой логики в виде каких-то конкретных языковых конструкций какого-то конкретного языка программирования, которые по странному стечению обстоятельств поддерживают понятие интерфейсов и прочих приватных методов. Пользуйтесь ими на всех уровнях дизайна вашей системы, и тогда в этом действительно будет смысл.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5168115733749118561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5168115733749118561'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1316511187434#c5168115733749118561' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rMuuPtfsjzE/SQs3w9oK1ZI/AAAAAAAAFfU/m08xMedZGFU/S220/avatar.jpg'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-3121369336740356601</id><published>2011-09-20T11:33:29.842+03:00</published><updated>2011-09-20T11:33:29.842+03:00</updated><title type='text'>Вопрос по принципу SRP (хочется уточнить, правильн...</title><content type='html'>Вопрос по принципу SRP (хочется уточнить, правильно ли я понимаю принцип?):&lt;br /&gt;Нужно максимально стремиться специализировать класс, например, отделить бизнес-логику от сохранения данных в БД.&lt;br /&gt;Также следует специализировать все открытые методы класса, которые составляют его интерфейс. Например, метод: int CalculateDiscount(int price) - вычисляет скидку и ничего более.&lt;br /&gt;Если же для успешной реализации такого метода требуется дополнительная бизнес-логика, то ее нужно вынести в отдельные вспомогательные private-методы, которые не являются открытым интерфейсом класса.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3121369336740356601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/3121369336740356601'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1316507609842#c3121369336740356601' title=''/><author><name>IFeelGood</name><uri>http://alekseev74.ru</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1135359056'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-5828524532031543556</id><published>2010-12-01T11:33:36.471+02:00</published><updated>2010-12-01T11:33:36.471+02:00</updated><title type='text'>Спасибо за статью.</title><content type='html'>Спасибо за статью.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5828524532031543556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/5828524532031543556'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1291196016471#c5828524532031543556' title=''/><author><name>Макс</name><uri>http://www.blogger.com/profile/05019676306636366465</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_beg7LplsYfo/S6pOtAMNywI/AAAAAAAAAAs/1BXrDy9pQs0/S220/DSC_7827_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82_%D1%82%D0%BE%D0%BD_very_small.jpg'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1543727553'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-4840684248234147040</id><published>2010-04-20T16:11:13.880+03:00</published><updated>2010-04-20T16:11:13.880+03:00</updated><title type='text'>Thanks! Good job.</title><content type='html'>Thanks! Good job.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/4840684248234147040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/4840684248234147040'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1271769073880#c4840684248234147040' title=''/><author><name>Denis</name><uri>http://www.blogger.com/profile/12932490740723886910</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_O9n7PKwY_2o/S6M3xIzuy-I/AAAAAAAAFQ8/GZOyWVxHyIU/s1600-R/image%3Fid%3D128341'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-307633747'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-1311577682521545105</id><published>2010-04-12T13:27:59.999+03:00</published><updated>2010-04-12T13:27:59.999+03:00</updated><title type='text'>Спасибо, поправил :)</title><content type='html'>Спасибо, поправил :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1311577682521545105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1311577682521545105'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1271068079999#c1311577682521545105' title=''/><author><name>Igor</name><uri>http://www.blogger.com/profile/10232785741897411593</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rMuuPtfsjzE/SQs3w9oK1ZI/AAAAAAAAFfU/m08xMedZGFU/S220/avatar.jpg'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></entry><entry><id>tag:blogger.com,1999:blog-8864435396524375431.post-1185835611860940609</id><published>2010-04-12T13:11:54.155+03:00</published><updated>2010-04-12T13:11:54.155+03:00</updated><title type='text'>Поправьте, пожалуйста:
Принцип замещения Лисков:
....</title><content type='html'>Поправьте, пожалуйста:&lt;br /&gt;Принцип замещения Лисков:&lt;br /&gt;...поведение P не будет меняться, если o1 заменить на o2.&lt;br /&gt;вы перепутали о1 и о2 местами, &lt;br /&gt;и для понимания будет лучше, если, как в Википедии, объекты типа (Type) и подтипа (Subtype) обозначить oT и oS соответственно.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1185835611860940609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8864435396524375431/1670039962737219947/comments/default/1185835611860940609'/><link rel='alternate' type='text/html' href='http://igor.quatrocode.com/2008/09/solid-top-5.html?showComment=1271067114155#c1185835611860940609' title=''/><author><name>Anatoly R.</name><uri>http://www.blogger.com/profile/13910100045749886568</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1021479550'/></entry><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&amp;#39;t fully agree with this opinion. I...</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:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_rMuuPtfsjzE/SQs3w9oK1ZI/AAAAAAAAFfU/m08xMedZGFU/S220/avatar.jpg'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></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><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-77996725'/></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'>&amp;gt;&amp;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><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1123860456'/></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:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></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><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-820665691'/></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:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></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:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></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&lt;br&gt;{&lt;br&gt;    // Pro...</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><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1488110287'/></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:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></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><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1488110287'/></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'>Дело не в количестве, а в качестве :)&lt;br&gt;&lt;br&gt;а abs...</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:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-619904363'/></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><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1488110287'/></entry></feed>
