Sytuacją dość nagminną w korpoprojektach jest ich absolutnie gigantyczny rozmiar. Ilość klas pojedynczej aplikacji idzie w miliony. I to tylko licząc "nasze" klasy, z wyłączeniem wszelkich 3rd party.
(Nieco osobną sprawą jest, czy istotnie ilość klas powinna / musi być tak wielka. Dość, że bardzo często jest, dlatego w tym wątku chciałbym potraktować taką sytuację jako z góry narzuconą, bez dygresji, czy i jak można ją zmniejszyć.)
Załóżmy teraz, że zgodnie z promowanymi przez niektórych "najlepszymi praktykami" znaczna część tych klas będzie wstrzykiwana przez DI. Załóżmy na przykład, że na pojedynczą aplikację składa się 5 milionów klas, cykl życia jednej piątej z nich jest zarządzany przez jakiś framework DI, zatem framework DI musi obsłużyć milion klas.
Jak to powinno wyglądać?
Znam tylko dwa podejścia do DI:
Tam rejestrowanie serwisów i uruchamianie aplikacji wygląda mniej więcej tak:
using DependencyInjection.Example;
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService<Worker>();
builder.Services.AddSingleton<IMessageWriter, MessageWriter>();
using IHost host = builder.Build();
host.Run();
(przykł. zaczerpnięty z ww. strony dokumentacji)
Czyli co, będziemy mieć w jednym pliku i w jednej metodzie (main
) milion linijek builder.Services.blablabla
?
-
@jarekr000000 , o ile pamiętam, twierdził kilkakrotnie, by nie używać żadnych frameworków DI, tylko ręcznie stworzyć cały graf zależności w
main
.
Zatem, jak rozumiem, main
będzie wyglądał jakoś tak:
public void Main()
{
var dep1 = new Dep1();
var dep2 = new Dep2();
var dep3 = new Dep3(dep1);
var dep4 = new Dep4(dep2, dep3);
var program = new Program(dep1, dep3, dep4);
program.Run();
}
Kręcimy się w kółko: znowu mamy metodę main
na milion linijek.
Prócz powyższych, zdaje się, są jakieś frameworki DI, w których rejestracja serwisów odbywa się deklaratywnie, w pliku konfiguracyjnym xml. Więc będziemy mieć plik XML na milion tagów?
Czy rejestarcja zależności dla celów DI jest wyjątkiem od zasady, by nie tworzyć plików / metod na miliony linijek?
Czy też jest jakiś sposób, by tego uniknąć, tyle że ja go nie widzę?