Search
Write a publication
Pull to refresh
-3
0
Send message

«Банда четырёх» была неправа, а вы не знаете, что такое делегирование

Reading time6 min
Views71K
«Банда четырёх» была неправа, стандартная библиотека Ruby тоже ошибочна, и Rails – также. Но является ли нечто неправильным, если все так делают?

Да.

Книга «Банды четырёх» "Шаблоны проектирования" даёт нам общий словарь для понимания базовых шаблонов ООП. Она помогает нам использовать одинаковую терминологию при обсуждении софта. К сожалению, она же является причиной путаницы.

Они говорят: «композиция прежде наследования». Отлично, в этом есть смысл. Они говорят: «используйте делегирование». Отлично. Хотя в книге нет ни единого примера делегирования.

Делегирование – это приём, которому приписывают возможность внесения гибкости в программы. Обычно говорят, что делегирование – это способ достичь композиции. Но делегирование – это не то, что вы думаете, и «Банда четырёх» ввела вас в заблуждение. Хуже того, почти все упоминания о делегировании содержат лишь совместную работу объектов с пересылкой (forwarding) сообщений. Это примеры вызовов методов, а не делегирования.

Наверняка ваш учитель программирования сказал бы вам, что вам необходимо хорошо понимать основные концепции в программировании. И понимать их правильно.
Читать дальше →

Трудный выбор грида для проектов на WPF

Reading time21 min
Views63K
Перед нашей командой встала задача выбора для будущих проектов библиотеки WPF компонентов для быстрой разработки пользовательского интерфейса бизнес-приложений. Посылом к рассмотрению стало то, что стандартный грид (а это обычно большая часть функционала пользовательского интерфейса бизнес-приложения) не устраивает по многим параметрам. Много чего приходится допиливать напильником, изобретая очередной велосипед. Надоело! Мы решили сравнить гриды из каждой библиотеки и сделать обоснованный выбор.

Участники конкурса


Думаю, что список участников сравнения никого не удивит:

Кому интересно как это происходило, прошу под кат.
Много текста

Entity Framework Code First в командной работе

Reading time10 min
Views34K
От переводчика: Прекрасная статья на понимание механизма миграций в Entity Framework 6 и путей решения конфликтов миграций при работе в команде. Оригинал статьи: Code First Migrations in Team Environments.

Эта статья предполагает, что вы знакомы с Entity Framework и с основами работы с ним. Иначе сначала вам нужно прочитать Code First Migrations, прежде чем продолжить.

Налейте чашечку кофе, вам нужно прочитать всю статью


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

Миграция Windows между BIOS <-> UEFI

Reading time2 min
Views86K
Появляется такая задача не часто, но все-же, нужно преобразовать уже установленную систему, загружаемую в BIOS (или UEFI режиме) в UEFI режим (в BIOS соответственно).
Кому интересно, читаем далее:
Читать дальше →

Lamptest.ru: протестировано 557 ламп

Reading time3 min
Views29K
Летом я запустил проект по тестированию светодиодных ламп lamptest.ru. Я планировал тестировать по 10-15 ламп в месяц, но получилось совсем по-другому. Протестировано уже 557 ламп (из них 17 люминесцентных, 59 ламп накаливания, все остальные светодиодные). Такое большое количество ламп удалось протестировать благодаря успешному народному сбору средств (краудфандингу), который продолжается и сейчас.



Сегодня я расскажу, зачем я затеял этот проект, что с ним будет дальше и попрошу вас ответить на вопросы, ответы на которые помогут определить, как будет развиваться проект.

Читать дальше →

EDI стандарт. Технический обзор

Reading time9 min
Views35K
EDI стандарт (Electronic Data Interchange) — часть старых, устоявшихся систем. Но мы постоянно видим, как EDI представляют, как современный стандарт. Так ли это? Надо ли нам рассматривать EDI в качестве базовой технологии для новых проектов?
Давайте посмотрим на EDI с технической точки зрения, отбросив все остальное.
Читать дальше →

Опыт лекций по введению в шаблоны проектирования

Reading time8 min
Views42K
Позвольте небольшое предисловие — обозначу в нём цель статьи.
Я по субботам студентам младших курсов преподаю введение в шаблоны проектирования. Вот, хочу поделиться опытом, описать план нескольких первых лекций. Большинству читателей, я полагаю, сам излагаемый мной материал давно знаком, но, возможно, порядок и способ изложения покажутся любопытными.
Слишком часто, увы, нам рассказывают что-то, но не говорят, зачем это нужно, или говорят даже, но будто вскользь. Скажем, обыкновенно, говоря о C#, расскажут, что такое базовый класс и интерфейс, каким синтаксисом нужно пользоваться, чтобы написать их, приведут пример, где базовым будет класс «Птица», а наследниками «Утка» и «Орёл», но зачем всё это нужно, какая от всей — потенциально сложной — иерархии классов достигается польза, не говорят: это будто бы в тени, подразумевается само собою. И вот потому у многих учеников, ещё не успевших набить свои шишки, в голове перевёрнутая картина мира — они неплохо представляют, что за инструменты даны им в руки, но зачем они изобретены и к чему применимы, понимают смутно.
Вот поэтому я сочинил несколько учебных примеров, на которых можно показать зачем нужны некоторые подходы. Правда, придётся принять условность — будем бить из пушки по воробьям, а то и по воображаемым мишеням. Зато пристреляемся и уж во вражеский бруствер точно попадём, случись что.
Сразу скажу, что от вопросов совсем простых мы быстро перейдем к довольно сложным (ну, скажем, к компоновщику), потому читайте до конца, если уж не с начала.
Читать дальше →

Семь вопросов о светодиодных лампах

Reading time8 min
Views231K
Пять лет назад светодиодные лампы были технической диковинкой, сегодня светодиодные лампы продаются в каждом магазине товаров для дома, через пять лет подавляющее большинство квартир скорее всего будут освещаться светодиодными лампами.

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


Читать дальше →

Remote reflection в .NET runtime

Reading time3 min
Views9.7K
Автор статьи — Сердар Курбанов SerdarKurbanov, основатель команды и ведущий разработчик Telescope.


При использовании программного обеспечения могут встречаться ситуации, когда приложение нельзя или нежелательно останавливать даже при возникновении неполадки. В таких ситуациях, когда использование отладчика невозможно, обнаружение ошибки может представлять нетривиальную задачу.
Ситуация может быть еще запутаннее, если приложение использует многопоточность. Определить какой именно из потоков вызвал ошибку может помочь логирование, но более универсальным решением была бы возможность взглянуть внутрь работающей программы и увидеть состояния объектов в ней, не останавливая ее. Одним из подходов к этой задаче может быть использование возможностей System.Reflection.
Читать дальше →

Удаление/восстановление Metro-приложений в Windows 10

Reading time14 min
Views192K


Как бы не было много сторонников старых версий ОС, все же пришла пора переходить на Windows 10. В связи с этим предлагаю разобраться с предустановлеными Metro-приложениями. Согласитесь, мало кто будет использовать абсолютно все приложения, которые навязывает нам корпорация. Ведь большинство из них просто занимают место, а кого-то вообще раздражают. В этой статье я поделюсь с вами способом, которым можно «почистить» систему от именно таких — ненужных — приложений на Windows 10.
Читать дальше →

Как я добавлял поддержку Code Contracts для VS2015

Reading time8 min
Views12K
В последние несколько недель я активно занимался доработкой Code Contracts, исправлением некоторых неприятных ошибок и добавлением поддержки VS2015. А поскольку VS2015 только что увидела свет, то подобная поддержка будет весьма кстати. Теперь обо всем об этом по порядку, да еще и с рядом технических подробностей.

Итак, первое, что нужно знать о Code Contracts, что эта штука жива. Код лежит в открытом доступе на гитхабе (https://github.com/Microsoft/CodeContracts) и есть ряд людей, которые активно занимаются наведением там порядка. Я являюсь owner-ом репозитория, но занимаюсь этим в свое свободное время. Помимо меня есть еще несколько человек, которые наводят порядок в Code Contracts Editor Extensions (@sharwell) и в некоторых других областях.

Code Contracts можно разделить на несколько составляющих:
  • ccrewrite – тул, который занимается «переписыванием» IL-а, выдиранием утверждений (Contract.Requires/Ensures/Assert/Assume/if-throw) и заменой их на нужные вызовы методов контрактов, в зависимости от конфигурации.
  • cccheck — тул, который занимается статическим анализом и формальным доказательством во время компиляции, что программа является корректной.
  • Code Contracts Editor Extensions – расширение к VS, которое позволяет «видеть» контракты прямо в IDE.

Есть еще ряд тулов, например, для генерации документации, а также плагин к ReSharper, который упрощает добавление предусловий/постусловий и показывает ошибки ccrewrite прямо в IDE.

Я занимаюсь двумя составляющими – ccrewrite и плагином, но сейчас хочу остановиться именно на ccrewrite и на сложностях, с которыми я столкнуться при добавлении поддержки VS2015.

Читать дальше →

Высокопроизводительный код на платформе .NET

Reading time16 min
Views34K
Здравствуйте, дорогие читатели!

Не так давно мы занялись проработкой книги "Writing High-Performance .NET code", которая до сих пор не переведена на русский язык, хотя ей и скоро год.



Нас, конечно, не удивило, что такую книгу уже растаскивают на цитаты, однако выяснилось, что уважаемый автор Бен Уотсон даже выложил на сайте «Codeproject» целую статью, написанную по мотивам одной из глав. К сожалению, объем этого материала слишком велик для хабропубликации, однако мы решили все-таки перевести первую часть статьи, чтобы вы могли оценить материал книги. Приглашаем к прочтению и к участию в опросе. Кроме того, если все-таки целесообразно перевести и вторую часть — пишите в комментариях, постараемся учесть ваши пожелания.
Читать дальше →

Слой кэширования поверх Linq to SQL

Reading time10 min
Views7.9K
За последний год мы перенесли внушительную часть настроек DirectCRM в базу данных. Множество элементов промо-кампаний, которые мы до этого описывали исключительно кодом, теперь создаются и настраиваются менеджером через админку. При этом получилась очень сложная структура БД, насчитывающая десятки таблиц.

Однако, за перенос настроек в базу данных пришлось расплачиваться. Об архитектуре, позволяющий кэшировать редко меняющиеся Linq to SQL сущности, смотрите под катом.
image
Читать дальше →

Совершенствуем xaml: Bindable Converters, Switch Converter, Sets

Reading time7 min
Views7.5K
Нужно признать, xaml-код бывает отчасти многословным, что вызывает иногда некоторый дискомфорт при разработке. В статье рассмотрим оптимизации, которые помогут существенно улучшить организацию разметки и сделать её более читаемой. Особенно это касается работы с конвертерами, которые неотъемлемо связаны с механизмом привязки данных.

Нам понадобятся некоторые знания из прошлых статей, в частности, понимание принципа прямых инжекций.

Читать дальше →

Командно-ориентированная навигация в xaml-приложениях

Reading time5 min
Views4.7K
Недавно мы уже узнали о принципе прямых инжекции и эффективном связывании вью-моделей с представлениями, а также о том, каким образом создавать расширения привязки. Продолжим исследование библиотеки Aero Framework и рассмотрим ещё один архитектурный вопрос.

Навигация между представлениями (экранами) в xaml-ориентированных приложениях довольно важная и интересная задача. Особенно это касается её реализации в рамках паттерна MVVM. В идеале вью-модели не должны содержать никаких прямых ссылок на представления, чтобы быть кросс-платформенными и сохранялась возможность повторного их использования в нескольких проектах. Сегодня мы узнаем, как этого достичь.

Читать дальше →

Инжекторы контекста xaml

Reading time4 min
Views8.4K
В предыдущей части мы познакомились с расширениями привязки и разобрались, как их применять на практике, например, для локализации. Сегодня же продолжим изучать особенности библиотеки Aero Framework и рассмотрим довольно интересную тему об инжекции контекста данных в xaml-разметку представлений, а заодно применим познания из прошлой статьи.

На практике часто встречается следующая задача: связать вью-модель, которая хранится в unity-контейнере, с одним или несколькими её представлениями (экранами). Обычно такое связывание происходит в бехаинд-коде, в результате чего у представления устанавливается нужное значение в свойство DataContext.

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

Все эти трудности так или иначе решаемы, но существует универсальный и очень простой способ их красиво разрешить. О нём и пойдет речь.

Читать дальше →

Разные версии JIT в .NET

Reading time6 min
Views21K
Каждый C#-разработчик знает, что C#-компилятор переводит исходный код программы в промежуточный язык под названием Intermediate Language (IL). А за превращение IL в последовательность машинных команд чаще всего отвечает Just-In-Time-компилятор (JIT). Да, на сегодняшний день есть NGen, Mono AOT, .NET Native, но JIT-компиляция всё ещё лидирует в мире .NET-приложений. А вот работает этот самый JIT, знают далеко не все. Если брать в расчёт только реализацию .NET от Microsoft, то стоит различать JIT-x86 и JIT-x64. А ещё за дверями стоит RyuJIT который уже совсем скоро займёт почётное место основного JIT-компилятора. А если вы любите старые версии .NET, то полезно знать, что в разных версиях CLR логика работы JIT отличалась. Исходники у нас теперь открыты, вы можете их посмотреть и осознать, насколько же это большая и сложная тема. Сегодня мы не будем пытаться охватить её, а лишь кратко посмотрим на несколько интересных особенностей отдельных версий JIT-компиляторов. Итак, сегодня в номере:
  • Почему короткий метод может не быть заинлайнен и как этого избежать
  • JIT-баги: опасные и беспощадные
  • Кто и как разматывает циклы
  • Чем отличается размотка маленьких и больших циклов

Читать дальше →

Entity Framework: повышаем производительность при сохранении данных в БД

Reading time10 min
Views55K
При добавлении/изменении большого количества записей (10³ и выше), производительность Entity Framework оставляет желать лучшего. Причиной этому являются как архитектурные особенности самого фреймворка, так и неоптимальный генерируемый SQL. Забегая вперед — сохранение данных в обход контекста сокращает время выполнения на порядки.

Содержание статьи:
1. Insert/Update стандартными средствами Entity Framework
2. Поиск решения проблемы
3. Интеграция Entity Framework и SqlBulkCopy
4. Продвинутая вставка с использованием MERGE
5. Сравнение производительности
6. Выводы
Читать дальше →

Делаем отгружаемые сборки: взаимодействуем между доменами без маршаллинга

Reading time3 min
Views12K


Ссылка на проект в GitHub: DotNetEx

На множественных ресурсах время от времени задается вопрос. Можно ли сделать отгружаемые сборки с текущего домена? Так, чтобы попользовался и «давай, до свидания!»? Везде и всегда ответ, который давался – это «нет». Ведь единственное, что можно выгрузить – это домен. Соответственно, если хочется наладить отгрузку, сборку надо помещать в домен, и налаживать между доменами взаимодействие через сериализуемые типы. А это — очень медленное взаимодействие. А мы скажем так. Можно. С ньюансами. Загружать мы будем также в отдельный домен. Но отменим сериализацию при вызове методов между доменами.

Вопросы, которые мы будем решать:
  • Создание домена с возможностью отдачи объекта из домена в родительский
  • Выгрузка сборки

Читать дальше →

Подбор книг по C#

Reading time4 min
Views281K
image

Мы решили собрать в одну подборку самые, по нашему мнению, интересные книги нашего издательства, посвященные языку программирования C#. В посте собраны хорошие книги от пособий для начинающих (например, примелькавшаяся книга серии Head First) до изданий Джеффри Рихтера и Чарли Петцольда для практикующих программистов, в общем – на любой вкус по самым лучшим ценам в интернете.
Читать дальше →

Information

Rating
8,059-th
Registered
Activity