<?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/inwake/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя inwake]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Mon, 04 May 2026 06:38:02 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[EventAggregator — антипаттерн]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/322652/</guid>
      <link>https://habr.com/ru/articles/322652/?utm_campaign=322652&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Перед прочтением необходимо почитать о шаблоне <b>EventAggregator</b>. EventAggregator обеспечивает взаимодействие компонент и сервисов составного приложения, через слабую связанность.<br/>
<br/>
EventAggregator можно найти во многих WPF-каркасах: Mvvm Light -класс <b>Messenger</b>, Catel – класс <b>MessageMediator</b>. Я познакомился с EventAggregator вместе с WPF каркасом <b>Prism</b>. Использование EventAggregator оказалось простым и гибким. Компоненты системы становятся независимыми друг от друга – изменяя один компонент, я не боюсь сломать другой. <br/>
<br/>
При рассмотрении отдельных компонент все так и есть, но поднявшись на уровень работы компонентов в системе, можно разглядеть серьёзные проблемы: <br/>
<br/>
<div style="text-align:center;"><img src="https://habrastorage.org/files/fcf/643/900/fcf643900e3440f7b5c26f2801976176.jpg" /></div><br/>
Делюсь моим взглядом на слишком слабую связанность и не явное взаимодействие между частями системы.<br/>
 <a href="https://habr.com/ru/articles/322652/?utm_campaign=322652&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 26 Feb 2017 21:15:53 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Анализ и проектирование систем]]></category><category><![CDATA[Проектирование и рефакторинг]]></category><category><![CDATA[Качество кода]]></category>
      <category><![CDATA[EventAggregator]]></category><category><![CDATA[Prism]]></category><category><![CDATA[anti-patern]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Миллион и один день INotifyPropertyChanged]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/282648/</guid>
      <link>https://habr.com/ru/articles/282648/?utm_campaign=282648&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<b>Оптимизации пользовательского интерфейса посвящается.</b><br/>
<br/>
<img src="https://habrastorage.org/files/7a4/7a4/89f/7a47a489fc9b4a99863a3ff0b1c16758.jpg" alt="image"/><br/>
<blockquote>Пользовательский интерфейс должен быть быстрым, очень быстрым, невероятно быстрым. </blockquote><br/>
В попытках сэкономить наносекунды зачастую упускаются места где можно экономить секунды. Забавно, однажды на мое возмущение о двух секундной отрисовке небольшого списка, я получил ответ «Дабпиэф ничего не поделаешь», серьезно? Изучая всевозможные варианты реализации INotifyPropertyChanged <a href="https://habrahabr.ru/post/281294/">habrahabr.ru/post/281294</a> возникает вопрос об идеальном балансе производительности пользовательского интерфейса и разработчика, который занимается этим интерфейсом. Захотелось понять как повлияет на работу интерфейса выбор конкретной реализации.<br/>
 <a href="https://habr.com/ru/articles/282648/?utm_campaign=282648&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 27 Apr 2016 21:23:03 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[C#]]></category><category><![CDATA[Windows]]></category>
      <category><![CDATA[c# оgтимизация WPF]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Чистый код под флагом АОП и ненавистный #ПредупреждаюНедвижимостьИзменился]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/281294/</guid>
      <link>https://habr.com/ru/articles/281294/?utm_campaign=281294&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Поддавшись общей истерии на хабре,<br/>
<img src="https://habrastorage.org/files/cc4/59b/537/cc459b5375664c8e932d06ec05373cb1.png"/><br/>
(а именно «Предупреждаю Недвижимость Изменился» переводит Гуглекс всеми любимый «I Notify Property Changed») по поводу уведомлений об изменении. Я решил посмотреть на сколько далеко продвинулось человечество в изобретении велосипедов.<br/>
 <a href="https://habr.com/ru/articles/281294/?utm_campaign=281294&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 10 Apr 2016 15:53:57 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[Анализ и проектирование систем]]></category>
      <category><![CDATA[аоп]]></category><category><![CDATA[inotifypropertychanged]]></category><category><![CDATA[Proxy pattern]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Entity Framework или почему я реализую Repository]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/261291/</guid>
      <link>https://habr.com/ru/articles/261291/?utm_campaign=261291&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<b>Абстракции? Кому нужны абстракции?</b><br/>
EF наикрутейшая ORM от MS. <a href="http://habrahabr.ru/post/157267/">habrahabr.ru/post/157267</a> это действительно круто. Разработать такую систему очень затратно по всем направлениям. CodeFirs вещь, знания проектирования БД, да какой там! Не нужны сами знания SQL – и это круто. Но так ли все радужно?<br/>
<b>Julie Lerman</b> может много рассказать <a href="https://msdn.microsoft.com/en-us/magazine/ff898427.aspx">msdn.microsoft.com/en-us/magazine/ff898427.aspx</a><br/>
<img src="https://habrastorage.org/getpro/habr/post_images/6b5/b23/f5a/6b5b23f5a6170dc1e5d566721087cefc.png" alt="image"/><br/>
Ничего не напоминает? <a href="https://habr.com/ru/articles/261291/?utm_campaign=261291&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 27 Jun 2015 20:05:26 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[Microsoft SQL Server]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category><![CDATA[Entity Framework]]></category><category><![CDATA[Repository]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Прогноз на Specification pattern в Domain layer — ожидаются проблемы]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/260771/</guid>
      <link>https://habr.com/ru/articles/260771/?utm_campaign=260771&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<b>Data Access Layer</b> – одна из наиболее больных тем.<br/>
Написание хорошего слоя доступа к данным – это не тривиальная задача. Примеров реализации невероятно много, но адекватных среди них единицы.<br/>
Можно ли считать реализацию шаблона Repository — DAL?<br/>
Вот что предлагают MS <a href="https://msdn.microsoft.com/en-us/library/ff649690.aspx">msdn.microsoft.com/en-us/library/ff649690.aspx</a><br/>
<img src="https://habrastorage.org/getpro/habr/post_images/111/aba/3ee/111aba3ee5611cca5466dd4a6b28291a.png" alt="image"/><br/>
А вот и местные работы <a href="http://habrahabr.ru/post/52173/">habrahabr.ru/post/52173</a><br/>
Варианты довольно нормальные. <br/>
Но когда я вижу<blockquote> «Репозиторий – это фасад для доступа к базе данных.»</blockquote>… <a href="https://habr.com/ru/articles/260771/?utm_campaign=260771&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 20 Jun 2015 23:01:08 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Проектирование и рефакторинг]]></category><category><![CDATA[Качество кода]]></category>
      <category><![CDATA[patterns]]></category><category><![CDATA[specification]]></category><category><![CDATA[optimization]]></category><category><![CDATA[repository]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Салат «Руководство Microsoft под SymbolTable с нежным привкусом Antlr4»]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/260271/</guid>
      <link>https://habr.com/ru/articles/260271/?utm_campaign=260271&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Всегда ли нужно использовать то, что предлагают?<br/>
<br/>
Разобравшись с посетителем и слушателем, пришло время попробовать «Велосипед». Изучая способы построения внешних DSL я столкнулся с проблемой получения практики. Не буду далеко ходить книга Фаулера про то, как построить язык мечты «DSL», к сожалению, оказалась совсем не обезболивающим, а скорее на оборот тропой в кустах крапивы.<br/>
<br/>
Глава 12 Symbol Table<br/>
<blockquote>Место для хранения во время синтаксического анализа всех<br/>
идентифицируемых объектов для разрешения ссылок.</blockquote><br/>
Понятно? Конечно понятно, к описанию претензий нет.<br/>
<blockquote>Многим языкам приходится ссылаться на объекты во многих точках кода. Если есть<br/>
язык, который определяет конфигурацию задач и их зависимости, значит, нужен способ,<br/>
которым одна задача могла бы сослаться на зависимые задачи в своем определении.</blockquote><br/>
 <a href="https://habr.com/ru/articles/260271/?utm_campaign=260271&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sun, 14 Jun 2015 23:36:17 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[C#]]></category><category><![CDATA[Проектирование и рефакторинг]]></category><category><![CDATA[Качество кода]]></category>
      <category><![CDATA[antlr4]]></category><category><![CDATA[SymbolTable]]></category><category><![CDATA[DSL]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Битва «Слушатель vs Посетитель» на стадионе antlr4]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/259691/</guid>
      <link>https://habr.com/ru/articles/259691/?utm_campaign=259691&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Посещать или слушать? Дело вкуса – не более. Или нет?<br/>
<a href="http://habrahabr.ru/post/259475/">Предыстория</a>.<br/>
<br/>
Разобрав исходный текст, на выходе образовалось дерево:<br/>
<br/>
<img src="https://habrastorage.org/files/330/19a/102/33019a102c144652a211692f590eb98b.png" alt="image"/><br/>
<br/>
Само по себе дерево не имеет ни какого смысла, оно “Деревянное”, смыслом и какой либо ценностью обладает результат анализа (обхода) этого дерева. Для тех кто не готов напрягаться и писать самописные сани по спуску с дерева (например, меня) в antlr4 добавлена возможность получить анализатор почти бесплатно. <br/>
<br/>
<h4>1. Visitor</h4><br/>
Классика — поведенческий шаблон проектирования. При обходе узлов определяется метод обрабатывающий текущий тип узла, после чего метод вызывается и вот конкретно здесь начинается разработка, а именно анализ пришедшего поддерева.<br/>
<br/>
<h4>2. Listener</h4><br/>
Новшество, появившееся в четвертой версии. Поведение этого класса уже далеко не классическое (Observer или Publish/Subscribe). В классическом исполнении наблюдается менеджер который оповещает подписчиков о наступлении событий. Поведения рассматриваемого слушателя больше похоже на работу инспектора. Инспектор перед проверкой узла делает заметку “Я проверяю Х узел”, далее идет обход потомков узла, после обхода, которых можно сделать “Заключение о результатах обхода узла Х”.<br/>
 <a href="https://habr.com/ru/articles/259691/?utm_campaign=259691&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 06 Jun 2015 11:00:54 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[C#]]></category><category><![CDATA[Проектирование и рефакторинг]]></category>
      <category><![CDATA[antlr4]]></category><category><![CDATA[visitor]]></category><category><![CDATA[listener]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Ещё одно средство распознавания языков 4]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/259475/</guid>
      <link>https://habr.com/ru/articles/259475/?utm_campaign=259475&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<h4>1. Пролог</h4><br/>
 Несколько лет назад разработал внутренний язык для расчета отчетов, который используется в нашей фирме. Язык получился странным, в нем нет ни циклов, ни стандартных условных операторов (if), динамическая типизация, но со своими функциями он справлялся. Идея языка была реализовать простой expression evaluator. Со временем требований становилось все больше, как следствие язык стал расширяться, пришлось разработать простой сценарий добавления новых функций. <br/>
<br/>
На сегодняшний момент внутренний язык предназначенный для расчета отчетов превратился в монстра, не поворотливого мутанта. Это творение породили на свет отсутствие документации, простота расширения и лень разработчиков (проще написать, что то новое, чем разобраться в том что есть и найти нужное). Язык стал уметь много, слишком много того, для чего он не предназначался (разве что блинчики его печь не научили, а жаль).<br/>
 <a href="https://habr.com/ru/articles/259475/?utm_campaign=259475&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 03 Jun 2015 16:39:42 GMT</pubDate>
      <dc:creator><![CDATA[InWake]]></dc:creator>
      <category><![CDATA[C#]]></category><category><![CDATA[Visual Studio]]></category>
      <category><![CDATA[antlr4]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
