Zastanawiałem się, jak zrównoważyć projekt możliwy do przetestowania za pomocą wstrzykiwania zależności, zapewniając prosty stały publiczny interfejs API. Mój dylemat brzmi: ludzie chcieliby zrobić coś podobnego var server = new Server(){ ... }
i nie musieliby się martwić tworzeniem wielu zależności i wykresu zależności, które Server(,,,,,,)
mogą mieć. Podczas programowania nie martwię się zbytnio, ponieważ używam frameworka IoC / DI do obsługi tego wszystkiego (nie używam aspektów zarządzania cyklem życia żadnego kontenera, co jeszcze bardziej skomplikowałoby sprawę).
Teraz jest mało prawdopodobne, aby zależności zostały ponownie zaimplementowane. Składanie w tym przypadku jest prawie wyłącznie w celu przetestowania (i przyzwoitego projektu!), A nie tworzenia szwów dla rozszerzenia itp. Ludzie będą chcieli przez 99,999% czasu korzystać z domyślnej konfiguracji. Więc. Mógłbym zakodować zależności na stałe. Nie chcę tego robić, tracimy nasze testy! Mógłbym zapewnić domyślny konstruktor z zakodowanymi na stałe zależnościami i taki, który przyjmuje zależności. To ... niechlujny i prawdopodobnie wprowadzający w błąd, ale opłacalny. Mógłbym sprawić, by konstruktor odbierający zależność był wewnętrzny, a moja jednostka przetestowałaby zestaw znajomych (zakładając C #), który porządkuje publiczny interfejs API, ale pozostawia nieprzyjemną ukrytą pułapkę czającą się w celu konserwacji. Posiadanie dwóch konstruktorów, które są domyślnie połączone, a nie jawne, byłoby ogólnie złym projektem w mojej książce.
W tej chwili jest to najmniejsze zło, jakie mogę wymyślić. Opinie? Mądrość?