Влияние психологии на архитектуру программ
Поиск причин превращения хорошей архитектуры в плохую: эмерджентность, технические противоречия, сложность, компенсация энтропии. Когнитивные искажения в принятии решений. Влияние возрастной, дифференциальной психологии, различных психических явлений - ощущений, восприятия, внимания, представления, воображения, мышления, памяти разработчика. Психологические и социальные эффекты в группах.
Интеграция десктопного Flutter в CLI-приложение
Примеры кода
Post image
Сложности выбора стека для мобильной разработки, эксперимент с Flutter и парсером картинок для Reddit под Linux. Архитектурные поправки для Dart: асинхронность, исключения, null safety. Особенности Flutter: рефлексия, десктоп, производительность, DSL-вью и аналогия с Groovy SwingBuilder. Обмен событиями между cli-контроллером и Flutter через два канала, нюансы интеграции в иерархию классов.
DSL на русском языке в Groovy
Примеры кода
Post image
Выбор Groovy и библиотек для Domain specific language (DSL) на русском. Особенности Closure, стратегии делегирования, command chain, иерархия делегатов с аннотацией @Delegate. Русскоязычная альтернатива def через Binding, AST-трансформации и метки. Разница между методами и свойствами, включение скриптов друг в друга, поиск аналога assert. Локализация через метапрограммирование.
Контрактное программирование в Groovy 4
Примеры кода
Появление GContracts в Groovy 4. Пример использования контрактов, влияние на AST-трансформации, особенности устройства. Попытка усилить и ослабить условия, обойти через особенности языка и рефлексию. Более подробное их определение, пересечение накладываемых ограничений с утверждениями, интерфейсами-типами и абстрактными классами. Возможные преимущества и недостатки, конкуренция с валидацией, возможные места для применения.
Проблемы внедрения зависимостей
Разные подходы к определению зависимостей. Количественный и качественный их анализ. Прямое создание объекта в коде, его проблемы. Недостатки IoC-контейнера. Паттерны внедрения зависимостей, влияние их объект. Object Mother и необходимость подстраиваться под ситуацию.
Вспомним о Protected Variations
Шаблон Protected Variations в GRASP, проблематика изменений, сложность определения их локализации и связь с проработкой предметной модели. Выявление изменений через декомпозицию задачи на концептуальные слои по аналогии с известными архитектурными схемами на примере MVC.
Метод аналогии в архитектуре программ
Проблематика архитектуры. Аналогия, её виды и принципы. Биологическая аналогия, структурная схема классов приложения, исследование популяции классов. Требования как аналогия факторов среды, действие факторов, адаптация, основные законы - лимитирующий фактор Либиха, Шелфорда, Митчерлиха.
Особенности выделения интерфейсов
Примеры кода
Основные отличия интерфейсов от наследования, анализ отношений совместимых и несовместимых понятий: подчинение, пересечение, соподчинение. Недостатки интерфейсов, разные подходы к ним в литературе. Поиск целей для интерфейса.
Самый простой маппер для базы данных знаков зодиака
Примеры кода
Post image
Простая база данных знаков зодиака, объединение Groovy и JavaFX, отображение множеств, виды маппинга. Маппинг, основанный на ассоциации. Классы-универсалы для работы с запросами и соединением, валидация, класс маппинга для отображения типов и отношений, менеджер сущностей, примитивная кодогенерация.
Влияние трейтов на архитектуру
Примеры кода
Моделирование захвата трейтом иерархии классов. Использование трейтов для функционала, не связанного с предметной областью, цепочки ответственности, SAM-трейты, наследование от набора компонентов во фреймворке. КотоПёс и его реализация на трейтах и без.