понедельник, 17 декабря 2012 г.

DI Паттерны. Constructor Injection

Когда речь заходит о внедрении зависимостей (Dependency Injection), то у большинства разработчиков в голове возникает образ конструктора, через который эта зависимость передается в виде интерфейса или абстрактного класса. Именно об этом виде управления зависимостей писал Боб Мартин в своей статье Dependency Inversion Principle, поэтому не удивительно, что он является самым известным.

Описание

Суть паттерна сводится к тому, что все зависимости, требуемые некоторому классу передаются ему в качестве параметров конструктора, представленных в виде интерфейсов или абстрактных классов.

понедельник, 3 декабря 2012 г.

Наследование vs Композиция vs Агрегация

Между двумя классами/объектами существует разные типы отношений. Самым базовым типом отношений является ассоциация (association), это означает, что два класса как-то связаны между собой, и мы пока не знаем точно, в чем эта связь выражена и собираемся уточнить ее в будущем. Обычно это отношение используется на ранних этапах дизайна, чтобы показать, что зависимость между классами существует, и двигаться дальше.

image

Рисунок 1. Отношение ассоциации

среда, 21 ноября 2012 г.

Управление зависимостями

Приложите все усилия для того, чтобы вы управляли зависимостями в приложении, а не зависимости управляли вами.
Мнение автора статьи по поводу зависимостей

Основной способ борьбы со сложностью сводится к тому, чтобы в один момент времени мы могли сосредоточиться на минимальном количестве сущностей или абстракций. В основном этот принцип исходит из двух предпосылок: во-первых, средний человек не в состоянии держать в голове одновременно слишком большое количество понятий (обычно говорится о цифре семь, плюс минус две) и при увеличении их количества приходится свопить недостающую информацию и анализировать каждый из ее кусков повторно. Во-вторых, при увеличении количества сущностей, которыми мы оперируем в один момент времени, увеличивается и суммарная сложность их поведения: достаточно попытаться объединить в одном месте кэширование и обычную бизнес логику, чтобы понять, что это значит.

вторник, 13 ноября 2012 г.

[ANN]ounce книг 11’2012

Подобные анонсы книг выходят у меня не так и часто, но от этого они не становятся менее полезными. Как обычно, я подготовил список новинок компьютерной или околокомпьютерной литераторы на русском и английском языках, которые вышли недавно в свет, или же появятся в какое-то ближайшее время.

Это не список рецензий, а всего лишь перечень книг, которые я сам с удовольствием прочитаю в ближайшее время. Так что мое мнение основано скорее на имени автора и какого-то «средневзвешенного» мнения народа в наших с вами интернетах, и оно вполне может измениться после более близкого знакомство с этими творениями. Тем не менее, все они, как минимум, заслуживают нашего с вами внимания и достойны добавиться в бесконечный список книг на полке “to-read”.

пятница, 26 октября 2012 г.

Фреймворки, библиотеки и зависимости

В одной из последних статей Ayende привел очень толковое определение разницы между библиотекой и фреймворком:

«Главное отличие библиотек от фреймворков в том, что фреймворк запускает ваш код, и, в общем случае, контролирует свое собственное окружение; в то время, как библиотека – это нечто, что вы используете из своего кода, контролируя свое окружение самостоятельно».

И это очень правильное определение. Фреймворк определяет окружение, используя «push» модель взаимодействия с приложением: в большинстве случаев фреймворк сам вызывает код приложения через механизм виртуальных методов, методы обратного вызова и т.п. Пользователю нужно лишь «вклинить» свой собственный код в «слоты», представленные фреймворком (не зря ведь в русскоязычном сообществе для термина “framework” используется «каркас»).

вторник, 16 октября 2012 г.

Немного о сборке мусора и поколениях

Все знают о том, что для повышения эффективности сборки мусора большинство современных систем используют поколения. Но вы когда-нибудь задумывались о том, как вообще эти поколения работают, и за счет чего мы получаем выигрыш в производительности? Но давайте не будем забегать вперед и разберем все по порядку.

Итак, большинство современных систем сборки мусора (Garbage Collector, GC) используют поколения для более эффективного освобождения короткоживущих объектов. Существует эвристическое правило, которое говорит о том, что большая часть вновь созданных объектов используются очень короткое время и их спокойно можно будет удалить при первой же возможности.

Основная идея поколений заключается в том, что мы собираем «мусор» молодого поколения значительно чаще и значительно быстрее за счет того, что анализируем не все объекты управляемой кучи (которых может быть очень и очень много), а только объекты этого молодого поколения.

четверг, 11 октября 2012 г.

Источники о сборке мусора в .NET

Я тут недавно проводил курс по сборке мусора и в результате накопилось немалое количество источников, которые были бы полезны любому, кто хочет освоить эту тему более подробно. Ну, а чтобы дело не пропадало даром, я думаю будет здорово этими источниками поделиться.

Книги

  1. Under the Hood of .NET Memory Management by Chris Farrell and Nick Harrison
    Книга не большая (225 страниц), посвященная сборке мусора на платформе .NET и описанию типовых проблем работы с памятью и советов по их устранению. Очень неплохая книга, с достаточной глубиной изложения, но без особых дебрей и заумностей; основные моменты изложены хорошо, но я бы посоветовал относиться с осторожностью к некоторым советам по оптимизации и не забывать, что к ним нужно приступать только после профилирования.
    Электронная версия книги свободна доступна в Сети.
  2. Advanced .NET Debugging by Mario Heward
    Книга не по сборке мусора непосредственно, но в ней покрыты очень многие низкоуровневые детали, которые можно «пощупать» с помощью отладки. Очень толково написано, хотя иногда бывает перебор с количеством низкоуровневых деталей.
  3. Pro .NET Performance by Sasha Goldstein at al
    Интересная книга по производительности в целом, но и с разделом по сборке мусора. Книга кажется очень интересной, а точное мнение о ней, я надеюсь у меня появится через месяц-другой после ее прочтения.
  4. CLR via C# by Jeffrey Richter
    Классика. Хотя в этом плане здесь не менее полезной будет практически любая хорошая книга по языку C# и платформе .NET. C# 4 Unleashed, например, тоже подойдет для знакомства с этой темой.