Abbiamo un'applicazione ASP.NET MVC e un mucchio di librerie che vengono utilizzate dall'applicazione. Esistono preoccupazioni trasversali e dipendenze come logger, repository, token utente ecc. Che quasi tutte queste librerie devono funzionare. Alcune librerie dipendono da altre librerie e così via.
Ad esempio -
MVC Application
|
----------------------------------------------
| | |
AccountingEngine Lib FileParser Lib Another Lib1
/
AnotherLib2 etc
Nel progetto corrente, l'applicazione MVC passa le dipendenze alle librerie tramite i parametri del costruttore, il che significa che i costruttori delle radici di composizione delle librerie tendono tutte a assumere forme simili a (CCC = preoccupazione di taglio incrociato) -
public AccountingEngine(IPrincipalToken principalToken, IRepository repository,
ILogger logger, IOtherCCC1 ccc1, IOtherCCC2 ccc2, IOtherCCC2 ccc2) { ... }
public FileParser(IPrincipalToken principalToken, IRepository repository,
ILogger logger, IOtherCCC1 cc1, IOtherCCC2 cc2, IOtherCCC2 cc2) { ... }
etc..
I controller nell'applicazione MVC usano ninject per ottenere alcune delle dipendenze e passarle nelle librerie.
Credo che questo sembra raggiungere il DI di un povero uomo e assicura che le dipendenze siano esplicite. È un buon design? Per prima cosa, ci sono molti parametri del costruttore (che a quanto pare sono un odore di codice anche se in questo caso i parametri non sono molti a causa di una violazione di SRP) e per un altro, quasi tutte le classi (anche non root) finiscono con tutto questi parametri. Potrebbero esserci più problemi con questo modello di quanto non ne sia a conoscenza.
Esistono pratiche / modelli standard consigliati per questo scenario e problemi associati?