Dylemat - logowanie zmian w obiekcie dto legacy code

0

Witam.

Załóżmy, że istnieje sobie pewien obiekt DTO, którego definicja jest dostarczana do aplikacji w formacie Swagger JSON.
Ten obiekt ma bardzo ważne biznesowe znaczenie i każda zmiana jego pół w pewnym serwisie XYZ musi być logowana.

Ja widzę trzy rozwiązania:

  • ręcznie logować - a co za tym idzie naprawdę zaśmiecać kod i duplikować długość metody.
    Jest to moim zdaniem najprostsze i najwydajniejsze rozwiązanie w tej sytuacji.
  • przed wykonaniem metody skopiować ten obiekt, i po jej wykonaniu porównać wynik z oryginałem (za pomocą refleksji)
    Skomplikowane i niewydajne.
  • opakować ten obiekt za pomocą dynamicznego proxy (CGLIB) i przechwytywać każdy setter.
    Trochę niewydajne.

Jak byście sobie z problemem tego typu?

Pozdrawiam.

0

Są do tego gotowce. Audit log czy jako tak. Można zapisać kto, co i kiedy zmieniał.

0

Klasyczny przykład kiedy wyjątkowo AOP moze się przydać, czyli de facto twoja opcja 3. Co do wydajności to bez przesady, to jest "koszt" jednego pośredniego wywołania funkcji, praktycznie niezauważalnly.

0
Shalom napisał(a):

Klasyczny przykład kiedy wyjątkowo AOP moze się przydać, czyli de facto twoja opcja 3. Co do wydajności to bez przesady, to jest "koszt" jednego pośredniego wywołania funkcji, praktycznie niezauważalnly.

Masz na myśli kompilowane AOP (AspectJ?), na poziomie samej klasy tego obiektu? Nie chodziło mi o koszt wywołania proxy, tylko jego stworzenia. W tym przypadku byłby tworzony za każdym requestem (zapomniałem wspomnieć - mówimy o microservice).

0

Nie no tworzenie proxy za każdym razem to bez sensu. Tak, chodziło mi o AspectJ albo spring-aop albo cokolwiek co działa "raz a dobrze".

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