<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/engineerspock/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя engineerspock]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Fri, 01 May 2026 19:05:11 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Объединение .NET-сообществ]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/jugru/articles/334476/</guid>
      <link>https://habr.com/ru/companies/jugru/articles/334476/?utm_campaign=334476&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/web/158/119/4ea/1581194eafd2457d9856fff6607b026f.jpg"><br>
<br>
Вот уже несколько лет в России развивается движение открытых .NET-сообществ. Первопроходцем стало питерское <a href="https://vk.com/spbdotnet"><b>сообщество SpbDotNet</b></a>, стартовавшем в 2015 году. Последователем питерского сообщества стало московское сообщество <a href="https://vk.com/mskdotnet"><b>MskDotNet</b></a>, проводящее встречи с 2016 года. Разумеется, оба сообщества очень хорошо дружат и оказывают посильную взаимопомощь. С начала создания сообществ были <b>проведены десятки встреч, рассказаны более сотни докладов.</b> Отлично! Давайте немного поговорим о настоящем и будущем .NET движений.<br>
<br>
<h2>День сегодняшний</h2><br>
За время существования наших замечательных коммьюнити были проведены <b>десятки встреч, обсуждены тысячи вопросов,</b> как в форме докладов, так и в форме живого общения в кулуарах. Многие познакомились с новыми коллегами, обзавелись полезными связями, нашли ответы на интересующие их вопросы, получили море позитива, а кто-то даже нашёл новых друзей. Те, кто по каким-либо причинам не посещают, или не могут посетить наши встречи вживую — <b>смотрят наши видео на youtube.</b> Кстати, на данный момент наш <a href="https://www.youtube.com/channel/UCHFl23Ah_l4gEUTXYUStQdQ">YouTube-канал </a> пополняется записями и с MskDotNet и c SpbDotNet. На нём <b>выложены уже более 70 видео с докладами.</b> Звучит просто отлично!<br> <a href="https://habr.com/ru/articles/334476/?utm_campaign=334476&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Mon, 15 Jan 2018 13:04:48 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock (JUG Ru Group)]]></dc:creator>
      <category><![CDATA[Блог компании JUG Ru Group]]></category><category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Visual Studio]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[DotNetRu]]></category><category><![CDATA[SpbDotNet]]></category><category><![CDATA[MskDotNet]]></category><category><![CDATA[SarDotNet]]></category><category><![CDATA[KryDotNet]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[DotNext + SpbDotNet + MskDotNet]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/jugru/articles/341334/</guid>
      <link>https://habr.com/ru/companies/jugru/articles/341334/?utm_campaign=341334&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/webt/o0/zv/ou/o0zvoufnx_nyrjni_mjihnhzf_o.jpeg" alt="image"><br>
<br>
DotNet-коммьюнити снова на связи. Спешу сообщить, что коммьюнити .NET по-прежнему живут и развиваются! Поскольку все уже и так знают про наши .NET сообщества, не будем растекаться мыслью по древу, а перейдём сразу к делу!<br>
<br>
Преждем чем проанонсировать новые меропириятия MskDotNet и SpbDotNet, хотелось бы сказать несколько слов о связи старшего брата — DotNext и локальных коммьюнити. Поехали!<br> <a href="https://habr.com/ru/articles/341334/?utm_campaign=341334&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Mon, 06 Nov 2017 13:10:47 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock (JUG Ru Group)]]></dc:creator>
      <category><![CDATA[Блог компании JUG Ru Group]]></category><category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category>
      <category><![CDATA[dotnext]]></category><category><![CDATA[dotnext2017moscow]]></category><category><![CDATA[mskdotnet]]></category><category><![CDATA[spbdotnet]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[9-я встреча MSK.NET Community]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/jugru/articles/325736/</guid>
      <link>https://habr.com/ru/companies/jugru/articles/325736/?utm_campaign=325736&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/post_images/1a4/3c2/d75/1a43c2d75510458ec136dd3cce8d4acf.jpg" alt="image"/><br/>
<br/>
Всем привет, <b>MSK.NET</b> говорит. В марте мы встречались на площадке Digital October и обсуждали Internet of Things. Встреча как всегда прошла в тёплой и дружественной атмосфере. Теперь мы знаем как и с чем едят IoT. Очень приятно было видеть множество новых лиц.<br/>
<br/>
Но хватит уже отдыхать, пора браться за работу! <br/>
 <a href="https://habr.com/ru/articles/325736/?utm_campaign=325736&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 07 Apr 2017 05:41:45 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock (JUG Ru Group)]]></dc:creator>
      <category><![CDATA[Блог компании JUG Ru Group]]></category><category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Visual Studio]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[msk.net]]></category><category><![CDATA[.net user group]]></category><category><![CDATA[c#]]></category><category><![CDATA[c#.net]]></category><category><![CDATA[.net]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Митап MSK.NET Community]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/jugru/articles/324076/</guid>
      <link>https://habr.com/ru/companies/jugru/articles/324076/?utm_campaign=324076&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/post_images/465/52f/a96/46552fa96705b96fe5722b1db3397a23.jpg"><br>
<br>
Всем привет, друзья!<br>
<br>
В июне 2015 года состоялась первая встреча <a href="https://vk.com/spbdotnet">SPB.NET Community</a>. Уверен, что многие из вас не только слышали о таком коммьюнити, но и смотрели отличные выступления с митапов SPB.NET (а многие и посещали встречи). Коммьюнити стало развиваться очень бодро и энтузиасты из Москвы, подхватив хороший настрой, решили создать своё локальное коммьюнити — <b>MSK.NET</b>.<br> <a href="https://habr.com/ru/articles/324076/?utm_campaign=324076&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 17 Mar 2017 06:06:04 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock (JUG Ru Group)]]></dc:creator>
      <category><![CDATA[Блог компании JUG Ru Group]]></category><category><![CDATA[.NET]]></category><category><![CDATA[Visual Studio]]></category><category><![CDATA[C#]]></category><category><![CDATA[Интернет вещей]]></category>
      <category><![CDATA[MSK.NET]]></category><category><![CDATA[.net user group]]></category><category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[.net development]]></category><category><![CDATA[meetup]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Скрытые зависимости как «запах» проектирования]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/270547/</guid>
      <link>https://habr.com/ru/articles/270547/?utm_campaign=270547&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<a href="http://blog.ploeh.dk/about.html">Марк Симан</a> написал <a href="http://habrahabr.ru/post/270005/">замечательный пост «Service Locator нарушает инкапсуляцию».</a> Название поста говорит само за себя о том, что он посвящён паттерну (анти-паттерну) <i>Service Locator</i>. Когда программист произвольно в коде вызывает IoC-контейнер для разрешения зависимости того или иного объекта — он использует <i>Service Locator</i> анти\паттерн. Марк рассматривает следующий пример:<br/>
<pre><code class="cs">public class OrderProcessor : IOrderProcessor
{
    public void Process(Order order)
    {
        var validator = Locator.Resolve&lt;IOrderValidator&gt;();
        if (validator.Validate(order))
        {
            var shipper = Locator.Resolve&lt;IOrderShipper&gt;();
            shipper.Ship(order);
        }
    }
}
</code></pre><br/>
 <a href="https://habr.com/ru/articles/270547/?utm_campaign=270547&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 10 Nov 2015 04:18:48 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category>Service Locator</category><category>DI</category><category>IoC</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Service Locator нарушает инкапсуляцию]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/270005/</guid>
      <link>https://habr.com/ru/articles/270005/?utm_campaign=270005&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<i>Service Locator нарушает инкапсуляцию в статически типизированных языках, потому что этот паттерн нечётко выражает предусловия.</i><br/>
<br/>
Лошадь уже давно мертва, но некоторые до сих пор хотят на ней поездить, так что я пну эту лошадь ещё раз. Годами я предпринимал попытки объяснить почему <a href="http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern">Service Locator это антипаттерн</a> (например, он <a href="http://blog.ploeh.dk/2014/05/15/service-locator-violates-solid">нарушает SOLID</a>), но недавно меня осенила мысль, что большая часть моих аргументов фокусировалась на <i>симптомах</i>, упуская из внимания фундаментальную проблему.<br/>
 <a href="https://habr.com/ru/articles/270005/?utm_campaign=270005&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 03 Nov 2015 04:32:45 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category>Рефакторинг</category><category>Service Locator</category><category>Архитектура</category><category>IoC</category><category>DI</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Рефакторинг: выделяй метод, когда это имеет смысл]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/263371/</guid>
      <link>https://habr.com/ru/articles/263371/?utm_campaign=263371&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Сейчас уже сложно вспомнить тот момент, когда я впервые осознал, что выделять функции из больших кусков полезного кода, вообще-то, хорошая идея. То ли я получил это знание из <a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1">“Совершенного кода”</a>, то ли из <a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_2">“Чистого кода”</a> — сложно вспомнить. В целом, это не особенно важно. Мы все знаем, что должны разносить бизнес-логику по хорошо проименованным функциям. Самая длинная функция, которую я когда-либо видео в жизни была длиной в 5к строк. Я лично знаком с тем “программистом”, что написал тот код. Помню, как впервые встретил эту функцию. Не сложно предсказать, что моей первой реакцией было: “Какого чёрта!!! Кто произвёл на свет этот кусок дерьма???”<br/>
Да, представьте себе, этот “программист” до сих пор слоняется тут в офисе, где я сейчас работаю над текущими проектами. Не хочу углубляться в эту историю, но хочу упомянуть, что та функция длиной в 5к строк была ядром программы, размером примерно в 150к строк. Разработка программы в конце концов зашла в тупик, из-за той ужасной функции, которая крайне негативно влияла на архитектуру приложения. В конце концов было принято решение о переписывании приложения с нуля.<br/>
 <a href="https://habr.com/ru/articles/263371/?utm_campaign=263371&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Thu, 23 Jul 2015 09:08:44 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category>рефакторинг</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] GTD от Джона Сонмеза]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/292734/</guid>
      <link>https://habr.com/ru/articles/292734/?utm_campaign=292734&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<a href="http://megamozg.ru/post/17620/"><img src="https://habrastorage.org/getpro/megamozg/post_images/a28/fd6/e39/a28fd6e39db5b1932ab585e390466a77.jpg" align="left" alt="image"/></a><br/>
Я почти закончил чтение книги, написаной <a href="http://simpleprogrammer.com/">Джоном Сонмезом</a> (известный блогер, разработчик ПО и автор множества <a href="http://www.pluralsight.com/author/john-sonmez">курсов Pluralsight</a>) — <a href="http://www.amazon.com/Soft-Skills-software-developers-manual/dp/1617292397">«Soft Skills: The software developer's life manual»</a>. Должен сказать, что книга очень легко читается, она полна ценных советов и в большой степени практична. И время от времени она смешная. В книге множество интересных разделов, но сегодня я хотел бы выжать наиболее интересные мысли из раздела, посвящённого <i>продуктивности.</i><br/>
 <a href="https://habr.com/ru/articles/292734/?utm_campaign=292734&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 20 Jul 2015 09:19:24 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[GTD]]></category>
      <category>gtd организация времени</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Немного практической криптографии под .NET для чайников]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/254909/</guid>
      <link>https://habr.com/ru/articles/254909/?utm_campaign=254909&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<a href="http://habrahabr.ru/post/254909/"><img src="https://habrastorage.org/getpro/habr/post_images/f3c/b5f/f0f/f3cb5ff0f3019c035c30c669123d6af8.jpg" alt="image"/></a><br/>
<br/>
Это краткое введение в криптографию под .NET для чайников, как и следует из заголовка. Здесь будут простые вещи и никаких углубленных знаний.<br/>
<br/>
 <a href="https://habr.com/ru/articles/254909/?utm_campaign=254909&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 20 Jul 2015 09:17:05 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Криптография]]></category>
      <category><![CDATA[криптография]]></category><category><![CDATA[C#]]></category><category><![CDATA[.NET]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Обзор книги «Паттерны проектирования на платформе .NET»]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/260649/</guid>
      <link>https://habr.com/ru/articles/260649/?utm_campaign=260649&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Как известно, недавно была <a href="http://habrahabr.ru/company/piter/blog/257721/">опубликована книга по паттернам проектирования</a> за авторством <a href="http://habrahabr.ru/users/SergeyT/">Сергея Теплякова</a>.<br/>
<br/>
Дабы поддержать мною уважаемого нашего разработчика (сам Сергей, несмотря на переезд заграницу, всё ещё считает себя нашим — за пруфом идите к нему в блог), не пожалел денег и сразу же купил электронную версию. До этого я читал <a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;qid=1434696099&amp;sr=8-1&amp;keywords=gamma+helm">банду четырёх</a> и <a href="http://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&amp;qid=1434649749&amp;sr=8-1&amp;keywords=design+patterns">Design Patterns Head First</a>, поэтому, в принципе, есть с чем сравнить.<br/>
Книга занимает чуть более 300 страниц, что вполне можно осилить за неделю неторопливого чтения. Книга разбита на 4 части:<br/>
<ol>
<li>Паттерны поведения </li>
<li>Порождающие паттерны </li>
<li>Структурные паттерны </li>
<li>Принципы проектирования </li>
</ol> <a href="https://habr.com/ru/articles/260649/?utm_campaign=260649&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 19 Jun 2015 07:25:28 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category><![CDATA[проектирование]]></category><category><![CDATA[.net]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Тернии вокруг золота]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/254951/</guid>
      <link>https://habr.com/ru/articles/254951/?utm_campaign=254951&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<i>Примечание автора: это перевод статьи Боба Мартина.</i><br/>
На написание этой статьи меня вдохновила <a href="http://blog.ploeh.dk/2014/11/18/the-isnullorwhitespace-trap/">статья Марка Симана «The IsNullOrWhiteSpace trap»</a> (@ploeh). Статья Марка кратко и хорошо изложена. Пожалуйста, прочитайте сначала её, прежде чем продолжать читать данную.<br/>
Ловушка, о которой рассказывает Марк, это частный случай более общей ловушки, которую я называю <i>воровством золота</i>. Я могу продемонстрировать эту ловушку, возвращаясь обратно к статье Марка.<br/>
<br/>
Заметьте, что первый тест, который написал Марк выглядел следующим образом:<br/>
<br/>
<pre><code class="cs">[InlineData(&quot;Seven Lions Polarized&quot;  , &quot;LIONS POLARIZED SEVEN&quot;  )]
[InlineData(&quot;seven lions polarized&quot;  , &quot;LIONS POLARIZED SEVEN&quot;  )]
[InlineData(&quot;Polarized seven lions&quot;  , &quot;LIONS POLARIZED SEVEN&quot;  )]
[InlineData(&quot;Au5 Crystal Mathematics&quot;, &quot;AU5 CRYSTAL MATHEMATICS&quot;)]
[InlineData(&quot;crystal mathematics au5&quot;, &quot;AU5 CRYSTAL MATHEMATICS&quot;)]
</code></pre><br/>
Он уже попал в ловушку. Почему? Потому что он уже украл <i>золото</i>.<br/>
 <a href="https://habr.com/ru/articles/254951/?utm_campaign=254951&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 05 Apr 2015 15:18:27 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[TDD]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category>TDD</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Money как Value Object]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/254837/</guid>
      <link>https://habr.com/ru/articles/254837/?utm_campaign=254837&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Описываемая проблема в статье давно и хорошо известна, поэтому она по большей части для новичков, которые не знакомы с темой.<br/>
<br/>
В ПО, которое разрабатывает наша команда используются денежные значения в рублях и копейках. Мы изначально знали, что использование примитивов для выражения денежных значений — это антипаттерн. Однако по мере разработки приложения мы всё никак не могли наткнуться на проблемы связанные с использованием примитивов, нам, видимо, везло и всё было нормально. До поры до времени.<br/>
Мы совсем забыли про эту проблему и использование примитивов типа int и decimal расползлось по всей системе. И теперь, когда мы написали первый метод, в котором прочувствовали проблему, пришлось вспомнить про это технический долг и переписать всё на использование денежной абстракции вместо примитивов.<br/>
 <a href="https://habr.com/ru/articles/254837/?utm_campaign=254837&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 03 Apr 2015 13:54:52 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category><![CDATA[.net]]></category><category><![CDATA[c#]]></category><category><![CDATA[Value Object]]></category><category><![CDATA[одержимость примитивами]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Никто не умеет обрабатывать ошибки]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/221723/</guid>
      <link>https://habr.com/ru/articles/221723/?utm_campaign=221723&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Из одной книги в другую, из статьи в статью кочует мнение о том, что выражение <br/>
<br/>
<pre><code class="cs">try {
   //do something
}
catch(Exception ex) {
}
</code></pre> <br/>
является плохой практикой. Возврат кодов – также плохая практика. Но становится ли нам, программистам, жить легче с этими знаниями и так уж ли они неоспоримы? И самый забавный вопрос – кто-нибудь в мире умеет грамотно обрабатывать ошибки, возникающие по ходу работы приложения? (под этим я понимаю обработку только тех ошибок, которые имеет смысл обрабатывать и вывод сообщений об ошибках, которые соответствуют действительно произошедшей, которые не вводят пользователя в замешательство, а в идеале и предлагают решение возникшей проблемы).<br/>
 <a href="https://habr.com/ru/articles/221723/?utm_campaign=221723&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Подробности под катом</a>]]></description>
      
      <pubDate>Sun, 04 May 2014 12:58:59 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[.NET]]></category><category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[обработка ошибок]]></category><category><![CDATA[лучшие практики]]></category><category><![CDATA[обработка исключений]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] «Запах» проектирования: временная связность]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/205114/</guid>
      <link>https://habr.com/ru/articles/205114/?utm_campaign=205114&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Это первый пост из серии о <a href="http://habrahabr.ru/post/205086/">Poka-yoke проектировании</a> – также известном, как <i>инкапсуляция</i>.<br/>
<br/>
Известной проблемой в проектировании API является <i>временн<b>а</b>я связность</i>, которая получается в том случае, если в классе присутствуют скрытые отношения между двумя или более членами, требующие от клиента правильной последовательности вызовов. Это жёстко связывает члены класса во временном разрезе.<br/>
 <a href="https://habr.com/ru/articles/205114/?utm_campaign=205114&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 06 Dec 2013 12:21:19 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category>mark seemann</category><category>инкапсуляция</category><category>best practices</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] На границах, приложения не являются объектно-ориентированными]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/205108/</guid>
      <link>https://habr.com/ru/articles/205108/?utm_campaign=205108&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Я получил множество отзывов на мою недавнюю серию постов по <a href="http://habrahabr.ru/post/205086/">Poka-yoke проектированию</a> (я был бы расстроены, если было бы иначе). Множество из этих отзывов касаются различных технологий сериализации или трансляции, используемых обычно на границах приложения: сериализация, XML (де)гидратация (прим. переводчика: тоже самое, что и сериализация), UI-валидация и т.д. Заметьте, что такая трансляция происходит не только по периметру приложения, но также и на уровне сохраняемости (persistence). ORM-ы также являются трасляционными механизмами.<br/>
Общим для многих комментариев является утверждение о том, что большая часть технологий сериализации требует наличия конструктора по умолчанию. Например, класс <a href="http://msdn.microsoft.com/en-us/library/182eeyhh.aspx">XmlSerializer </a>требует наличия конструктора по умолчанию и публичных, доступных для записи свойств. Большая часть объектно-реляционных преобразователей, которые я изучал, похоже, имеют те же требования. Контролы Windows Forms и WPF (UI – также граница приложения) почти обязаны иметь конструктор по умолчанию. Не нарушает ли это инкапсуляцию? И да и нет.<br/>
 <a href="https://habr.com/ru/articles/205108/?utm_campaign=205108&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 06 Dec 2013 12:05:53 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category>mark seemann</category><category>инкапсуляция</category><category>best practices</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] «Запах» проектирования: конструктор по умолчанию]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/205102/</guid>
      <link>https://habr.com/ru/articles/205102/?utm_campaign=205102&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Это пятый пост из серии о <a href="http://habrahabr.ru/post/205086/">Poka-yoke проектировании</a> – также известном, как <i>инкапсуляция</i>.<br/>
<br/>
Конструкторы по умолчанию являются «запахом» в коде. Именно так. Это может звучать возмутительно <a href="https://habr.com/ru/articles/205102/?utm_campaign=205102&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 06 Dec 2013 11:53:52 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category>mark seemann</category><category>инкапсуляция</category><category>best practices</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[«Запах» проектирования: излишний атрибут Required]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/205098/</guid>
      <link>https://habr.com/ru/articles/205098/?utm_campaign=205098&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Это четвёртый пост из серии о <a href="http://habrahabr.ru/post/205086/">Poka-yoke проектировании</a> – также известном, как <i>инкапсуляция</i>.<br/>
<br/>
Недавно, я прочитал из какого-то технологического события Microsoft пост, написанный с энтузиазмом:<br/>
<blockquote>Атрибут [Required] в коде автоматически создаёт запись в БД, которая не может принимать null, а также создаёт валидацию на веб-странице – симпотично […]</blockquote><br/>
 <a href="https://habr.com/ru/articles/205098/?utm_campaign=205098&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 06 Dec 2013 11:38:33 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category><![CDATA[mark seemann]]></category><category><![CDATA[инкапсуляция]]></category><category><![CDATA[best practices]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] «Запах» кода: автоматические свойства]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/205096/</guid>
      <link>https://habr.com/ru/articles/205096/?utm_campaign=205096&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Это третий пост из серии о <a href="http://habrahabr.ru/post/205086/">Poka-yoke проектировании</a> – также известном, как инкапсуляция.<br/>
<br/>
<a href="http://msdn.microsoft.com/en-us/library/bb384054.aspx">Автоматические свойства</a> – одна из наиболее излишних возможностей в C#. Я знаю, что многие люди очень их любят, но они решают проблему, с которой вы и сталкиваться не должны.<br/>
 <a href="https://habr.com/ru/articles/205096/?utm_campaign=205096&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 06 Dec 2013 11:31:25 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category>mark seemann</category><category>инкапсуляция</category><category>best practices</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] «Запах» проектирования: одержимость примитивами]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/205088/</guid>
      <link>https://habr.com/ru/articles/205088/?utm_campaign=205088&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Это второй пост из серии о <a href="http://habrahabr.ru/post/205086/">Poka-yoke проектировании</a> – также известном, как <i>инкапсуляция</i>.<br/>
<br/>
Множество классов имеют тенденцию к потреблению или раскрытию примитивных значений, таких как int, или string. В то время как такие примитивы существуют на любой платформе, их использование может приводить к процедурному коду. Более того, они обычно нарушают инкапсуляцию, допуская присвоение некорректных значений.<br/>
 <a href="https://habr.com/ru/articles/205088/?utm_campaign=205088&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 06 Dec 2013 11:15:05 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category>mark seemann</category><category>инкапсуляция</category><category>best practices</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] POKA-YOKE проектирование: от «запаха» к благоуханию]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/205086/</guid>
      <link>https://habr.com/ru/articles/205086/?utm_campaign=205086&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<i>От переводчика. Это перевод серии постов из блога Марка Симана. Я не хочу объединять некоторые из постов, несмотря на то, что они небольшие по размеру, а просто постараюсь соблюсти структуру, предложенную Марком. </i><br/>
<br/>
<i>Ещё немного от переводчика. POKA-YOKE можно перевести как «дуракоустойчивый» или отказоустойчивый.</i><br/>
<br/>
Инкапсуляция является одной из самых недопонимаемых концепций в объектно-ориентированном программировании (ООП). Похоже на то, что большая часть людей думает, что, имеющая отношение к инкапсуляции, концепция «<i>сокрытия информации</i>», просто означает, что закрытые поля должны быть раскрыты через публичные свойства (или getter\setter-методы в языках, которые не обладают поддержкой свойств). <a href="https://habr.com/ru/articles/205086/?utm_campaign=205086&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 06 Dec 2013 11:11:01 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category>mark seemann</category><category>инкапсуляция</category><category>best practices</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] LINQ против LSP]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/191770/</guid>
      <link>https://habr.com/ru/articles/191770/?utm_campaign=191770&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[В качестве реакции на <a href="http://habrahabr.ru/post/191548/">мой предыдущий пост о защитном программировании</a>, один из моих читателей прислал мне такой вопрос:<br/>
<blockquote>[Один] очень известный сценарий защитного программирования встречается, когда входным параметром является <code><pre><code class="cs">IEnumerable<br/>
<br/>

public class Publisher
{
    public Publisher(IEnumerable&lt;Subscriber&gt; subscribers)
    {
        // defensive copy -&gt; good or bad?
        this.subscribers = subscribers.ToArray();
    }
    //  …
}
</code></pre><br/>
</code></blockquote> <a href="https://habr.com/ru/articles/191770/?utm_campaign=191770&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 28 Aug 2013 14:14:34 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category>
      <category>совершенный код</category><category>.net</category><category>linq</category><category>LSP</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Защитное программирование]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/191548/</guid>
      <link>https://habr.com/ru/articles/191548/?utm_campaign=191548&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Один из моих читателей, Барри Гайлз, недавно написал мне и задал достаточно интересный вопрос, который, по моему мнению, достоен обсуждения:<br/>
<br/>
<blockquote>«Недавно я столкнулся с одной интересной ситуацией на работе: я производил ревью кода и вставил защитные проверки – одну для проверки аргумента конструктора на null, одну для проверки на null значения, возвращаемого из свойства. У меня также имелись утверждения для закрытых методов, которые я использовал для того, чтобы явно указать мои предположения.<br/>
«Похоже, что преобладающей практикой среди моих коллег по команде является опускание проверок и допущение падений. Если быть честным, я борюсь с этой концепцией, так как я уже привык разрабатывать посредством защитного программирования и считал это хорошей практикой. Я практически уверен, что дело обстоит так же в большей части руководств и записей в блогах.<br/>
«Вы не могли бы дать совет относительно того, почему лучше программировать в защитном стиле, вместо того, чтобы позволить коду провалиться и затем проверять трассировку стека?»</blockquote>  <a href="https://habr.com/ru/articles/191548/?utm_campaign=191548&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 27 Aug 2013 09:00:51 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Качество кода]]></category><category><![CDATA[.NET]]></category><category><![CDATA[Веб-разработка]]></category>
      <category>best practices</category><category>.net</category><category>complete code</category><category>design principles</category><category>design by contract</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Тестирование тривиального кода]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/174781/</guid>
      <link>https://habr.com/ru/articles/174781/?utm_campaign=174781&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<i>Даже если код тривиален, вы всё равно должны его тестировать.</i><br/>
Пару дней назад, Роберт Мартин опубликовал пост <a href="http://blog.8thlight.com/uncle-bob/2013/03/06/ThePragmaticsOfTDD.html">«Прагматичность TDD»</a>, (<a href="http://habrahabr.ru/post/173961/">здесь лежит перевод</a> — <i>прим.переводчика</i>) где он рассказал о том, что не тестируют <i>абсолютно весь код</i>. Среди исключительных ситуаций, когда не стоит применять TDD, дядя Боб упоминает написание GUI-кода, и я вижу смысл в таких утверждениях, но среди исключений есть парочка, на мой взгляд, <i>нелогичных</i>.  <a href="https://habr.com/ru/articles/174781/?utm_campaign=174781&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 30 Mar 2013 10:45:19 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[TDD]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Веб-разработка]]></category>
      <category>TDD</category><category>best practice</category><category>clean code</category><category>Mark Seemann</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Прагматичность TDD]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/173961/</guid>
      <link>https://habr.com/ru/articles/173961/?utm_campaign=173961&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Итак, моя последняя запись: <a href="http://blog.8thlight.com/uncle-bob/2013/03/05/TheStartUpTrap.html">стартап-ловушка</a> (<a href="http://habrahabr.ru/post/171883/">здесь её перевод </a> — прим. переводчика) наделала много шуму. Среди людей, выражающих согласие и поддержку, нашлась и группа людей, которая была категорически не согласна. Я не буду здесь резюмировать все разногласия, ибо в этом месяце я уже исчерпал свой лимит ругательных слов. Но одним альтернативным мнением я проникся и считаю нужным его обсудить.<br/>
Речь о старом конфликте «прагматизм против догматизма».  <a href="https://habr.com/ru/articles/173961/?utm_campaign=173961&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 23 Mar 2013 05:09:45 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[TDD]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Веб-разработка]]></category>
      <category>tdd</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Остерегайтесь инструментов повышения производительности]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/170443/</guid>
      <link>https://habr.com/ru/articles/170443/?utm_campaign=170443&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Внимание! Статья представляет собой перевод поста из блога Марка Симэна. <br/>
<br/>
Mark Seeman — архитектор программного обеспечения, проживающий в Копенгагене. Ранее работал разработчиком и архитектором в компании Microsoft. Сейчас Mark является независимым коснультантом. Также Mark является автором небезызвестной книги <a href="http://manning.com/seemann/">Dependency Injection in .NET</a><br/>
Статья представляет собой перевод <a href="http://blog.ploeh.dk/2013/02/04/BewareOfProductivityTools.aspx">поста</a> из блога Mark Seeman.<br/>
В комментариях, исключая, разумеется, обсуждений самого поста Марка, хотелось бы услышать мнения насчёт качества перевода и главное стоит ли в будущем при появлении интересных записей делать перевод и выкладывать сюда (а может и из его старых записей что-то перевести)?<br/>
Далее идёт перевод поста Марка.<br/>
<br/>
<i>Эта статья затрагивает тему использования разработчиками инструментов повышения производительности.</i><br/>
Время от времени я бываю втянутым в жаркие дебаты на счёт преимуществ и недостатков <a href="http://blog.ploeh.dk/ct.ashx?id=d5ca03ea-d9f5-41c5-bab6-3cc277ab272e&amp;url=http%3a%2f%2fwww.jetbrains.com%2fresharper%2f">ReSharper</a>. Эти дебаты происходят обычно в Твиттере, где ограничением являются 140 символов на сообщение, что является не очень благоприятным условием для ведения детальных дискуссий. Я не хочу пустопорожней болтовни, так что начнём детальное обсуждение.<br/>
 <a href="https://habr.com/ru/articles/170443/?utm_campaign=170443&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 23 Feb 2013 08:54:54 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[productivity tool]]></category><category><![CDATA[resharper]]></category><category><![CDATA[CodeRush]]></category><category><![CDATA[visual studio]]></category><category><![CDATA[productivity]]></category><category><![CDATA[productivity add-ins]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Сравнение объектов в C#.NET]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/137680/</guid>
      <link>https://habr.com/ru/articles/137680/?utm_campaign=137680&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[C#.NET предлагает множество способов сравнить объекты, как экземпляры классов, так и структур. Способов так много, что без упорядочения этих способов и понимания их грамотного использования и имплементации (при наличии возможности переопределения), в голове, неминуемо, образуется каша.<br/>
 <a href="https://habr.com/ru/articles/137680/?utm_campaign=137680&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 06 Feb 2012 13:29:27 GMT</pubDate>
      <dc:creator><![CDATA[EngineerSpock]]></dc:creator>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[C]]></category><category><![CDATA[.NET]]></category><category><![CDATA[equality]]></category><category><![CDATA[Сравнение объектов в C]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
