Щоразу, коли я чую про анти-шаблони, я згадую інший термін саме. Дизайнерський запах.
"Дизайнерські запахи - це певні структури в дизайні, які вказують на порушення фундаментальних принципів дизайну і негативно впливають на якість дизайну". (Від "Рефакторинг на дизайн дизайну програмного запаху: Управління технічним боргом")
Існує багато дизайнерських запахів, класифікованих на основі порушень принципів дизайну:
Абстракція пахне
Відсутня абстракція: цей запах виникає, коли замість створення класу чи інтерфейсу використовуються згустки даних або закодованих рядків.
Імперативна абстракція: Цей запах виникає, коли операція перетворена на клас.
Неповна абстракція: Цей запах виникає, коли абстракція не підтримує комплементарних або взаємопов'язаних методів повністю.
Багатогранна абстракція: Цей запах виникає, коли на абстракцію покладено більше ніж одна відповідальність.
Непотрібна абстракція: Цей запах виникає тоді, коли абстракція, яка насправді не потрібна (і, таким чином, можна було б уникнути), вводиться в розробку програмного забезпечення.
Неприйнята абстракція: Цей запах виникає, коли абстракцію не використовуватимуть (або не використовується безпосередньо, або не досягається).
Дубльована абстракція: Цей запах виникає, коли дві або більше абстракцій мають однакові назви або однакове виконання або те і інше.
Інкапсуляція пахне
Дефіцитна інкапсуляція: Цей запах виникає, коли заявлена доступність одного або декількох членів абстракції є більш дозвольною, ніж потрібно фактично.
Leaky Incapsulation: Цей запах виникає, коли абстракція "викриває" або "протікає" деталі реалізації через її публічний інтерфейс.
Відсутня інкапсуляція: Цей запах виникає, коли варіації впровадження не інкапсульовані в межах абстракції чи ієрархії.
Некористувана інкапсуляція: цей запах виникає, коли код клієнта використовує явні перевірки типу (використовуючи ланцюгові оператори if-else або перемикання, що перевіряють тип об’єкта), а не використовувати варіації типів, які вже інкапсульовані в межах ієрархії.
Модуляризація пахне
Порушена модуляризація: Цей запах виникає, коли дані та / або методи, які в ідеалі повинні були бути локалізовані в одній абстракції, відокремлені та розповсюджені на кілька абстракцій.
Недостатня модуляризація: Цей запах виникає, коли існує абстракція, яка не була повністю розкладена, і подальше розкладання могло б зменшити її розмір, складність реалізації або те і інше.
Циклічно-залежна модуляризація: Цей запах виникає, коли дві або більше абстракцій залежать одна від одної прямо чи опосередковано (створюючи щільну зв'язок між абстракціями).
Модуляризація, подібна до концентраторів: Цей запах виникає, коли абстракція має залежність (як вхідну, так і вихідну) при великій кількості інших абстракцій.
Ієрархія пахне
Відсутня ієрархія: Цей запах виникає, коли кодовий сегмент використовує умовну логіку (як правило, у поєднанні з "типами з тегами") для явного управління варіаціями поведінки, де ієрархія могла бути створена і використана для інкапсуляції цих варіантів.
Непотрібна Ієрархія: Цей запах виникає тоді, коли вся ієрархія спадщини є непотрібною, що вказує на те, що успадкування було застосовано без потреби для конкретного дизайнерського контексту.
Нефактована ієрархія: Цей запах виникає при непотрібному дублюванні серед типів в ієрархії.
Широка Ієрархія: Цей запах виникає, коли ієрархія спадкування є "занадто" широкою, що вказує на відсутність проміжних типів.
Спекулятивна ієрархія: Цей запах виникає, коли один або кілька типів в ієрархії надаються спекулятивно (тобто, виходячи із уявних потреб, а не реальних вимог).
Глибока ієрархія: Цей запах виникає, коли ієрархія спадкування є "надмірно" глибокою.
Бунтівна ієрархія: Цей запах виникає, коли підтип відкидає методи, передбачені його супертипами.
Порушена ієрархія: Цей запах виникає, коли супертип і його підтип концептуально не поділяють відношення "IS-A", що призводить до порушеної замінюваності.
Ієрархія множинних шляхів : Цей запах виникає, коли підтип успадковує як безпосередньо, так і опосередковано супертип, що веде до непотрібних шляхів успадкування в ієрархії.
Циклічна ієрархія: Цей запах виникає, коли супертип в ієрархії залежить від будь-якого з його підтипів.
Вищеописане визначення та класифікація описані у "Рефакторингу програмного забезпечення запахів: Управління технічним боргом ". Більше релевантних ресурсів можна знайти тут .