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

Онлайн книга

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

Примечания книги

1

Перевод Т. Гнедич. — Примеч. ред.

2

Фильм, вышедший в США в 1970 году, в нашей стране известный под названием «Колосс: Проект Форбина». — Примеч. пер.

3

«Луна жестко стелет», роман Роберта Хайнлайна. — Примеч. пер.

4

Фильм, вышедший в 1968 году, в нашей стране известный под названием «2001 год: Космическая одиссея». — Примеч. пер.

5

Именно «ее», потому что в те годы программистами были в основном женщины.

6

Роберт Мартин. Идеальный программист. Как стать профессионалом разработки ПО. СПб.: Питер, 2016. — Примеч. пер.

7

Роберт Мартин. Чистый код: создание, анализ и рефакторинг. СПб.: Питер, 2013. — Примеч. пер.

8

Роберт Мартин. Быстрая разработка программ. Принципы, примеры, практика. М.: Вильямс, 2004. — Примеч. пер.

9

Из речи, произнесенной в Северо-Западном университете в 1954 году.

10

На самом деле Дейкстра озаглавил свое письмо A Case Against the Goto Statement («Дело против оператора goto»), но редактор CACM Никлаус Вирт изменил заголовок. — Примеч. пер.

11

Перевод статьи на русский язык можно найти по адресу http://hosting.vspu.ac.ru/~chul/dijkstra/goto/goto.htm. — Примеч. пер.

12

Чтобы иметь возможность определить размер экземпляра каждого класса.

13

Например, Smalltalk, Python, JavaScript, Lua и Ruby.

14

И не только программисты на C: большинство языков той эпохи позволяли маскировать одни структуры данных под другие.

15

И продолжает применяться.

16

В разных версиях UNIX требования разные; это всего лишь пример.

17

Перфокарты IBM Hollerith имели ширину 80 колонок. Я уверен, что многие из вас никогда даже не видели их, но они широко были распространены в 1950-е, 1960-е и даже в 1970-е годы.

18

Хотя и косвенно.

19

Спасибо Грегу Янгу, что объяснил мне суть этого понятия.

20

CRUD — аббревиатура, обозначающая набор основных операций с данными: Create (создание), Read (чтение), Update (изменение) и Delete (удаление). — Примеч. пер.

21

В данном случае слово «SOLID» можно перевести как «прочный», «надежный», «основательный». — Примеч. пер.

22

Например, Agile Software Development, Principles, Patterns, and Practices, Robert C. Martin, Prentice Hall, 2002 (Роберт С. Мартин. Гибкая разработка программ на Java и C++: принципы, паттерны и методики. М.: Вильямс, 2017. — Примеч. пер.), http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod и https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) (можно просто выполнить поиск в Google по слову «SOLID»).

23

Bertrand Meyer. Object Oriented Software Construction, Prentice Hall, 1988, p. 23 (Бертран Мейер. Объектно-ориентированное конструирование программных систем. Русская редакция, 2005. — Примеч. пер.).

24

Barbara Liskov. Data Abstraction and Hierarchy, SIGPLAN Notices 23, 5 (May 1988).

25

То есть функцию, которая вызывается операционной системой в момент запуска приложения.

26

Мой первый работодатель хранил в шкафу несколько десятков колод перфокарт с исходным кодом библиотек подпрограмм. Когда кто-то писал новую программу, он просто брал требуемую колоду и добавлял ее в конец колоды со своей программой.

27

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

28

Закон Мура: быстродействие компьютеров, объем памяти и компактность удваиваются каждые 18 месяцев. Этот закон удерживался с 1950-х до 2000 годов, но затем утратил силу, по крайней мере в отношении роста тактовой частоты.

29

См. раздел «Проблема с животными» в главе 27 «Службы: большие и малые».

30

Спасибо Тиму Оттингеру за эту идею.

31

В предыдущих публикациях я использовал для связей имена Efferent (центробежный) и Afferent (центростремительный), Ce и Ca, вместо Fan-out и Fan-in соответственно. Это был всего лишь каприз с моей стороны: мне нравилось сравнение с центральной нервной системой.

32

Автор просит у читателей снисходительности за такое высокопарное заимствование из астрономии.

33

В предыдущих публикациях я дал этой метрике имя В’. Теперь я не вижу причин продолжать эту практику.

34

SOA (Service-Oriented Architecture): сервис-ориентированная архитектура (https://ru.wikipedia.org/wiki/Сервис-ориентированная_архитектура). — Примеч. пер.

35

SOA (Service-Oriented Architecture): сервис-ориентированная архитектура. — Примеч. пер.

36

Слово «архитектура» взято в кавычки, потому что трехуровневая архитектура в действительности не является архитектурой — это топология. Вот вам яркий пример решения, принятие которого хорошая архитектура стремится отложить.

37

Много лет спустя мы смогли перенести фреймворк Velocity на FitNesse.

38

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

39

Хотя в этом случае статический полиморфизм даже нельзя рассматривать как вариант.

40

Меилир Пейдж-Джонс (Meilir Page-Jones) назвал этот компонент «центральным преобразованием» в своей книге The Practical Guide to Structured Systems Design, 2nd ed., Yourdon Press, 1988.

41

Это название предложил Ивар Якобсон (Ivar Jacobson, Object Oriented Software Engineering, Addison-Wesley, 1992).

42

Это название тоже было предложено Иваром Якобсоном в той же книге.

43

Проектирование объектно-ориентированного программного обеспечения. — Примеч. пер.

44

Подход на основе вариантов использования. — Примеч. пер.

45

Data-Context-Interaction — данные, контекст, взаимодействие. — Примеч. пер.

46

Boundary-Control-Entity — граница, управление, сущность. — Примеч. пер.

47

xUnit Patterns, Meszaros, Addison-Wesley, 2007, p. 695. (Джерард Месарош. Шаблоны тестирования xUnit: рефакторинг кода тестов. М.: Вильямс, 2017. — Примеч. пер.).

48

Patterns of Enterprise Application Architecture, Martin Fowler, et. al., Addison-Wesley, 2003, p. 466. (Мартин Фаулер. Шаблоны корпоративных приложений. М.: Вильямс, 2017. — Примеч. пер.).

49

https://ru.wikipedia.org/wiki/Hunt_the_Wumpus.Примеч. пер.

50

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

51

Если вас взволновало несоответствие направлений стрелок на рис. 25.4, напомню, что они соответствуют зависимостям в исходном коде, но не движению потоков данных.

52

В далеком прошлом мы назвали бы компонент на вершине центральным преобразователем (Central Transform). Подробности см. в книге Meilir Page-Jones, Practical Guide to Structured Systems Design», 2nd ed., 1988.

53

Примерно по числу программистов в команде.

54

Хотелось бы надеяться, что в очень редких, но опыт показывает, что это не так.

55

https://insights.sei.cmu.edu/sei_blog/2011/08/the-growing-importance-of-sustaining-software-for-thedod.html

56

Микросхема, управляющая последовательным портом.

57

Фредерик Брукс. Мифический человеко-месяц, или Как создаются программные системы. СПб.: Символ-Плюс (2007). — Примеч. пер.

58

Некоторые производители микроконтроллеров добавляют свои ключевые слова в язык C, чтобы упростить доступ к регистрам и портам из кода на C. К сожалению, как только код начинает использовать такие ключевые слова, он перестает быть кодом на C.

59

General-Purpose Input/Output (интерфейс ввода/вывода общего назначения). — Примеч. пер.

60

В этом предложении преднамеренно использована разметка HTML.

61

Hunt and Thomas, The Pragmatic Programmer. (Э. Хант, Д. Томас. Программист-прагматик. Путь от подмастерья к мастеру. М.: Лори, 2016. — Примеч. пер.)

62

Это мой собственный стиль выделения абстрактных вариантов использования. Я мог бы использовать более стандартный UML-стереотип, такой как <>, но в данный момент я не считаю полезным следовать таким стандартам.

63

Это ужасное имя для класса, но, как будет показано ниже, в действительности это не имеет большого значения.

64

https://martinfowler.com/bliki/PresentationDomainDataLayering.html.

65

Псевдоним «дядюшка Боб» (Uncle Bob) принадлежит автору этой книги Роберту Мартину. — Примеч. пер.

66

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

67

На первой работе, после окончания университета в 1996 году, я занимался созданием клиент-серверных приложений для настольных компьютеров с использованием технологии PowerBuilder и суперпродуктивного языка 4GL, прекрасно подходящего для создания приложений баз данных. Спустя пару лет я создавал клиент-серверные приложения на Java, в которых мне приходилось создавать собственные подключения к базе данных (это было еще до появления JDBC) и наши собственные инструменты с графическим интерфейсом поверх AWT. Для вас это «прогресс»!

68

В шаблоне CQRS (Command Query Responsibility Segregation — разделение ответственности команд и запросов) для чтения и изменения данных используются разные шаблоны.

69

http://www.laputan.org/mud/.

70

Дополнительные сведения можно найти по адресу https://www.structurizr.com/help/c4.

71

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

72

Можно, конечно, схитрить и воспользоваться механизмом рефлексии в Java, но не делайте так, пожалуйста!

73

В ASC нам рассказали историю, как транспортировалась эта ЭВМ. Ее везли на большом грузовике с полуприцепом вместе с мебелью. По пути грузовик, двигаясь на высокой скорости, зацепил крышей мост. ЭВМ не пострадала, но она сместилась вперед и вдребезги раздавила мебель.

74

Сегодня мы могли бы сказать, что она работала с тактовой частотой 142 КГц.

75

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

76

С электронно-лучевыми трубками зеленого свечения, способные отображать только символы ASCII.

77

CRUD — аббревиатура, обозначающая набор основных операций с данными: Create (создание), Read (чтение), Update (изменение) и Delete (удаление). — Примеч. пер.

78

Магическое число 72 пришло из эпохи перфокарт Hollerith, содержавших по 80 символов каждая. Последние 8 символов «резервировались» под порядковый номер на случай, если вы уроните и рассыплете колоду.

79

Да, я понимаю, что это оксюморон.

80

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

81

Да, я знаю, что после записи программного обеспечения в ПЗУ оно превращается в микропрограмму, но микропрограмма не перестает быть программным обеспечением.

82

«Думатель», так назывался компьютер из фантастического романа Дугласа Адамса, давший «ответ на главный вопрос жизни, вселенной и всего такого» (https://ru.wikipedia.org/wiki/Автостопом_по_галактике_(серия_романов)). — Примеч. пер.

83

RKO7.

84

Последнее переиздание на русском языке: Брайн Керниган, Денис Ритчи. Язык программирования C. М.: Вильямс, 2016. — Примеч. пер.

85

Позднее эта аббревиатура получила другую расшифровку: Bob’s Only Successful Software (успешное программное обеспечение Боба).

86

Держателем патента стала наша компания. В нашем контракте с работодателем однозначно говорилось, что права на любые наши изобретения будут принадлежать компании. Мой начальник сказал мне: «Вы продали нам это за один доллар, но мы не выплатили вам этот доллар».

87

Three-Dimensional Black Board — трехмерная черная доска. Если вы родились в 1950-х годах, вам наверняка более знакомой покажется фраза: Drizzle, Drazzle, Druzzle, Drone.

88

Страуструп Б. Язык программирования C++. М.: Бином, 2017. — Примеч. пер.

89

Эллис М., Строуструп Б. Справочное руководство по языку программирования С++ с комментариями. М.: Мир, 1992. — Примеч. пер.

90

Коплиен Д., Программирование на C++. Классика CS. СПб.: Питер, 2004. — Примеч. пер.

91

Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. Объектно-ориентированный анализ и проектирование с примерами приложений. М.: Вильямс, 2010. — Примеч. пер.

92

Computer Aided Software Engineering — автоматизация разработки программного обеспечения.

Автор книги - Роберт Сесил Мартин

Роберт Сесил Мартин

Роберт Сесил Мартин / Robert Cecil Martin, также известный как Дядя Боб / Uncle Bob - консультант и автор в области разработки ПО.

Мартин является профессионалом в области разработки ПО с 1970 года, а с 1990 года становится международным консультантом в этой области. За последние 40 лет он участвовал в различных качествах в сотнях проектов. В 2001 году он организует встречу группы, которая создала гибкую методологию разработки ПО из техник экстремального программирования и был первым председателем "Agile Alliance" - группы из семнадцати независимых практиков нескольких ...

Вход
Поиск по сайту
Ищем:
Календарь
Навигация