Як називається антипатерн, протилежний "винахід колесу"? [зачинено]


101

Антипатерн " Нагадуй колесо " досить поширений - замість того, щоб використовувати готове рішення, пишіть своє з нуля. База коду зростає непотрібно, трохи різні інтерфейси, які роблять те саме, але трохи інакше рясніють, витрачається час на написання (і налагодження!) Функцій, які легко доступні. Ми всі це знаємо.

Але є щось на протилежному кінці спектра. Коли замість того, щоб записати власну функцію, яка складається з двох рядків коду, ви імпортуєте рамку / API / бібліотеку, інстанціюєте її, налаштовуєте, конвертуєте контекст у тип даних як прийнятний рамкою, а потім викликаєте одну єдину функцію, яка робить саме те, що вам потрібно, два рядки ділової логіки під гігабайт шарів абстракції. І тоді вам потрібно буде постійно оновлювати бібліотеку, керувати побудови залежностей, синхронізувати ліцензії, і ваш код цього примірника в десять разів довший і складніший, ніж якби ви просто «винаходили колесо».

Причини можуть бути найрізноманітнішими: керівництво суворо протиставляє "переосмислення колеса" незалежно від вартості, хтось натискає на свою перевагу технології, незважаючи на незначне перекриття вимог, зменшення ролі раніше головного модуля системи або очікування розширення та розширення. використання фреймворку, який просто ніколи не надходить, або просто непорозуміння "ваги" пари інструкцій щодо імпорту / включення / завантаження "за кадром".

Чи є загальна назва цього типу антипатернів?

(Я не намагаюся розпочати дискусію, коли це правильно чи неправильно, або якщо це справжня антипатрія чи що-небудь, на основі думки , це просте просте і об'єктивне номенклатурне питання.)

Редагувати: запропонований "дублікат" говорить про переобладнання власного коду, щоб зробити його "готовим до всього", повністю крім зовнішніх систем. Ця річ може в деяких випадках випливати з неї, але загалом вона походить від "відрази до винахідництва колеса" - повторне використання коду за будь-яку ціну; якщо "готове" рішення нашої проблеми існує, ми будемо використовувати її, незалежно від того, наскільки вона погано підходить і за яку ціну вона надійде . Догматично виступає за створення нових залежностей від дублювання коду, з повним ігноруванням витрат на інтеграцію та підтримку цих залежностей порівняно з витратами на створення та обслуговування нового коду.


52
Залежність пекла . Це найближче, про що я можу придумати.
Мачадо

5
@Machado: Приємно, хоч я б сказав, що пекло залежностей - це прямий результат достатку цього антидіаграму; у випадку надзвичайно складних систем це може бути прямолінійним результатом складності.
СФ.

27
Я б назвав це "повзанням залежності" аналогом Feature_creep або Scope_creep, де в продукт додається все більше і більше непотрібних функцій.
k3b

21
Тілесне фіаско на лівій підкладці - це реальний приклад цього синдрому в дії.
СФ.

13
Я рекомендую почати колективно посилатися на це як на LeftPad.
RubberDuck

Відповіді:


9

Ні. Немає загальновживаної назви анти візерунка, яка б охоплювала те, що ви описуєте.


4
Це з'являється з кількістю ідей, пропозицій та обговорень, які вони викликали, це насправді правильно.
СФ.

3
Я відчуваю себе брудно, роблячи це.
СФ.

Так? "Немає XXX" - це дуже сильне твердження, яке дуже важко довести, особливо враховуючи, що в коментарях є кілька кандидатів.
AnoE

1
@AnoE "Чи існує загальна назва цього типу антипатернів?" Докази в зазначених коментарях та відповідях значною мірою означають, що їх немає. Щоправда, він не відповідає заголовку, але відповідає на саме запитання.
Кролтан

@AnoE Не можна довести негатив, дорога. Можливо, термін десь ховається під скелею в Борнео, і ми просто ще не перевалили його? Про те, що є 10 відповідей замість 1 із мільйонами нагород, для мене досить підтвердження.

49

Золотий молоток

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

джерело: xkcd 801

(Незважаючи на голосування "за", я стою проти цієї відповіді. Це може бути не протилежною повторному винайденню колеса семантично, але це відповідає кожному прикладу, згаданому в питанні)


5
Оновлено, і ви також можете отримати його з wikipedia: en.wikipedia.org/wiki/Anti-pattern , en.wikipedia.org/wiki/Law_of_the_instrument
Pierre.Sassoulas

3
Я б спростував це, якби у мене був представник. Він не відповідає на питання в цілому, але пропонує один (точний) термін, який відповідає лише одному із запропонованих сценаріїв.
Девід

3
Просили навпаки. Це як би наполягати на тому, що "Becquerel" (випромінювання, одиниця s ^ -1) може використовуватися для музики замість Герца (гц, одиниця s ^ -1), оскільки вони обидва означають "за секунду".
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen У свій день я чув досить небезпечну музику.

34

Роберт Мартін використовує термін " Рамковий зв'язаний " для позначення найбільш очевидних негативних наслідків цього антидіаграму. Оскільки я не думаю, що існує загальна назва самого шаблону, посилання на цей наслідок може бути достатньою для більшості цілей.


1
Рамки існують для прискорення процесу розробки. Вони схожі на ракет-бустер: витрачаються, як тільки використовуються. Рішення таке - випустити версію першу, де ми були? Правильно, розробляємо програмне забезпечення. Далі! Технічне обслуговування - це окрема проблема, і я думаю, що це має бути неважливим у ці дні. Перейдіть до наступного рішення до наступного рішення, опублікуйте поспіх.

18

На цій сторінці вікіпедії на " Винайденому тут " описана дещо інша ситуація, але з дуже схожими кінцевими результатами. Описується неприязнь команди до створення власного коду, коли там можна знайти еквівалентну функціональність.

Я б стверджував, що це ім'я трохи вводить в оману. Створює сенс, коли його ставлять у контекст із протилежним Not Invented Here, що IMHO є синонімом переосмислення колеса.


13

Я чув " Купити Versus Build " та " Invented Here " як назви анти-шаблонів для упередження щодо розвитку речей у себе, навіть коли це може мати сенс робити. (І хоча словосполучення "купувати проти будівництва" повинно вказувати на вибір між життєздатними альтернативами, я вважаю, що це зазвичай згадується тоді, коли хтось вважає, що "купити" - це правильний вибір.)


9

Не використовуйте гармати для вбивства комара

Конфуцій

AKA Overkill


5
Поширена (Великобританія) англійська фраза - "використання кувалди для розтріскування горіха".
nigel222


також: "полювання на оленя з
таном

"Плаваючі мухи молотком"

Не використовуйте молоток, щоб убити муху
jeffmcneill

8

Bloat - широкий термін, але він може включати те, що ви описуєте. Наше програмне забезпечення стає надмірно складним (роздутим) через усі необхідні додаткові трансформації та абстракції, а складність та самі залежності сприяють зниженню продуктивності / меншій ефективності та більшому споживанню ресурсів (диск, пропускна здатність).

Якщо ми хочемо, ми могли б уточнити таким терміном, як роздуті залежності .


5

Я думаю, що використання кувалди для розтріскування горіха досить близько. Це можливо щось, але для того, щоб зламати одну гайку таким чином, потрібна непомірна робота, без будь-яких численних можливих небажаних побічних ефектів. (А там цілий мішок горіхів зламати ...)

Перевага також має перевагу в тому, що це не обчислення жаргону, тому може бути дуже корисним у наданні поняття тому, у кого його немає.

До речі, існує відмінність, яку слід намалювати в пеклі залежності . Якщо хтось уже завернув усі складності всередині інкапсуляції, яка створює прості, зрозумілі, прості у користуванні інтерфейси та за умови, що штраф в циклах процесора або використання пам'яті не є надмірним, і за умови подальшої модифікації інкапсульованого коду навряд чи буде необхідний, то залишився аргумент проти його використання - це пекло залежності, яке воно може спричинити.


5

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

Принаймні, я б заперечував, що саме це насправді відбувалося, коли я стикався з чимось подібним до того, що ви описуєте.

Використання бібліотеки замість написання власного коду для реалізації тієї ж функціональності майже ніколи не шкідливо.

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

Бібліотека, щоб зробити просту річ, також буде простою. Це, ймовірно, не доставить вам головних болів, які має на увазі ваше запитання.

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

Такі, як побудувати функції, які не потрібні, підготуватися до майбутнього, яке може ніколи не настати тощо.

Проблема тут насправді не в тому, щоб винаходити колесо як таке .


4

Якщо ви ще не придумали колесо, швидше за все, використовуєте наявний набір коліс, наданий постачальником або третьою стороною.

Якщо це анти-шаблон, то його зазвичай називають блокуванням постачальників.


6
Я не відчуваю, що це одне й те саме. Блокування входу постачальника є одним із особливо негативних результатів залежно від рішення постачальника, незалежно від того, чи було використання постачальника економічно вигідним при виборі рішення. ОП більше запитує про термін вибору стороннього рішення, коли вартість інтеграції вища, ніж вартість простого розробки нового рішення з нуля (а блокування постачальників, мабуть, навіть не відбувається, у випадках, коли це буде недорого розробити нове рішення, а не покладатися на постачальника).
Бен

@Ben - Гаразд, мені подобається рамки зв'язані на відміну від блокування постачальника в кращу сторону. Це питання ґрунтується на певній думці, і це було перше, що мені впало в голову.
Джон Рейнор

0

Безпека роботи?
Ви згадуєте всі зусилля щодо синхронізації речей тощо. Деякі люди швидше керують кодом інших людей, ніж пишуть свій власний. Менеджери, особливо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.