Роберт Мартин "Чистая архитектура. Искусство разработки программного обеспечения"

grade 4,4 - Рейтинг книги по мнению 160+ читателей Рунета

«Идеальный программист» и «Чистый код» – легендарные бестселлеры Роберта Мартина – рассказывают, как достичь высот профессионализма. «Чистая архитектура» продолжает эту тему, но не предлагает несколько вариантов в стиле «решай сам», а объясняет, что именно следует делать, по какой причине и почему именно такое решение станет принципиально важным для вашего успеха. Роберт Мартин дает прямые и лаконичные ответы на ключевые вопросы архитектуры и дизайна. «Чистую архитектуру» обязаны прочитать разработчики всех уровней, системные аналитики, архитекторы и каждый программист, который желает подняться по карьерной лестнице или хотя бы повлиять на людей, которые занимаются данной работой. В форматах: a4.pdf и ios.ePub представлены файлы от издательства.

date_range Год издания :

foundation Издательство :Питер

person Автор :

workspaces ISBN :978-5-4461-0772-8, 9780134494166

child_care Возрастное ограничение : 16

update Дата обновления : 14.06.2023

Чистая архитектура. Искусство разработки программного обеспечения
Роберт С. Мартин

Библиотека программиста (Питер)
«Идеальный программист» и «Чистый код» – легендарные бестселлеры Роберта Мартина – рассказывают, как достичь высот профессионализма. «Чистая архитектура» продолжает эту тему, но не предлагает несколько вариантов в стиле «решай сам», а объясняет, что именно следует делать, по какой причине и почему именно такое решение станет принципиально важным для вашего успеха.

Роберт Мартин дает прямые и лаконичные ответы на ключевые вопросы архитектуры и дизайна. «Чистую архитектуру» обязаны прочитать разработчики всех уровней, системные аналитики, архитекторы и каждый программист, который желает подняться по карьерной лестнице или хотя бы повлиять на людей, которые занимаются данной работой.

В форматах:a4.pdfиios.ePubпредставлены файлы от издательства.




Роберт Мартин

Чистая архитектура

Искусство разработки программного обеспечения

2018

Переводчик А. Макарова

Технический редактор Н. Суслова

Литературный редактор Е. Герасимова

Художники Л. Егорова, С. Заматевская, Р. Яцко

Корректоры С. Беляева, Н. Викторова

ISBN 978-5-4461-0772-8

© ООО Издательство "Питер", 2018

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

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

Предисловие

О чем мы говорим, когда обсуждаем архитектуру?

Так же как любая метафора, описание программного обеспечения с точки зрения архитектуры может что-то скрыть, а что-то, наоборот, проявить; может обещать больше, чем давать, и давать больше, чем обещать.

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

Здания имеют очевидную физическую структуру, независимо от материала, из которого они построены, от их высоты или ширины, от их назначения и от наличия или отсутствия архитектурных украшений. Их структура мало чем отличается – в значительной мере она обусловлена законом тяготения и физическими свойствами материалов. Программное обеспечение, напротив, никак не связано с тяжестью, кроме чувства серьезности. И из чего же сделано программное обеспечение? В отличие от зданий, которые могут быть построены из кирпича, бетона, дерева, стали и стекла, программное обеспечение строится из программных компонентов. Большие программные конструкции создаются из меньших программных компонентов, которые, в свою очередь, построены из еще более мелких программных компонентов, и т. д., вплоть до основания.

Говоря об архитектуре, можно сказать, что программное обеспечение по своей природе является фрактальным и рекурсивным, выгравированным и очерченным в коде. Здесь важны все детали. Переплетение уровней детализации также вносит свой вклад в архитектуру, но бессмысленно говорить о программном обеспечении в физических масштабах. Программное обеспечение имеет структуру – множество структур и множество их видов, – но их разнообразие затмевает диапазон физических структур, которые можно увидеть на примере зданий. Можно даже довольно убедительно утверждать, что при проектировании программного обеспечения архитектуре уделяется куда больше внимания, чем при проектировании зданий, – в этом смысле архитектура программного обеспечения является более многообразной, чем архитектура зданий!

Но физический масштаб привычнее людям, и они часто ищут его в окружающем мире. Несмотря на привлекательность и визуальную очевидность, прямоугольники на диаграммах PowerPoint не являются архитектурой программного обеспечения. Да, они представляют определенный взгляд на архитектуру, но принимать прямоугольники за общую картину, отражающую архитектуру, значит не получить ни общей картины, ни понятия об архитектуре: архитектура программного обеспечения ни на что не похожа. Конкретный способ визуализации – не более чем частный выбор. Этот выбор основан на следующем наборе вариантов: что включить; что исключить; что подчеркнуть формой или цветом; что, наоборот, затенить. Никакой взгляд не имеет никаких преимуществ перед другим.

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

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

    Вильям Шекспир[1 - Перевод Т. Гнедич. – Примеч. ред.]

Физический мир – это мир, в котором мы живем, в котором находятся и действуют наши компании и экономика. Это дает нам другой подход к пониманию архитектуры программного обеспечения, позволяющий говорить и рассуждать не в терминах физических законов и понятий.

Архитектура отражает важные проектные решения по формированию системы, где важность определяется стоимостью изменений.

    Гради Буч

Время, деньги, трудозатраты – вот еще одна система координат, помогающая нам различать большое и малое и отделять относящееся к архитектуре от всего остального. Она также помогает дать качественную оценку архитектуре – хорошая она или нет: хорошая архитектура отвечает потребностям пользователей, разработчиков и владельцев не только сейчас, но и продолжит отвечать им в будущем.

Если вы думаете, что хорошая архитектура стоит дорого, попробуйте плохую архитектуру.

    Брайан Фут и Джозеф Йодер

Типичные изменения, происходящие в процессе разработки системы, не должны быть дорогостоящими, сложными в реализации; они должны укладываться в график развития проекта и в рамки дневных или недельных заданий.

Это ведет нас прямиком к большой физической проблеме: путешествиям во времени. Как узнать, какие типичные изменения будут происходить, чтобы на основе этого знания принять важные решения? Как уменьшить трудозатраты и стоимость разработки без машины времени и гадания на кофейной гуще?

Архитектура – это набор верных решений, которые хотелось бы принять на ранних этапах работы над проектом, но которые не более вероятны, чем другие.

    Ральф Джонсон

Анализ прошлого сложен; понимание настоящего в лучшем случае переменчиво; предсказание будущего нетривиально.

К цели ведет много путей.

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

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

Но самый интересный – третий, чистый путь. Он учитывает природную гибкость программного обеспечения и стремится сохранить ее как основное свойство системы. Он учитывает, что мы оперируем неполными знаниями и, будучи людьми, неплохо приспособились к этому. Он играет больше на наших сильных сторонах, чем на слабостях. Мы создаем что-то и совершаем открытия. Мы задаем вопросы и проводим эксперименты. Хорошая архитектура основывается скорее на понимании движения к цели как непрерывного процесса исследований, а не на понимании самой цели как зафиксированного артефакта.

Архитектура – это гипотеза, которую требуется доказать реализацией и оценкой.

    Том Гилб

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

Поспешай не торопясь.

    Роберт С. Мартин

Получайте удовольствие от путешествия.

    Кевлин Хенни
    май, 2017

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Вступление

Эта книга называется «Чистая архитектура». Смелое название. Кто-то посчитает его самонадеянным. Почему я решил написать эту книгу и выбрал такое название?

Свою первую строку кода я написал в 1964 году, в 12 лет. Сейчас на календаре 2016-й, то есть я пишу код уже больше полувека. За это время я кое-что узнал о структурировании программных систем, и мои знания, как мне кажется, многие посчитали бы ценными.

Я приобрел эти знания, создав множество систем, больших и маленьких. Я создавал маленькие встраиваемые системы и большие системы пакетной обработки, системы реального времени и веб-системы, консольные приложения, приложения с графическим интерфейсом, приложения управления процессами, игры, системы учета, телекоммуникационные системы, инструменты для проектирования, графические редакторы и многое, многое другое.

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

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

Все архитектуры подчиняются одним и тем же правилам!

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

Этот вывод кажется еще более потрясающим, если вспомнить, как изменились компьютеры за те же полвека. Я начинал программировать на машинах размером с холодильник, имевших процессоры с тактовой частотой в полмегагерца, 4 Кбайт оперативной памяти, 32 Кбайт дисковой памяти и интерфейс телетайпа со скоростью передачи данных 10 символов в секунду. Это вступление я написал в автобусе, путешествуя по Южной Африке. Я использовал MacBook, оснащенный процессором i7 с четырьмя ядрами, каждое из которых действует на тактовой частоте 2,8 ГГц, имеющий 16 Гбайт оперативной памяти, 1 Тбайт дисковой памяти (на устройстве SSD) и дисплей с матрицей 2880?1800, способный отображать высококачественное видео. Разница в вычислительной мощности умопомрачительная. Любой анализ покажет, что этот MacBook по меньшей мере в 1022 раз мощнее ранних компьютеров, на которых я начинал полвека назад.

Книга от профессионала своего дела, умудренного опытом, следующему поколению разработчиков.Если ты пишешь код, то прочтение книги однозначно сделает тебя лучше.Огорчает правда корявый стиль перевода - иногда читалось туговато именно из-за него.


Эта книга, как и большинство информации об архитектуры в программировании страдает от одних и тех же вещей. Книга похожа на подборку различных вещей связанных с архитектурой, есть главы про функциональное программирование, есть какой-то задел на DDD, ну и конечно же любимый всеми SOLID. Но, информация по всем темам подается очень куцо, без примеров кода и все основные мысли подаются лозунгами, создаётся ощущение что читаешь не цельную книгу, а какое-то краткое резюме на все эти темы. Если вы ещё не знакомы с литературой по архитектуре, то можете прочитать эту книгу, возможно узнаете про какие-то базовые концепции, но если вы ищете что-то продвинутое, с конкретными советами, то эта книга вам ничем не поможет


Главный недостаток книги — чрезмерная абстрактность и теоритизация. Большинство глав вообще без примеров, общими словами. А значит каждый поймет как захочет => прикладная ценность существенно снижается.И конечно фирменный отвратный перевод на русский. Вместо устоявшихся терминов "фича", "юзкейс" — особенность и случай использования. И т. п.Но есть и ряд положительных инсайтов:1. Хорошо показана идея направления зависимостей и изоляции между компонентами (всегда от низкоуровневых к высокоуровневым)
2. Показана роль архитектора, который должен найти этот баланс между идеальной изоляцией компонентов и простотой реализации. Для каждого конкретного случая.
3. Хорошо показано почему архитектурные границы системы не должны совпадать с инфраструктурными (отдельный микросервис != отдельный…


Книга мне "зашла" ( хотя поначалу она не совсем мне понравилась), и заставила пересмотреть некоторые подходы к текущим проектам. Главные мысль книги, по моему мнению:
- Отделяйте вашу бизнес-логику от технологий и деталей реализации.
- Архитектура должна представлять собой "чистые сущности", готовые к имплементации на любом языке, любом фреймворке,
- Проводите осознанные границы между компонентами системы.
- Помните, что архитектура пронизывает всю систему - начиная с конвенций по оформлению CSS стилей и заканчивая стратегиями облачного развертывания в мультизональном режиме. Низкоуровневые решения поддерживают высокоуровневые и наоборот.Наверное, эта книга в основном предназначена для архитекторов и тимлидов, но для обычных разработчиков она тоже будет полезна, ибо "Плох тот солдат,…


Это хорошая и мудрая книга. Про принципы SOLID, про уровни абстракции, про направление зависимостей. Слишком много ооп, впрочем чего еще ждать от книги, в которой столько java (на самом деле куда меньше java-кода, чем в "чистом коде"). Я ещё не строила большие приложения, но когда начну, перечитаю.


Отличная книга о проектировании архитектуры ПО. Автор не привязывается к какому-то конкретному подходу, а дает общие принципы, лежащие в основе успешной архитектуры. Обязательно к прочтению.


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


Довольно очевидные вещи для опытных архитекторов, но всё так четко структурировано и разложено по полочкам, что прочитать было в удовольствие.
Отдельное спасибо автору за последнюю главу "Архитектурная археология" - полувековой срез архитектур программного обеспечения.


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


Все книги на сайте предоставены для ознакомления и защищены авторским правом