Statyczny logger i DI

Odpowiedz Nowy wątek
2020-02-08 16:38

Rejestracja: 1 tydzień temu

Ostatnio: 3 dni temu

0

Cześć, staram się pogłębiać moją wiedzę z zakresu programowania. Piszę sobie aplikację korzystając z ASP.NET Core i próbuje stosować się do zasady Dependency Injection.

Doszedłem do momentu logowania danych w bazie. Chodzi mi o prosty logger, który jest w stanie dodać nowy wpis do tabeli logów. Pisząc po staremu napisałbym klasę statyczną, która miałaby w środku wywołanie repozytorium przez które odbywałby się zapis danych - to podejście jest wygodne bo za każdym razem nie trzeba stawiać obiektu i przejrzystość kodu się zwiększa, szczególnie że w wielu miejscach logger jest wywoływany.

Jak podejść do tego tematu używająć DI? Zamiast statycznej klasy oprzeć się o zwyczajną klasę + interfejs?

Pozostało 580 znaków

2020-02-08 16:57

Rejestracja: 5 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Rzeszów

0

Zwyczajna klasa Logger, do której będzie wstrzykiwana jakaś też zwyczajna klasa LogRepository. Interfejsy możesz dorobić dopiero jak uznasz, że są potrzebne.

Pozostało 580 znaków

2020-02-08 18:24

Rejestracja: 1 tydzień temu

Ostatnio: 3 dni temu

0

Ok, może jest to głupie pytanie, ale czy jest sens pisania kodu w ten sposób bez opierania się na interfejsach?

Wydaje mi się że byłby problem z testowaniem takiego kodu, gdybym chciał przetestować jakiś moduł który wykorzystywałby klasę Logger. Test musiałby równać się odpaleniem repozytorium i zapisie na bazie danych. W innym przypadku mogę sobie zmockować obiekt klasy Logger, lub samo Repozytorium tam gdzie byłyby akurat wykorzystywane.

Pozostało 580 znaków

2020-02-12 01:16
Moderator

Rejestracja: 11 lat temu

Ostatnio: 45 sekund temu

Lokalizacja: Wrocław

2

A po co jakieś repozytorium? Wystarczy insert zrobić przez Dappera czy nawet SqlCommand.

Już więcej sensu ma interfejs do Loggera, którego produkcyjna implementacja zapisuje do bazy, a testowa np. na konsolę. Interfejs wstrzykujesz do tych klas, w których potrzebujesz logowania.

A najwięcej sensu i najwygodniej jest użyć wbudowanych mechanizmów: https://docs.microsoft.com/en[...]gger?view=dotnet-plat-ext-3.1 i jakiejś biblioteki logującej (NLog, Serilog).


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2020-02-12 01:17

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0