Перейти к содержанию

Введение

Сколько себя помню, мне всегда было недостаточно просто писать код — я стремился понимать причины тех или иных подходов, что, в свою очередь, требовало глубокого понимания систем, с которыми я работал. На пятом году работы software-инженером проект, в котором я был team lead’ом, подвергся смене компании-исполнителя и объединению двух команд. По воле Всевышнего в новой команде оказался человек, который так же, как и я, интересовался теорией Domain-Driven Design, поэтому у нас быстро появилось много тем для разговоров. Позже, перед разработкой большого финансового проекта, мы решили вдумчиво пройтись по всей теории, которой каждый из нас обладал на тот момент, и сформировать общие принципы. Чтобы можно было вспомнить, по каким причинам и к каким выводам мы пришли в ходе бесед, я стал делать краткие записи.

Вскоре выяснилось, что путь, который казался коротким, оказался гораздо длиннее: часы бесед переросли в десятки, а возможно и в сотни часов размышлений, а записи становились всё длиннее. На большинство наших вопросов мы не могли найти ответов в интернете или ранее прочтенных книгах, а те, которые генерировал искусственный интеллект, часто больше запутывали, чем помогали. Я даже было подумывал взять курс в одном из университетов, однако после некоторых поисков, понял, что они предоставляют только базовые знания. Спустя около полугода, искомая нами архитектура стала принимать формы. Каждая последующая задача находила в ней решение. Однако, если наш путь оказался столь долог, то вполне вероятно, есть и другие люди, которые пытаются найти ответы на похожие вопросы, но не обладают ни временными возможностями, ни вдумчивым собеседником, коим оказался мой коллега, чтобы прийти к ним. Именно это и побудило нас опубликовать наши заметки.

Данная книга будет полезна всем, кто интересуется архитектурой ПО, в частности DDD и CQRS. Хотя она затрагивает и базовые концепции, их рассмотрение ограничено тем, что необходимо для понимания следующих за ними глав, поэтому её нельзя считать полноценным учебником по архитектуре. Предполагается, что читатель уже знаком с основами CQRS и DDD. Основная цель книги — показать, как ключевые термины и концепции проявляются в коде. Книга предполагает последовательное чтение, но также может использоваться как справочник, поскольку многие главы построены по принципу «вопрос–ответ». Следует учитывать, что материал изложен в порядке ведения записей, поэтому некоторые темы могут повторяться.


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