Ogni volta che sento parlare di Anti- modelli, ricordo un altro termine viz. Odore di design. .
"odori di design sono alcune strutture nella progettazione che indicano violazione dei principi fondamentali di progettazione e avere un impatto negativo la qualità del design” (Da 'refactoring per Software Design Smells: La gestione del debito tecnica')
Ci sono molti odori di design classificate in base violare principi di progettazione:
astrazione odori
mancante astrazione: Questo odore si verifica quando ciuffi di dati o str codificati vengono utilizzati invece di creare una classe o un'interfaccia.
Astrazione imperativa: Questo odore si verifica quando un'operazione viene trasformata in una classe.
Astrazione incompleta: Questo odore si manifesta quando un'astrazione non supporta completamente i metodi complementari o interrelati.
Astrazione sfaccettata: Questo odore si manifesta quando un'astrazione ha più di una responsabilità assegnata.
Astrazione non necessaria: Questo odore si verifica quando un'astrazione che non è effettivamente necessaria (e quindi potrebbe essere stata evitata) viene introdotta in un progetto software.
Astrazione non utilizzata: Questo odore si manifesta quando un'astrazione non viene utilizzata (non utilizzata direttamente o non raggiungibile).
Estrazione duplicata: Questo odore si manifesta quando due o più astrazioni hanno nomi identici o un'implementazione identica o entrambe.
Encapsulation odori
Encapsulation deficiente: Questo odore si verifica quando l'accessibilità dichiarata di uno o più membri di un astrazione è più permissiva che effettivamente necessaria.
Incapsulamento a tenuta: Questo odore si manifesta quando un'astrazione "espone" o "perde" i dettagli di implementazione attraverso la sua interfaccia pubblica.
mancante Incapsulamento: Questo odore si verifica quando le variazioni di implementazione non sono incapsulati all'interno di un'astrazione o una gerarchia.
Encapsulation ancora sfruttato: Questo odore sorge quando il codice client utilizza controlli di tipo esplicite (usando incatenato if-else o switch istruzioni che controllano il tipo di oggetto) anziché sfruttare la variazione nei tipi già incapsulati all'interno di una gerarchia.
modularizzazione odori
rotto modularizzazione: Questo odore si pone quando i dati e/o metodi che idealmente avrebbe dovuto essere localizzati in un unico astrazione sono separati e distribuiti su più astrazioni.
Modularizzazione insufficiente: Questo odore si verifica quando esiste un'astrazione che non è stata completamente scomposta e un'ulteriore decomposizione potrebbe ridurne dimensioni, complessità di implementazione o entrambe.
Modularizzazione dipendente dal ciclo: Questo odore si verifica quando due o più astrazioni dipendono l'una dall'altra direttamente o indirettamente (creando un accoppiamento stretto tra le astrazioni).
Modularizzazione mozzo: Questo odore si verifica quando un'astrazione ha dipendenze (sia in entrata che in uscita) con un gran numero di altre astrazioni.
Gerarchia odori
Gerarchia mancante: Questo odore si pone quando un segmento di codice utilizza logica condizionale (in genere in concomitanza con “tag tipi”) per gestire in modo esplicito la variazione nel comportamento in cui potrebbe essere stato creato una gerarchia e usato per incapsulare quelle variazioni.
Gerarchia inutile: Questo odore sorge quando l'intera gerarchia di ereditarietà è inutile, che indica che l'ereditarietà è stata applicata inutilmente per il particolare contesto disegno.
Gerarchia non formattata: Questo odore si verifica quando c'è una duplicazione non necessaria tra i tipi in una gerarchia.
Gerarchia ampia: Questo odore si verifica quando una gerarchia di ereditarietà è "troppo" ampia e indica che potrebbero mancare tipi intermedi.
Gerarchia speculativa: Questo odore si manifesta quando uno o più tipi in una gerarchia vengono forniti in modo speculativo (vale a dire, in base a bisogni immaginati piuttosto che a requisiti reali).
Gerarchia profonda: Questo odore si manifesta quando una gerarchia dell'eredità è "eccessivamente" profonda.
Gerarchia ribelle: Questo odore si verifica quando un sottotipo rifiuta i metodi forniti dai suoi supertipi.
Gerarchia spezzata: Questo odore si verifica quando un supertipo e il suo sottotipo concettualmente non condividono una relazione "IS-A" con conseguente sostituibilità interrotta.
Gerarchia multipercorso: Questo odore si verifica quando un sottotipo eredita sia direttamente sia indirettamente da un supertipo che conduce a percorsi di ereditarietà non necessari nella gerarchia.
Gerarchia ciclica: Questo odore si verifica quando un supertipo in una gerarchia dipende da uno qualsiasi dei suoi sottotipi.
La definizione di cui sopra e la classificazione è descritto in "Refactoring for software design smells: Managing technical debt". Alcune risorse più rilevanti è stato trovato here.
https://sourcemaking.com/antipatterns – jaco0646
http://martinfowler.com/bliki/AntiPattern.html – jaco0646