niedziela, 22 marca 2026

Jak wyjść z bagna?

Tytuł nie napawa optymizmem ale mógłbym dać taki jak wyjść z piekła? Więc to i tak duży przeskok.

Panie gdzie macie te bagno i jak wam pomóc?

WCF

O nie, to imię, którego się nie wypowiada bo przyjdzie zły pan i zabierze wam wasze dusze. Coś w tym jest, jak wchodzę do wcf-a to za każdym razem wychodzę kimś innym.

Jednak to część mojej pracy babrać się w otchłani, na szczęście na horyzoncie znajduje się latarnia która wskazuje kierunek wyjścia, tym razem to nie nadjeżdżający pociąg.

Bagno/Piekło

Czym jest w moim przypadku? No cóż to jest rozwiązanie które przez lata ewoluowało, jak zwierze poddane dobroczynnemu działaniu promieniowania, o jakie silne i jak wspaniale wykonuje swoją pracę, a po latach, dlaczego ma dwie głowy i pięć nóg i świeci?

Ewolucja kodu jest nieubłagana, to jak grządki w ogródku, nie dbasz to plonów coraz mniej. Tak i w przypadku kodu, był kiedyś gospodarz który zbudował te dzieło i pozostawił swoim następcom z uśmiechem na twarzy poszedł do innego gospodarstwa, lepszego, tylko zapomniał powiedzieć jak dbać o ogródek. Przyszedł kolejny, mniej doświadczony popatrzył jak było zrobione i zrobił "tak samo".
Potem skup powiedział że te plony to już nie takie dobre jak wcześniej po za tym dodaj kolejne warzywa i owoce żeby dywersyfikować źródła dochodu i tak kolejni gospodarze przychodzili i odchodzili pozostawiając coraz większy "porządek".

Tylko w którymś momencie przestanie się opłacać obsiewać kolejny raz, bo o plony trzeba coraz bardziej walczyć, ziemia coraz trudniejsza w uprawie, w nieskończoność działać nie będzie, to nie gra.

Co wtedy?

Dobre pytanie, jak mam odpowiedzieć na nie. Pomysł mój.

Mam wcf-a  a pod nim plątaninę różnych rozwiązań, kodu który nie da się utrzymać w dłuższej perspektywie, bazy, która kiedyś biegała z dinozaurami tylko że im się zachciało wyginąć a baza stwierdziła że ewoluuje.

Wiem że cześć endpontiów z wcf-a to proste crudy bez logiki, a wcf służy tylko do przepychania w tę z powrotem, to czemu by tego nie wykorzystać przeciw niemu?!

Proste api do crudów.

Tak sobie wymyśliłem że te api nie będzie tylko do CRUD-ów (nie wiem czemu ale kojarzy mi sie z bajką o jaskiniowcach), ale od czegoś trzeba zacząć, to na początek rzeczy proste.

Żeby wykiełkowała właściwa architektura rozwiązania i sposób tworzenia, to też powie czy podejście jest właściwe. Na prostych getach czy postach nie tracę nic, nie ma logiki można eksperymentować.

Jak już wyrobie sobie pewne rozwiązanie mogę się zainteresować czymś więcej, logiką. Ale nim do tego dojdę to dla mnie w moim rozwiązaniu jest istotny jeszcze fakt czy dany crrud jest potrzebny?

Tu warto zadać sobie pytanie czy teraz mając api i entity frameworka, model relacyjno obiektowy dalej mam zwracać to samo z endpointa? Podstawą zmiany jest żeby efekt był dalej ten sam ale pod spodem może się dziać zupełnie coś innego. Mając nowe api mogę się pokusić a wręcz powinienem o zmianę podejścia o próbę napisania tego samego po nowemu w łatwiejszy nie trudniejszy sposób.

Tak więc to jest jeden z moich postulatów, na szczęście nie będzie ich tyle ile miał Marcin Luter, które stoją u podstaw głębszego zrozumienia problemu nawet w czymś takim jak przepisanie CRUD-a.

Otchłań

Czym jest każdy wie, tam czai się największe zło, wejście wymaga stalowych nerwów i sznurka żeby wyjść, chyba,że ktoś ma na tyle siły żeby sobie wyrąbać drogę.

Tu jest pomysł taki, że owszem możemy spróbować przepisać logikę ale znowu, pytanie czy warto? Czy jest sens powtarzania kodu, który wcześniej był często rzeźnią dla umysłu? Nasuwa się pytanie jak sprawdzić czy to jeszcze działa? nie mamy testów ale czy jak przepiszemy to samo to dalej będziemy mogli sprawdzić czy działa?


Powrót do Tristram

Zastanawiałem się czy to jedyna droga takie wyciągniecie CRUD-a i wrzucenie do osobnego api - bytu, czy to nie jest przemeblowanie w piekle? Zamieniam stare na nowe, zmieniam opakowanie, a zawartość pozostaje. No właśnie może droga nie wiedzę tędy, czas wrócić do źródła zła.

Wejście do wcf-a należy zapieczętować, żeby nic już nowego z niego nie wypełzło, zatrzymać jego wpływ na otoczenie. To co działa tak pozostawić, ale nowe rzeczy wynieść do modułu, który powstanie w solucji. Moduł ten będzie "czyśćcem na zło", będzie przystankiem na drodze do "raju".

"Czyściec"

Czym jest w moim rozwiązaniu? Nie celem ale przystankiem, to moduł, który pozwoli utrzymać stary system i przy okazji będzie brał na siebie odpowiedzialność za kolejne nowe rzeczy w obrębie struktury czyli będzie warstwą DAL. Ten byt będzie mógł brać do siebie kolejne zapytani do bazy, będzie otoczony granicą przez którą zgnilizna nie wydostanie się na zewnątrz.

Taka koncepcja pozwoli nie rozpełznąć się złu z wcf-a, ale pozwoli na to żeby kolejne byty mogły udać w kierunku odkupienia, tworząc nowe lepsze zapytania, bardziej przemyślane koncepcje, optymalizacje i w końcu dzięki np zastosowaniu ORM-a będę mógł łatwiej i szybciej dowieźć zmiany. Wejście w ten moduł będzie łatwiejsze dla każdego nowego śmiałka. Dzięki temu mam też możliwość w łatwiejszy sposób dodać testy integracyjne, bo warstwa infrastruktury nie jest ukryta pod wcf-em ale dostępna za fasadą w nowym module.

Istotne w moim pomyśle jest to, że taki moduł jest ewolucją idei wyprowadzenia kontekstów po za monolit. Nie znam dokładnego procesu, nie znam reguł, ale wciąż trzeba utrzymywać te królestwo, trzeba dokładać tam nowe funkcje, poprawiać istniejące, jeżeli wcf zapieczętowany to wydaje mi się że to jest jedyna sensowna droga do tego żeby można było utrzymywać i rozwijać istniejący system.

Wcf to nie tylko crudy ale też logika, co z nią? 

To proste, jeżeli mam logikę to mogę w końcu ją też wydrzeć z pod wcf-a tworząc kolejny moduł, taki w którym mogę odseparować logikę od warstwy prezentacji i struktury ale to dalej nie cel ostateczny, a przystanek na drodze. Czyli koncepcja "czyśćca" to więcej niż jeden moduł a może i więcej niż dwa. To jest grunt, baza do dalszego rozwoju, ewolucji.

Tu też warto zwrócić uwagę na to, że ten stan jest przejściowy ale to czego nie wiem, to jak długo dane konteksty będą w "czyśćcu"? Okres trwania może być zależny od prac, które są do wykonania w tworze docelowym gdzie to wszystko trafi ale ten czas budowania "raju" będzie też zależny od złożoności procesu, kontekstu jaki ma docelowo powstać. 

Podsumowując tę część konceptu.

Mam tu do czynienia z tworem przejściowym ale z trudnym do określenia czasem przebywania tam kontekstów. Każdy z nich prędzej czy później trafi do miejsca docelowego ale będzie to zależne od procesu analizy. Dodatkowo taki podział pozwoli mi na rezygnacje z rozwijania wcf-a. Wstępną refaktoryzacje oraz wprowadzenie testów czy to jednostkowych czy integracyjnych.

"Raj"

Czym jest ta koncepcja u mnie? To odpowiedz na właściwy sposób podejścia do tworzenia, budowania, mikroserwisu, czy też wyprowadzenia części logiki, procesu poza monolit. Ten monolit, który został skażony przez wcf-a. Przez, trudną do rozwinięcia technologie i wielką plątaninę różnych koncepcji.

To jest właściwy cel, który będzie mógł zaistnieć dopiero wtedy gdy zostanie wykonany etap analizy, poznania procesu, zbadania reguł. 

Co będzie podstawą do tego tworu?

Żeby coś wyrosło na polu, to trzeba go nawieźć, a odpowiednim produktem będzie czyściec i wcf. Co tam dokładnie trafi, a co nie to będzie zależeć od procesu ale jeżeli konteksty będą się pokrywać, czyli w czyśćcu będzie to co do raju ma trafić to będzie musiało być rozwijane w dwóch miejscach ale z docelową lokalizacja w raju.

Nie będzie się dało inaczej tego załatwić. W dużej mierze konteksty będą na siebie nachodzić, ba nawet będą takie same ale, pośrednie moduły będą miały logikę bardziej pomieszaną, oczywiście w dwóch lub więcej modułach w obrębie monolitu. To pozwoli na faktyczne długofalowe pozbycie się zależności od WCF. 

Podsumowanie

W tym poście przedstawiłem dwie koncepcje, jedna, pierwsza została fizycznie rozpoczęta ale zawieszona z powodu tego, że wybór drogi to nie tylko moja decyzja, a wypracowanie konsensusu całego zespołu.

Druga koncepcja pojawiła się trochę później i jest na tę chwile teoretycznym konceptem.

Moje podejście też ewoluowało, myślałem, że ten pierwszy pomysł jest dobry ale później zdałem sobie sprawę, że są jeszcze inne koncepcje, które w dłuższej perspektywie będą lepsze.

Jednak oba podejścia zakładają zamrożenie wcf-a i wydzielenie kontekstów do nowego bytu ale za pomocą analizy procesu, event stormingu czy innego narzędzia.

Ta druga koncepcja wydaje mi się bardziej właściwa bo nie tworzymy kolejnego zewnętrznego tworu z którym będę się komunikował, a tylko dodatkowe moduły w obrębie rozwiązania - monolitu. Jednak każda z tych zmian niesie ze sobą ogromne ryzyko, że zostanie zmarnowana i przekształci się w "tego wcf-a"  od którego staram się uwolnić. 

W momencie wyboru jakiejkolwiek koncepcji spadnie na nas odpowiedzialność wprowadzenia ADR-ów, które jasno zdefiniują reguły architektury rozwiązania.

Jednak czas dotarcia do celu może być bardzo długi, to również należy wziąć pod uwagę, ale jest to cena, którą trzeba zapłacić.


Brak komentarzy:

Prześlij komentarz

Jak wyjść z bagna?

Tytuł nie napawa optymizmem ale mógłbym dać taki jak wyjść z piekła? Więc to i tak duży przeskok. Panie gdzie macie te bagno i jak wam pomóc...