Убрать ошибки основные
В многопоточных вычислениях,
Но и цена идёт большая –
Для получения значения
Расчёт сначала повторяя.
Аспектно-ориентированное программирование
В аспектной парадигме можно
Сквозные функции системы,
Которые бывает сложно
Не поместить в другие темы,
К примеру, логи и проверки,
Авторизацию, профайлинг,
Отметить в качестве аспектов.
К примеру, атрибутов в шарпе.
Обобщённое программирование
При обобщённой парадигме
Для обработки разных данных
Используются алгоритмы,
Что пишутся универсально.
Примером могут быть шаблоны –
Дженерик-функции и классы.
Параметрический, в итоге,
Полиморфизм состоялся.
Глава 9. Принципы проектирования
Глобальное проектирование прежде всего (Big Design Up Front)
Прежде всего подумать стоит
И спроектировать систему.
И это, может, сэкономит
Нам кучу времени, проблемы
Предотвратив на ранних сроках.
Так изменить ТЗ – не долго,
А код бессмысленный намного
Дороже написать без толку.
Предметно-ориентированное проектирование (Domain-driven design, DDD)
Для проектирования кода
На основании бизнес-правил –
То бишь проблемного подхода –
Модель предметную составим.
Система, как набор моделей
Предметной области, позволит
Облегчить построение в целом
Её структуры и ускорит
Её развитие в дальнейшем.
Понизит сложность изучения
Частей системы для скорейших
Их написания и внедрения.
Придерживайся простоты (Keep it simple, stupid, KISS)
Усложняя, упрощай –
Избегай ненужных дебрей,
В простоте все сохраняй,
Ищи лучшее решение.
Чем система проще будет,
Тем надёжнее она,
Усложнение всё погубит,
И запутает весьма.
Бритва Оккама (Occam’s Razor, OR)
Не нужно сущность создавать,
Когда ей нет особой роли.
Не нужно нового, когда
Подходит то, что есть дотоле.
Не повторяйте себя (Don’t Repeat Yourself, DRY)
Не надо повторять себя –
Решай единожды задачи.
Ведь если надо будет взять
И сделать что-либо иначе,
Во всех повторах повторить
Придётся эти изменения
И ничего не пропустить –
Довольно сложно в выполнении.
До написания кодов
Полезно изучить систему:
Вполне возможно, код готов
И кем-то был когда-то сделан.
Вам это не понадобится (You Aren’t Gonna Need It, YAGNI)
Пишите только то, что надо,
Прямо сейчас, а не в грядущем.
Это уменьшит вам затраты.
Не нужно делать, что не нужно.
Преждевременная оптимизация (Avoid Premature Optimization)
Не нужно слишком рано код
Оптимизировать упорно.
И лишь когда проект готов,
Оптимизации достойна
Становится программа вся.
И начинать полезно будет
С тех мест, что явно тормозят,
От остального не убудет.
Глава 10. Проектирование слоёв, звеньев и подсистем
Границы и зависимости подсистем
Чтоб нам систему развивать
Удобно было и приятно,
Её полезно разделять
Так, чтобы было не затратно
В дальнейшем части отделить
В процессы, сервисы и службы,
Или обратно совместить
Как монолит – бывает нужно.
Сей выбор можно отложить
И написать систему в целом
Так, чтобы можно было жить
Ей в разных звеньях и разделах.
Как независимую часть
Отдельным модулем, проектом –
В основе – лучше прописать
Всю бизнес-логику. При этом
Взаимодействия вокруг –
Фреймворки, базы данных
И интерфейсы – в виде слуг
И плагинов непостоянных.
Слои абстракции
Для упрощения создания
Больших систем их делят на
Слои, что больше пониманья
Дают для каждого звена.
Слои в себе скрывают сложность,
Давая только интерфейс
Для тех что выше и возможность
Замены внутренностей здесь.
Слои, что ниже, в общем целом,
О верхних знать не должны,
Над ними могут, между делом,
И новые быть введены.
Глобальных данных быть не может,
Всё состояние – внутри.
Конкретных связей, функций – тоже –
Лишь интерфейсы между них.
Благодаря такой структуре
Слои возможно заменять.
Внутри слоёв в архитектуре