La domanda "duplicata" collegata è al meglio una partita incerta, perché sta chiedendo
- è
pattern X
OK ( SÌ / NO )
e chiaramente sono già nel campo NO e successivamente chiedo
- che cos'è
pattern X
chiamato - quali passi possono essere presi per correggere
pattern X
(nessuno dei quali è indirizzato dalla domanda collegata).
Recentemente ho eseguito una revisione del codice su un blocco di codice simile a questo:
public class MyClass
{
private ISomething mySomething;
// ...Other variables omitted for brevity
public MyClass() { mySomething = new Something(); }
/// <summary>
/// Constructor - ONLY USE THIS FOR UNIT TESTING
/// </summary>
public MyClass(ISomething something) { mySomething = something; }
public void MyMethod()
{
// Gets called by the framework, and changes the internal state of the class by using mySomething...
}
// Other methods...
}
Sono preoccupato specificamente con il costruttore sovraccarico. È stato aggiunto esclusivamente per testare questa classe e si farà strada nel codice di produzione.
Esiste un nome per questo pattern / anti-pattern e cosa si può fare per risolverlo?
Per maggiore chiarezza, l'implementazione di Something
è stata aggiunta specificamente allo scopo di poter aggiungere un costruttore sovraccarico a MyClass
. È usato da nessuna parte altro. La sua esistenza è un esempio del problema che mi preoccupa.
ISomething
è strettamente correlato a MyClass
. Non è necessario che sia stato estratto. Anche l'implementazione e l'interfaccia potrebbero assomigliare a:
public interface ISomething
{
string GetClassName();
}
public class Something : ISomething
{
public string GetClassName() { return "MyClass"; }
}
Ciò significa che il corpo di MyClass.MyMethod()
potrebbe essere sostituito con return "MyClass";
Tuttavia, l'uso improprio dell'interfaccia / ottimizzazione prematura sembra un problema separato e non nello spirito della domanda originale (vale a dire considerare un dato di fatto che la classe / interfaccia sia strutturata in questo modo e lasciarla come separata [ma valida] preoccupazione).