In primo luogo, il codice è molto difficile da leggere in quanto si ignorano le convenzioni di codifica C #: si ha un nome di classe camelCase e un nome di variabile PascalCase. Quindi, nei miei esempi qui sotto, ho risolto ciò per rendere più semplice la lettura di altre persone che hanno familiarità con le convenzioni in C #.
var result = MyGateway.SelectAll(p1, p2, p3);
Questo è un esempio di antipattern del localizzatore. Poiché MyGateway.SelectAll
è statico, non esiste un modo semplice per sostituire l'implementazione effettiva per una più semplice durante il test, ad esempio. Quindi hai ragione a voler migliorare questo.
Tuttavia la tua soluzione proposta, sulla falsariga di:
class SomeClass
{
private readonly MyGateway _myGateWay = new MyGateway();
public SelectAllResult SomeMethod()
{
...
var result = _myGateWay.SelectAll(p1,p2,p3);
...
}
}
non è meglio. Stai ancora accoppiando saldamente la tua classe a MyGateway
, rendendo ancora più difficili i test di quanto sia necessario.
Una terza soluzione, che risolve questi problemi, consiste nell'utilizzare un'interfaccia e passare un'istanza di un tipo che la implementa nel costruttore:
class SomeClass
{
private readonly IGateway _myGateway;
public SomeClass(IGateway myGateway)
{
_myGateway = myGateway;
}
public SelectAllResult SomeMethod()
{
...
var result = _myGateWay.SelectAll(p1,p2,p3);
...
}
}
Questo approccio di dipendenza da dipendenza disaccoppia la tua classe da MyGateway
e rende il test molto più semplice.