Въведение в анти-шаблоните

Антишаблоните са точно обратното на шаблоните. Спомнете си, че моделите на проектиране са примери за добри практики за програмиране, тоест модели за решаване на определени проблеми. Но антимоделите са тяхната пълна противоположност, тоест модели на грешки, които се правят при решаването на различни проблеми.

Част от добрата програмна практика е именно избягването на анти-модели. Не мислете, че това е толкова неразбираем теоретичен боклук - това са специфични проблеми, с които се е сблъсквал почти всеки разработчик. Който е наясно, той е въоръжен!

Нека да разгледаме няколко анти-модели, които са често срещани сред начинаещите:

  • Магически числа и низове
  • бог клас
  • Преждевременна оптимизация
  • изобретяването на велосипеда
  • Изобретяване на моноколката

Магически числа и низове

Магическото число е константа, използвана в codeа за нещо (най-често идентификация на данни), чието само число няма смисъл без съответен коментар. Числата не носят абсолютно ниHowва семантика.

Когато в codeа на вашия проект започнат да се появяват числа, чието meaning не е очевидно, това е много лошо. Програмист, който не е автор на такъв code, ще има затруднения да обясни How работи. След време дори авторът на codeа с магически числа няма да може да го обясни.

Числата правят codeа труден за разбиране и преработване. Основните причини за тази грешка са бързането в разработката и липсата на практика в програмирането. Този анти-модел трябва да бъде пресечен в зародиш, като се предвиди използването на числови константи, преди да започне разработката.

За да разрешите този проблем, трябва да създадете променлива, чието име обяснява целта на числовата константа и да й присвоите желаната стойност.

бог клас

Божественият обект е анти-модел, който е доста често срещан сред ООП разработчиците. Такъв обект поема твърде много функции и/or съхранява почти всички данни. В резултат на това имаме непреносим code, който освен това е труден за разбиране.

Освен това такъв code е доста труден за поддръжка, като се има предвид, че цялата система зависи почти изключително от него. Причини за тази грешка: некомпетентност на програмиста, един разработчик, който поема голяма част от работата (особено когато количеството работа надвишава нивото на опит на разработчика).

Необходимо е да се справите с този подход, като разделите задачите на подзадачи, с които могат да се справят различни разработчици.

Преждевременна оптимизация

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

На практика е трудно да се предвиди къде ще възникне тясно място. Опитите за оптимизиране преди получаване на емпирични резултати ще доведат до сложност на codeа и появата на грешки, но няма да донесат ниHowви ползи.

Как да се избегне? Първо, напишете чист, четим, работещ code, като използвате добре познати и доказани алгоритми и инструменти. Ако е необходимо, използвайте инструменти за профorране, за да намерите тесни места. Разчитайте на измервания, а не на догадки и предположения.

Примери и характеристики

Кеширане преди профorране. Използване на сложни и недоказани евристики instead of математически правилни алгоритми. Селекция от нови, нетествани рамки, които може да се държат неправилно при натоварване.

Каква е трудността

Не е лесно да се определи кога оптимизацията е преждевременна. Важно е предварително да оставите място за растеж. Трябва да изберете решения и платформи, които ви позволяват лесно да оптимизирате и растете. Също така понякога преждевременната оптимизация се използва като извинение за лош code. Например, те приемат алгоритъм O(n2) само защото алгоритъмът би бил O(n) по-труден.

изобретяването на велосипеда

Смисълът на този анти-модел е, че програмистът разработва собствено решение на проблем, за който вече съществуват решения, а често и много по-успешни.

Разработчикът се смята за по-умен, затова се опитва да измисли собствено решение за всяка задача, въпреки опита на своите предшественици. Най-често това води само до загуба на време и намаляване на ефективността на програмиста. В крайна сметка решението вероятно ще бъде неоптимално, ако изобщо бъде намерено.

Разбира се, не можете напълно да отхвърлите възможността за независимо решение, тъй като това ще доведе до копиране и поставяне на програмиране по директен начин. Разработчикът трябва да се ориентира в задачите, които могат да се появят пред него, за да ги реши компетентно, като използва готови решения or измисля свои собствени.

Много често причината за този антимодел е обикновена липса на време. А времето е пари.

Изобретяване на велосипед с квадратно колело

Този анти-модел е много тясно свързан с простото преоткриване на колелото - създаване на собствено лошо решение, когато съществува по-добро решение.

Този анти-модел отнема два пъти повече време: първо, времето се изразходва за изобретяване и прилагане на вашето собствено решение, а след това за преработване or замяна.

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

Всички проблеми, с които ще се сблъскате като програмист, могат да бъдат разделени на две части:

  • умните хора са решor този проблем преди 30 години
  • умните хора са решor този проблем преди 50 години

Повечето проблеми с програмирането са бor успешно решени още преди да сте се родor . Няма нужда да измисляте нищо - просто изучавайте опита на други хора (за това се пишат книгите).

През 2022 г. можем да празнуваме следните рождени дни:

  • Програмни езици
    • Езикът C навършва 50 години (1972)
    • Езикът Java навърши 27 години (1995)
    • Python става на 31 (1991)
  • Връзка
    • Интернет навърши 39 години (1983)
    • Мобилният телефон навърши 49 (1973)
    • Първият SMS е изпратен преди 30 години (1992)
  • Шарки
    • Моделът MVC навърши 44 години (1978)
    • SQL е изобретен преди 48 години (1974 г.)
    • Java Beans са изобретени преди 26 години (1996)
  • библиотеки
    • Hibernate е изобретен преди 21 години (2001)
    • Пролетта е изобретена преди 20 години (2002)
    • Tomcat пуснат преди 23 години (1999)
  • операционна система
    • Unix е пуснат преди 51 години (1971)
    • Windows видя бял свят преди 37 години (1985)
    • Mac OS пусната преди 21 години (2001)

И всички тези неща не бяха просто измислени, те бяха разработени като решения на проблеми, които бяха много често срещани и актуални по това време.