Вообще в статье идет не о достоинствах языка D, а об отсутствии преимуществ у альтернативных языков перед Go. Все зависит от точки зрения и расстоновки приоритетов.
Тернарным условием сейчас никого не удивишь, поскольку она пришло из C++. В данном контексте куда интереснее восклицательный знак. Человек, не знающий языка, просто не сможет правильно прочесть это предложение.
Википедия говорит следующее: в шаблоне «Цепочка обязанностей» сообщения в системе обрабатываются по схеме «обработай сам либо перешли другому», то есть одни сообщения обрабатываются на том уровне, где они получены, а другие пересылаются объектам иного уровня.
Структура MyExecutor ВКЛЮЧАЕТ в себя rich интерфейс MyDatabase, а следовательно, она реализует этот интерфейс. У нас же остается возможность переопределить часть (или все) методы этого интерфейса. Здесь мы перекрываем метод Exec, и заворачиваем в него вызов базового интерфейса. В результате, мы расширяем поведение прототипа, дополняя его профилированием/логгированием запроса.
Действительно, между декоратором и прокси получается не всегда четкая граница. Однако можно выделить следующие признаки присущие декоратору:
* Декоратор полностью повторяет интерфейс декорируемого объекта.
* Декоратор не обладает полнотой знаний о декорируемом объекте.
* При создании декоратора, ему всегда передается декорируемый объект (прокси всю работу выполняет сам).
Статья описывает более гибкий и более устойчивый к изменениям стиль программирования с базами данных для комплексных систем взаимодействия с базами данных. Статья построена на отдельно взятом примере вынужденного изменения сигнатуры события OnSignup (старый стиль) при эволюции менеджера, взаимодействующего с базой данных. Событие же OnSignup здесь реализовано в виде простой функции, хотя в реальной жизни, оно будет реализовано в виде механизма издатель/подписчик.
На первом шаге эволюции мы получаем сигнатуру события не зависящую от области видимости базы данных (это может быть, как база данных, так и транзакция). Такой стиль уже сам по себе является достаточно универсальным, поскольку сигнатура события уже не подвержена изменениям.
На втором шаге эволюции, поместив область видимости в контекст, мы приходим к семантически стандартному виду интерфейса, однако, за кулисами остается все та же универсальная область видимости.
Автор вынужден был использовать внешний пакет (который является оберткой вокруг стандартного пакета database/sql), поскольку под капотом достаточно много кода, которым не хотелось бы перегружать статью.
Тернарным условием сейчас никого не удивишь, поскольку она пришло из C++. В данном контексте куда интереснее восклицательный знак. Человек, не знающий языка, просто не сможет правильно прочесть это предложение.
* Декоратор полностью повторяет интерфейс декорируемого объекта.
* Декоратор не обладает полнотой знаний о декорируемом объекте.
* При создании декоратора, ему всегда передается декорируемый объект (прокси всю работу выполняет сам).
Данный вопрос поднимался и в других местах.
На первом шаге эволюции мы получаем сигнатуру события не зависящую от области видимости базы данных (это может быть, как база данных, так и транзакция). Такой стиль уже сам по себе является достаточно универсальным, поскольку сигнатура события уже не подвержена изменениям.
На втором шаге эволюции, поместив область видимости в контекст, мы приходим к семантически стандартному виду интерфейса, однако, за кулисами остается все та же универсальная область видимости.
Автор вынужден был использовать внешний пакет (который является оберткой вокруг стандартного пакета database/sql), поскольку под капотом достаточно много кода, которым не хотелось бы перегружать статью.