• 0 Items - 0.00лв.
    • Количката е празна

29.95лв.

Clean Code Cookbook

Рецепти за подобряване на дизайна и качеството на кода

Share

Софтуерните инженери и архитекти, работещи с големи и сложни кодови бази, трябва да могат да ги поддържат и разширяват ефективно. Книгата с рецепти на Максимилиано Контиери ви отвежда отвъд концепцията за чистия код, като ви показва как да идентифицирате възможностите за извършване на подобрения и да оценявате потенциалното им въздействие върху продуктовия код. Когато става дума за надеждност и еволюция на системата, тези техники носят ползи, които се отплащат във времето.

В книгата ще намерите доказани рецепти за реални ситуации на JavaScript, PHP, Python, Java и много други езици за програмиране, които ще ви помогнат при поддръжката и мащабирането на големи системи. Включени са фундаментални концепции за чист код, сред които четимост, функционална обвързаност, тестове, безопасност, разширяемост и миришещ код, заедно със съответните рецепти.

Представените в книгата рецепти за рефакторинг и проблемите, които се решават с тях, са с нарастваща сложност.

От тази книга:
• ще научите за ползите от чистия код и ще разберете как да идентифицирате възможностите за подобрение;
• ще се запознаете с техники за рефакторинг стъпка по стъпка;
• ще разберете теорията зад чистия код;
• ще видите реални примери на различни ези­ци за програмиране;
• ще получите изчерпателен каталог с миришещи кодове, заедно с обсега на въздействието им и възможните решения;
• ще започнете да пишете код по същество, отдавайки превес на четимостта.

***

„Изключително съдържателна книга с добре обяснена теория и много практически примери. Препоръчителна за всички, опит­ващи се да създават качествен софтуер.“
– Даниел Мока, софтуерен разработчик в Moka IT

„Макси е учен практик, чийто богат опит в софтуерната разработка е синтезиран по великолепен начин в книгата.“
– Алекс Бунарджич, софтуерен разработчик и инструктор

Максимилиано Контиери е в софтуерната индустрия повече от 25 години, като в същото време чете лекции по компютърни науки в Университета на Буенос Айрес. Пише статии за чист код, рефакторинг и миришещ код в популярни платформи. Максимилиано изповядва декларативните и поведенчески парадигми в програмирането, залагайки на основите на софтуера, с цел създаването на елегантни, мащабируеми и стабилни решения.

Година

2024

Корици

Меки

Страници

422

Формат

165х235

Преводач

Влади Владев

Редактор

Ивелин Михайлов

Съдържание

Предисловие… 9
Предговор… 11
За кого е тази книга?… 11
Как е организирана книгата?… 11
Какво е необходимо за работа с книгата?… 12
Достъп до книгата в дигитален формат… 12
Конвенции, използвани в книгата… 12
Използване на примерните кодове… 13
Онлайн обучение с O’Reilly… 14
Как да се свържете с нас?… 14
Благодарности… 15

Чист код… 16
1.1 Какво означава миришещ код?…16
1.2 Какво е рефакторинг?… 16
1.3 Какво е рецепта?… 17
1.4 Защо чист код?… 18
1.5 Четимост, производителност или и двете… 18
1.6 Типове софтуер… 19
1.7 Машинно генериран код… 19
1.8 Относно употребата на някои термини в книгата… 19
1.9 Шаблони за дизайн… 20
1.10 Парадигми в езиците за програмиране… 20
1.11 Обекти срещу класове… 20
1.12 Способност да се променя… 21

Основни аксиоми… 22
2.0 Въведение… 22
2.1 Защо е модел?… 23
2.2 Защо е абстрактно?… 23
2.3 Защо е програмируемо?… 23
2.4 Защо е частично?… 24
2.5 Защо е обяснителен?… 24
2.6 Защо се отнася до реалността?… 25
2.7 Извеждане на правилата… 25
2.8 Един и само един принцип за дизайн на софтуер… 26

Анемични модели… 32
3.0 Въведение… 32
3.1 Преобразуване на анемичните обекти в богати обекти… 33
3.2 Идентифициране същността на обектите… 35
3.3 Премахване на сетърите от обектите… 37
3.4 Премахване генераторите на анемичен код… 39
3.5 Премахване на автоматичните свойства… 41
3.6 Премахване на DTO… 42
3.7 Завършване на празните конструктори… 45
3.8 Премахване на гетърите… 46
3.9 Предотвратяване на обектна оргия… 49
3.10 Премахване на динамичните свойства… 51

Мания по примитиви… 53
4.0 Въведение… 53
4.1 Създаване на малки обекти… 54
4.2 Опредметяване на примитивните данни… 56
4.3 Опредметяване на асоциативните масиви… 57
4.4 Премахване на злоупотребата с низове… 59
4.5 Опредметяване на времевите отпечатъци… 60
4.6 Представяне на подмножествата като обекти…. 61
4.7 Опредметяване на валидацията на низове… 62
4.8 Премахване на ненужнитесвойства… 65
4.9 Създаване на интервали от дати… 67

Изменяемост… 69
5.0 Въведение… 69
5.1 Смяна на var с const… 71
5.2 Деклариране на променливите като променливи… 72
5.3 Забраняване на промени в същността… 74
5.4 Избягване на изменяеми константни масиви… 76
5.5 Премахване на късната инициализация… 77
5.6 Замразяване на изменяемите константи… 79
5.7 Премахване на страничните ефекти… 81
5.8 Предотвратяване на повдигане…. 82

Декларативен код…. 84
6.0 Въведение… 84
6.1 Стесняване на преизползваемите променливи…. 85
6.2 Отстраняване на празните редове… 86
6.3 Премахване на методите с версии… 87
6.4 Премахване на двойните отрицания… 89
6.5 Промяна на неправилно поставените отговорности… 89
6.6 Замяна на явните итерации… 91
6.7 Документиране на решенията за дизайна… 92
6.8 Замяна на магическите числа с константи… 93
6.9 Разделяне на „Какво“ от „Как“… 94
6.10 Документиране на регулярните изрази… 95
6.11 Пренаписване на условията на Йода… 96
6.12 Премахване на комичните методи… 97
6.13 Избягване на ада от обратни извиквания… 98
6.14 Генериране на добри съобщения за грешка… 99
6.15 Избягване на магическите корекции… 101

Наименуване… 103
7.0 Въведение… 103
7.1 Разгръщане на съкращенията…103
7.2 Преименуване и разбиване на помощниците и спомагателните програми… 105
7.3 Преименуване на MyObject… 108
7.4 Преименуване на променливите result… 109
7.5 Преименуване на променливите с название на типа… 111
7.6 Преименуване на дългите имена… 112
7.7 Смяна на абстрактните имена… 113
7.8 Коригиране на правописните грешки… 114
7.9 Премахване на името на класа от атрибутите… 114
7.10 Премахване на първата буква от класовете и интерфейсите… 115
7.11 Преименуване на Basic / Do функциите… 117
7.12 Преобразуване на имена на класове от мн.ч. в ед.ч… 118
7.13 Премахване на Collection от имената… 119
7.14 Премахване на Impl от имената на класовете… 120
7.15 Преименуване на аргументите според ролята… 121
7.16 Премахване на повтарящите се имена на параметри… 122
7.17 Премахване на необоснования контекст от имената… 123
7.18 Избягване на data в имената…. 124

Коментари… 126
8.0 Въведение… 126
8.1 Премахване на коментирания код… 126
8.2 Премахване на остарелите коментари… 128
8.3 Премахване на логическите коментари… 130
8.4 Премахване коментарите на гетъра… 131
8.5 Преобразуване на коментарите в имена на функции… 132
8.6 Отстраняване на коментарите в методите… 133
8.7 Замяна на коментарите с тестове… 135

Стандарти… 138
9.0 Въведение… 138
9.1 Придържане към стандарти за писане на код… 138
9.2 Стандартизиране на отстоянията… 141
9.3 Унифициране на конвенциите за регистъра на буквите… 142
9.4 Пишете кода на английски… 143
9.5 Унифициране на реда на параметрите… 145
9.6 Поправка на „счупени прозорци“… 146

Сложност… 148
10.0 Въведение… 148
10.1 Премахване на повтарящия се код… 148
10.2 Премахване на Settings/Configs и превключвателите на функционалност… 151
10.3 Промяна на състоянието като свойство… 152
10.4 Премахване на хитрините в кода… 155
10.5 Прекъсване на многочислените обещания… 156
10.6 Прекъсване на дългите вериги за съвместна работа… 157
10.7 Изваждане на метод в обект… 159
10.8 Внимавайте с конструкторите на масиви… 161
10.9 Премахване на полтъргайст обектите… 162

Подутини…. 164
11.0 Въведение… 164
11.1 Разбиване на твърде дългите методи… 164
11.2 Редуциране на излишните аргументи… 165
11.3 Редуциране на излишните променливи… 167
11.4 Премахване на излишните скоби… 169
11.5 Премахване на излишните методи… 170
11.6 Разбиване на твърде многото атрибути… 172
11.7 Съкращаване на списъците с команди за импортиране… 173
11.8 Разбиване на And функции… 174
11.9 Разбиване на тлъстите интерфейси… 176

YAGNI… 178
12.0 Въведение… 178
12.1 Премахване на мъртъв код… 178
12.2 Използване на код вместо диаграми… 180
12.3 Рефакторинг на класовете с един подклас… 182
12.4 Премахване на еднократните интерфейси… 183
12.5 Отстраняване на злоупотребите с шаблони за дизайн… 185
12.6 Замяна на бизнес колекциите… 185

Бърз отказ… 188
13.0 Въведение… 188
13.1 Рефакторинг на повторно използваните променливи… 188
13.2 Налагане на предварителни условия… 190
13.3 Използване на по-стриктни параметри… 192
13.4 Премахване на Default от Switch конструкциите… 194
13.5 Избягване модифицирането на колекции по време на обхождане… 195
13.6 Предефиниране на хеша и еднаквостта… 196
13.7 Рефакторинг без функционални промени… 198

If условия… 200
14.0 Въведение… 200
14.1 Замяна на инцидентни If инструкции с полиморфизъм… 201
14.2 Преименуване на флаговите променливи за събития… 208
14.3 Опредметяване на булевите променливи… 209
14.4 Замяна на инструкциите Switch/Case/Elseif… 211
14.5 Замяна на твърдо кодираните If условия с колекции… 213
14.6 Смяна на булевите изчисления с кратки схеми… 214
14.7 Добавяне на имплицитната Else клауза… 215
14.8 Пренаписване на условията със стъпаловидна форма… 217
14.9 Избягване на хакове с кратка схема… 218
14.10 Пренаписване на вложения стъпаловиден код… 219
14.11 Предотвратяване връщането на булеви стойности при проверки на условие… 221
14.12 Смяна на сравненията по булева стойност… 223
14.13 Изваждане от дълги тернарни изрази… 224
14.14 Преобразуване на неполиморфни функции в полиморфни… 226
14.15 Промяна на проверката за еднаквост… 227
14.16 Опредметяване на твърдо кодираните бизнес условия… 228
14.17 Премахване на необоснованата булевост… 229
14.18 Пренаписване на вложените тернарни изрази… 230

Null… 233
15.0 Въведение… 233
15.1 Създаване на Null Обекти… 233
15.2 Премахване на опционалните вериги… 237
15.3 Преобразуване на незадължителните атрибути в колекция… 239
15.4 Използване на реални обекти за Null… 241
15.5 Представяне на неизвестни местоположения без използване на Null… 244

Преждевременна оптимизация… 247
16.0 Въведение… 247
16.1 Избягване на ID полета в обектите… 248
16.2 Премахване на преждевременната оптимизация… 251
16.3 Премахване на побитовите преждевременни оптимизации… 252
16.4 Съкращаване на свръхгенерализацията… 254
16.5 Промяна на структурната оптимизация… 255
16.6 Премахване на закотвените лодки… 256
16.7 Изваждане на кеша от обектите на ключовата област… 257
16.8 Премахване на събитията за обратно извикване, базирани на имплементация… 259
16.9 Премахване на заявките от конструкторите… 261
16.10 Премахване на кода от деструкторите… 262

Функционално обвързване… 265
17.0 Въведение… 265
17.1 Правим скритите допускания явни… 265
17.2 Замяна на „Сек“… 267
17.3 Разбиване на божествените обекти… 270
17.4 Разбиване на дивергентната промяна… 273
17.5 Преобразуване на специалната маркирана стойност 9999 в нормална… 274
17.6 Премахване на стрелбата с топ…. 276
17.7 Премахване на незадължителните аргументи… 278
17.8 Предотвратяване на завистливи функции… 279
17.9 Премахване на посредника… 281
17.10 Преместване на аргументите по подразбиране в края… 282
17.11 Избягване на пулсиращ ефект… 284
17.12 Премахване на инцидентните методи от бизнес обектите… 286
17.13 Премахване на бизнес кода от потребителския интерфейс… 287
17.14 Смяна на функционалната обвързаност с класове… 290
17.15 Рефакторинг на скупчени данни… 292
17.16 Прекъсване на неуместна интимност… 294
17.17 Преобразуване на заменими обекти… 295

Глобални елементи… 297
18.0 Въведение… 297
18.1 Опредметяване на глобалните функции… 297
18.2 Опредметяване на статичните функции… 298
18.3 Замяна на GoTo със структурен код… 300
18.4 Премахване на глобалните класове… 301
18.5 Смяна на глобалното създаване на дата… 303

Йерархии… 305
19.0 Въведение… 305
19.1 Разбиване на дълбокото наследяване… 305
19.2 Разбиване на йо-йо йерархиите…. 308
19.3 Разбиване на подкласификацията за повторно използване на кода… 309
19.4 Замяна на връзка от тип „е“ с поведение… 312
19.5 Премахване на вложените класове…. 314
19.6 Преименуване на изолираните класове… 315
19.7 Преобразуване конкретните класове във финални…. 316
19.8 Явно дефиниране на наследяването… 318
19.9 Мигриране на празните класове… 320
19.10 Отлагане на преждевременната класификация… 321
19.11 Премахване на защитените атрибути… 323
19.12 Завършване на празните имплементации… 325

Тестване… 328
20.0 Въведение… 328
20.1 Тестване на частни методи… 329
20.2 Добавяне на описания към твърденията… 330
20.3 Мигриране на assertTrue към специфични твърдения…332
20.4 Замяна на имитиращите обекти с реални…333
20.5 Прецизиране на общите твърдения… 335
20.6 Премахване на нестабилните тестове… 336
20.7 Смяна на твърденията с числа с плаваща запетая… 338
20.8 Смяна на тестовите данни с реалистични данни… 339
20.9 Предпазване от тестове, които нарушават капсулирането… 342
20.10 Премахване на нерелевантната тестова информация…. 344
20.11 Покриване на всяка заявка за сливане…. 345
20.12 Пренаписване на зависимите от дати тестове… 347
20.13 Изучаване на нов език за програмиране… 348

Технически дълг… 349
21.0 Въведение…. 349
21.1 Премахване на зависимостите от продуктовия режим… 350
21.2 Премахване тракерите на дефекти… 352
21.3 Премахване на Warning/Strict Off… 353
21.4 Предотвратяване и премахване на ToDo и FixMe… 354

Изключения… 357
22.0 Въведение… 357
22.1 Премахване на празните блокове за изключения… 357
22.2 Премахване на ненужните изключения… 358
22.3 Пренаписване на изключенията за очакваните случаи… 360
22.4 Пренаписване на вложените Try/Catch конструкции… 361
22.5 Замяна на връщане на код с изключения… 363
22.6 Пренаписване на изключенията със стъпаловиден код…. 365
22.7 Скриване на грешки от ниско ниво от крайните потребители… 366
22.8 Стесняване на try блоковете…. 367

Метапрограмиране… 369
23.0 Въведение… 369
23.1 Премахване на метапрограмирането… 369
23.2 Опредметяване на анонимните функции… 373
23.3 Премахване на предпроцесорите… 375
23.4 Премахване на динамичните методи… 377

Типове… 379
24.0 Въведение… 379
24.1 Премахване на проверките за типа… 379
24.2 Справяне с истинните стойности… 381
24.3 Смяна на числата с плаваща запетая с реални числа с десетична стойност… 384

Безопасност…. 386
25.0 Въведение… 386
25.1 Саниране на входните данни… 386
25.2 Промяна на последователни ID… 388
25.3 Премахване на зависимостите от пакети… 390
25.4 Замяна на лошите регулярни изрази… 391
25.5 Защита на десериализацията на обектите… 392

Речник на термините… 395
Колофон… 421
За автора… 422