Многие мыслители сходятся на том, что главной целью дизайна является борьба со сложностью. Разбиение приложения на слои, переход от наследования к агрегации, создание приложения из хорошо работающих и проверенных блоков более низкого уровня, все это позволяет смягчить неотъемлемую сложность системы и свести случайную (или привнесенную) сложность к минимуму.
суббота, 27 апреля 2013 г.
пятница, 26 апреля 2013 г.
Тестируемый дизайн vs. хороший дизайн
DISCLAIMER: данную статью можно рассматривать, как дополнительные материалы к моему выступлению на MS SWIT с темой “Design for Testability: mocks, stubs, refactoring”.
В предыдущей заметке мы более внимательно рассмотрели принцип инверсии зависимостей, но при этом вопросы о том, как же добиться тестируемого дизайна и не наплодить бесконечное количество интерфейсов, остались открытыми.
В этой заметке я хочу показать типичный пример выделения интерфейсов для получения тестируемого дизайна и рассмотреть разницу между хорошим дизайном и тестируемым дизайном.
четверг, 18 апреля 2013 г.
Расширение типов в F#
В языке C# существует возможность расширять существующие типы методами расширения, синтаксис вызовов которых похож на вызов экземплярных методов. На этом построен весь LINQ, да и в обычной жизни методам расширения находится полезное применение.
F# также поддерживает возможность расширения существующих типов, но принцип работы и логика этого всего дела несколько иная. В F# не существует таких понятий, как методы расширения, свойства расширения и т.п., вместо этого существует общее понятие под названием "расширение типов" (type extension). Причем под этим термином подразумевает два разных явления: intrinsic extensions ("внутренние расширения") и optional extensions ("необязательные расширения").
И хотя синтаксис расширений совершенно одинаковый, семантика у них принципиально разная. Intrinsic extensions – это аналог частичных типов в C#, а optional extensions – аналог методов расширения, но в более расширенном виде, поскольку мы можем добавить в существующий тип не только «экземплярные» методы, но и статические методы, свойства или события.
вторник, 9 апреля 2013 г.
Критический взгляд на принцип инверсии зависимостей
DISCLAIMER: У автора этой статьи нет цели подорвать авторитет или каким-то образом обидеть столь уважаемого камрада, как «дядюшка» Боб Мартин. Речь здесь идет скорее о более тщательном обдумывании принципа инверсии зависимостей и анализ примеров, использованных при его описании.
Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) был впервые описан Бобом Мартином в одноименной статье, опубликованной в журнале C++ Report в 1996 году. Затем, практически в неизменном виде он был опубликован в книгах Боба Мартина «Принципы, паттерны и методики гибкой разработки» [Mattin2006].
По ходу статьи я буду приводить все необходимые цитаты и примеры из вышеупомянутых источников. Но чтобы не было «спойлеров» и ваше мнение оставалось объективным, я бы рекомендовал потратить 10-15 минут и ознакомиться с оригинальным описанием этого принципа в статье [Martin96] или книге [Martin96].
вторник, 2 апреля 2013 г.
Интересные интересности за март 2013
У блогов вообще и любой другой информации в интернетах в частности есть одна особенность, что время жизни этой информации очень мало. Интерес к хорошей статье быстро возникает и также быстро пропадает, в результате оказывается очень просто пропустить интересные вещи, опубликованные пару недель, месяцев или же лет назад.
У того же Эрика Липперта есть десятки потрясающих постов, к которым можно возвращаться время от времени, но поскольку они редко всплывают на поверхность, то о них мало кто знает и помнит. В некотором роде, мое сообщение на rsdn-е под названием «Wanted! Старые хиты Эрика Липперта» можно считать нулевым выпуском этой серии постов, которую я планирую публиковать каждый месяц.
понедельник, 25 марта 2013 г.
DI Паттерны. Service Locator
Сервис локатор – это очень неоднозначный паттерн проектирования. С одной стороны, именно с его появлением началось активное развитие DI контейнеров и практик инверсии управления. С другой стороны, именно благодаря повсеместному использованию сервис локаторов в приложениях техники управления зависимостями получили и продолжают получать столько критики.
Но прежде чем переходить к описанию достоинств и недостатков этого паттерна, давайте дадим его описание и общую структуру.
вторник, 12 марта 2013 г.
Как я читаю книги?
Недавно один из моих хороших знакомых спросил меня о том, как я читаю книги и как повысить свои остаточные знания после их прочтения. Поскольку это вопрос довольно интересный, то я решил поделиться своими мыслями со всеми.
Во-первых, я внимательно подхожу к выбору книг. К сожалению (или счастью), сейчас о программировании выходят десятки книг в месяц и далеко не каждая из них достойна нашего с вами внимания. В любой области, от алгоритмов до управления проектами, есть классические книги, поэтому для начала я нахожу наиболее интересный и авторитетный источник, а не бросаюсь на первую попавшуюся мне книгу.