From 5c023a8df1d5560f87c89c2ad55ceaac001e3973 Mon Sep 17 00:00:00 2001 From: mfenderov Date: Sun, 14 Apr 2024 17:17:32 +0200 Subject: [PATCH 1/4] post: circular dependency --- posts/20240412-circular-dependencies.md | 284 ++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 posts/20240412-circular-dependencies.md diff --git a/posts/20240412-circular-dependencies.md b/posts/20240412-circular-dependencies.md new file mode 100644 index 0000000..51739ee --- /dev/null +++ b/posts/20240412-circular-dependencies.md @@ -0,0 +1,284 @@ +--- +title: Circular dependencies +date: 12.04.2024 +--- + +> "I knew you'd say that" - Judge Dredd + +After +publishing [Practical Dependency Inversion Principle](https://www.buyallmemes.com/#practical-dependency-inversion-principle) +article, I received absolutely amazing feedback from one of my dear colleagues. + +It was a question: +> ...there is another problem, the cross dependency between modules/packages. +> +>What are your thoughts on this? + +The question was premised by the schema that looks like this: + +![img_1.png](assets/20240412-cd/img_1.png) + +With code structure like this: + +```bash +├── test +│ ├── notification +│ │ ├── NotificationUser.java +│ │ ├── NotificationUserRetriever.java +│ │ └── NotificationModule.java +│ ├── user +│ │ ├── UserModule.java +│ │ ├── UserNotificationRetriever.java +│ │ └── UserNotification.java + +``` + +Where `NotificationModule` implements `UserNotificationRetriever` and `UserModule` +implements `NotificationUserRetriever`. + +It's not that hard to imagine: + +- `NotificationModule` wants to know something about a user, and the dependency to `UserModule` is inverted, exactly as + it should be +- `UserModule` needs something from `NotificationModule`, and the dependency is also inverted + +This is what's called **Circular Dependency**. + +And it's extremely problematic. +Dependency Inversion ultimately plays no role here, +even with direct uninverted dependencies such a case can occur, +and the Dependency Inversion Principle by itself cannot fix it. +Some frameworks (like Spring) and build tools (like Maven) will produce an error in case even a single +circular dependency is detected. +The Main reason is — it's just too dangerous to resolve. +It's a recursion. +Unless threaten with care it can produce such nice things like `out-of-memory`, `stackoverflow`, etc. + +But, more than anything, it shows the fundamental problem in the code design. + +In this article, I'm going to share some tips-and-tricks on how to treat circular dependencies. +And I'm going to start with the most radical one. + +## Tactical Merge + +Yes, I know. +You are your colleagues spent weeks and months trying to separate `UserModule` and `NotificationModule`. +You might have even extracted them into systems separated by network to enforce sacred _domain boundaries_. +And now I'm suggesting to move everything back together into a single `SpaghettiModule`? +Hell no! + +Here me out. +The software is supposed to be... soft. +Flexible. +Like a clay. +The purpose of the software is to help business achieve its needs. +If the software is designed in a way that it's not allowing developers to build certain features effectively - +the design is a massive failure. +At the end of the day, most product companies are **not** selling their software directly, +but rather via a service that software implements a.k.a. SaaS. +I think we can agree on that. + +For example, do you care about the code design behind a _google.com_? +If you're a nerd, maybe. +Regular person cannot care less about the underlying software. +But everyone cares about this software working. +Everyone. + +So yeah, if `UserModule` and `NotificationModule` want to be together, +because business requirements want so, it's probably a good idea to consider merging them, +and reshaping into a single domain. +Don't feel overprotected over existing boundaries. +Sometime mistakes are made, and the worst thing we as engineers can do is to pretend that it wasn't a mistake. + +It's a very humbling experience. +You should try it. + +## One-side inversion + +A less radical, +but a bit more political approach is to invert dependency only from one module to another, +and leave the direct dependency from another module back. + +For example, we decide that `NotificationModule` is the high-level module, +and `UserModule` is... well, further from the core of the business logic. +This is where political card has to be played +because the team that manages `UserModule` might not agree on doubling down on `NotificationModule` dependency: + +![img.png](assets/20240412-cd/img.png) + +With the code structure like this: + +```bash +├── test +│ ├── notification +│ │ ├── NotificationUser.java +│ │ ├── NotificationUserRetriever.java +│ │ └── NotificationModule.java +│ ├── user +│ │ ├── UserModule.java +``` + +And so there we have it. +`UserModule` directly depends on `NotificationModule`, +and there's in inverted dependency from `UserModule` to `NotificationModule`. +The dependency cycle no longer exists. +At least, during build time. +There's still possibility of an infinite loop during a **runtime**: + +- `NotificationModule` invokes a `NotificationUserRetriever` interface that's implemented within `UserModule` +- To implement `NotificationUserRetriever` `UserModule` needs something from `NotificationModule` and so it calls it + directly + +This is more like a hack or remedying the symptoms. +The disease is still there. +Modules are still tightly coupled. +Domain boundaries are wrong. +We just tricked the system. + +To solve this problem once and for all, one of the dependencies has to be broken. +With the best case scenario being, both of them no longer exist. + +Seemingly, there are ways to break circular dependencies via some integration patterns. +**Queue** is the first thing that comes to my mind. +Is it possible to eliminate the dependencies altogether by listening to a message queue? +Or maybe something a bit more robust, like a Kafka topic? +Sounds great! +Don't. +It's even more dangerous. + +Let's go through a "hypothetical" example: + +- `NotificationModule` receives a request from out there, and after fulfilling the request, it emits an event + to `UserModule` +- `UserModule` receives an event, performs some computation, updates some user data... and sends an event + to `NotificationModule` +- But, unfortunately, when `NotificationModule` receives an event, and after performing some computation, it decides to + notify `UserModule` via event + +You can see where it's going. +The system ends up in an asynchronous loop of events exchange that never terminates. +It might go for days and weeks unnoticed. +Until, eventually, with more and more requests triggering infinite loops, +the whole system will grind to a halt and go OOM. + +Been there. Done that. + +## Extract new module + +This is a ticky one because it's very easy to get it wrong and make things worse. + +The approach is to extract functionalities which produce circular dependencies into a new even more high-level module. +And invert the dependency from it. + +![img_2.png](assets/20240412-cd/img_2.png) + +The code structure: + +```bash +├── test +│ ├── aggregator +│ │ ├── AggregatorUser.java +│ │ ├── AggregatorUserRetriever.java +│ │ │ +│ │ ├── AggregatorNotification.java +│ │ ├── AggregatorNotificationRetriever.java +│ │ │ +│ │ └── AggregatorModule.java +│ ├── notification +│ │ └── NotificationModule.java +│ ├── user +│ │ └── UserModule.java + +``` + +Basically, we're demoting `UserModule` and `NotificationModule` to lower level of abstraction, +and introducing new higher level `AggregatorModule` (naming is hard). + +So that `NotificationModule` depends on `AggregatorModule`, and `UserModule` depends on `AggregatorModule`. +The nuance here is that `AggregatorModule` now exposes two interfaces, +but `NotificationModule` and `UserModule` can cover only one of those each, +so the setup requires more attention. + +There are whole lots of tricks that could be applied to handle such a case: +from something like a combination of `@ConditionOnMissingBean(...)` and `@Primary` bean annotations +if we're talking about Spring Framework, +to something as simple as default interface method. +And if you feel like there might be more modules +to depend on `AggregatorModule` it might be a good idea to introduce a generic aggregator interface. +This is where the real engineering happens. + +The approach seems like a quite straight forward one. +What's easy to get wrong here? +I'm glad you asked. +And the answer is simple — direction of dependency inversion. +It might sound like a brilliant idea to introduce `AggregatorModule` and to make it depend on +both `UserModule` and `NotificationModule`: + +![img_3.png](assets/20240412-cd/img_3.png) + +With code structure like this: + +```bash +├── test +│ ├── aggregator +│ │ └── AggregatorModule.java +│ ├── notification +│ │ ├── NotificationUser.java +│ │ ├── NotificationUserRetriever.java +│ │ └── NotificationModule.java +│ ├── user +│ │ ├── UserModule.java +│ │ ├── UserNotificationRetriever.java +│ │ └── UserNotification.java + +``` + +`AggregatorModule` implements both interfaces. +`UserModule` and `NotificationModule` no longer know about each other. +Sounds great! +Except it's not. + +Where `AggregatorModule` will get the information to implement `NotificationUserRetriever` for example? +From `UserModule` of course. +And what about `UserNotificationRetriever`, how to implement it? +Invoke `NotificationModule`. + +So the more realistic dependency schema should look like this: + +![img_4.png](assets/20240412-cd/img_4.png) + +So instead of one circular dependency between `UserModule` and `NotificationModule`, +there are two, and they are even more distributed! +And as we all know, the best way to solve a problem is to distribute it. +COVID? Anyone? + +So yeah, be careful. +In this case, inversion of dependency could do more harm than good. + +And this is exactly why I started with the Tactical Merge. +Although it seems like a most extreme, it guarantees to work. +Circular dependency will be broken. + + + + + + + + + + + + + + + + + + + + + + + + From 3caf53d00bcfe84e9dcf1af09b46dbcda3937f6f Mon Sep 17 00:00:00 2001 From: mfenderov Date: Sun, 14 Apr 2024 17:17:43 +0200 Subject: [PATCH 2/4] post: images --- posts/assets/20240412-cd/img.png | Bin 0 -> 23690 bytes posts/assets/20240412-cd/img_1.png | Bin 0 -> 26134 bytes posts/assets/20240412-cd/img_2.png | Bin 0 -> 23604 bytes posts/assets/20240412-cd/img_3.png | Bin 0 -> 23657 bytes posts/assets/20240412-cd/img_4.png | Bin 0 -> 25900 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 posts/assets/20240412-cd/img.png create mode 100644 posts/assets/20240412-cd/img_1.png create mode 100644 posts/assets/20240412-cd/img_2.png create mode 100644 posts/assets/20240412-cd/img_3.png create mode 100644 posts/assets/20240412-cd/img_4.png diff --git a/posts/assets/20240412-cd/img.png b/posts/assets/20240412-cd/img.png new file mode 100644 index 0000000000000000000000000000000000000000..31827b08a61eb1a53f2829d7ceb831428aec4255 GIT binary patch literal 23690 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 X8@N{O!zSRo7Xlp(LqrAKKJxzn;>O)} literal 0 HcmV?d00001 diff --git a/posts/assets/20240412-cd/img_2.png b/posts/assets/20240412-cd/img_2.png new file mode 100644 index 0000000000000000000000000000000000000000..51c290270b5d62071b9f636621b4bbd5bbaa01ad GIT binary patch literal 23604 zcmdqI)nC-x`vgMg9o}8ODPL51zbKkkNSX;9(B%k7&gJ&CE5CdQh+B?1{t;6PiR0m3!FojZPau|% zO$=5X3OyDbH3q({^V6qNaVU7|P3Jd$m0}CVnL?Tq#&gDV+7qXUDdAF^W|b`A^z*4g569|Nr-|3J0{`-|lyd>?7hEh)sQ}J?}2p!#`1a6?y*s z_}F@y(&ym&(q79xyF=4z;?ks{qrF${y|Kq!!d;u!4kdqgA62(&0`1K6e%HH8 za~=!j8M*$Cr8r%|$R!?($x}UFzBw6JWt8>@S0-N1^xngo5n4~zBzNk<>lVM>(R|l9 z=l;gfWr#1_X}O2+MJ2+y`sAl#q5VfxBBr%8$2N;7p*5zqn^lgHy31St+bMs-`#$!qeKOg&NBJS_1`x(-n zitJQLSKpq^6b|w2eO->~&iO=Xpp?p6yth_Qpdy&FCuZl~@;3l8uFu-sZ>PF9OkmzK z_lgTusuwIAEHb&hb%}eJ)5(}T@peUvL-k6WB9ZC!^i&w~nb@q;>>EfMRDHKJ-=z7T z{Rvm~zZ$RK<;l8KnijwQGeUHKet)-6H$f1ywI+7AyKq;&Fyyz&7OtMlmK9ij9Q@5T?+f79CL8hT0YNNbeHs^C5sx&W59xa;h zOq%-NF0I6?vS)g26)#QbnzG%UHMVQt*S)~A_*_c1IdqMU=6`;7y-)1eda8pFKJU~^ z!K~#07GA;ob^rTwe@3aJKar$71%gL?beh92Ak#0wJvfjPu4x1oOgC*fYaG-d;`gk} zh_TOk%YriMKT_+`>6t!9{Y%+_*so|bvliR$uiJ?+*}s}OttRMV8(ajK6@iWK+u^y} zyj{V(ljy?w>|K?V(}M50w#SoZl=i03NykaZZ}mYj04SnqvK(aK|g4D z^|Rgd`rpXEa?kQy3hf5tsW!*A!R-?)aWxhlR_TAc{W9d}@6zd%Y2_XnO6M!^xVSmb z%+p4E_gr3naA@8v*kYGT%FQ#hO%PbA)%klc)qYpsY>116tUksCDj5bohvBAJ54Rq& zx1Rhw5h`_9!Alt=M4^)nQR5_Vel!rY`T@T9^f^lIGlIA1F|%16L10H!G%Mm_VbVaq zE2Xep{EAFF?U@;EoGm&zZJ>@g41)QciP??(HsfJ^)I$A?J~VJcke_-CfD)r2kf z?@Y3W&&`FPd1i|#HkrkH_$X|QGEB)IK|!d!=pb&3k?RDP@i|>JdzuR?rA4I?vJds_ zlH!~NgUD00;CKD}(aDgbACH>?#Ou@j?ZUmXONaA<7@J>!*;g=VZ*ML~{Mi$Y-T(ZG zl9#B-KIimM5FBpU_!8cOGWqYYzO}uVSWkB;@EKM0JBr^Ll)}m0CqImRR)gr~@V^`c z<29-QN(mWO6hqSF$mKHCy`Hbo#={fzS)bz}J2u}hq7ozy$PefmImsF%euuhH`CXWw zu4c=t#Xvu-ps9-N)`6@3cMSH(-rIOi`fJIsvrXm`gZv@le%B37nFna7V+$LWRak`m%9uEnWww#CxYuYC8_L93i z zB{t%;S7fW#;(GHlZ>fIDq;xMek*ocn15*>P2ib~dy|&9IjDv$7Q+iUPM_wzrmRY0* z+3vTVv-_RZX60W`^&JpQX5HVcznP;l`K75UrahM*ycEz)Y>Ln``-mDAL~J66KC_x+ znh9@~sDU&^t51+%F(TInD>P!ltQE5KIxkDCWX7>wEOe~rnWNFv1?i@t27<#9L-tAg zMK{M!XM)p`z8kSX=9J;DJlTG!=XJBrgU^>UFE>^F4OrW6j*8hLkL#juqs6Z_n&$(m z{veUSq~Tk*9UayJsO{s|O1W%yu3a%i*o)b`yDvOiPZ9eg4^tAxVKn7dw- znn>f;#R2F>qk35G==&mJwW4N#rC$#l%_S0&GA6Lx-N$Vm;Ud(}E@QRAvHxAN1Y2Yg zPVh=T6+8Mb;&@n*&Z{TMe9ksEQbQ#_Vy!fSHTTUuSf`C&ueM6 zds|mgdkopfH45bn;rc6$fU5oKUdn#E8Y*=sBUE}t_9m-Ttyf(?cAXrCz1uF=6xVCP zeTfC;Ts56W#Lk}2Waqoj~xxR5jh{eQ1 z1#lC_D!SdJ2qo@EY6K=*oti;>=*7VI0|QS34Bjo69x3g{l~&$FC#-o5v2!N%m_p0Y zedbkBhXXv}w=h~|pYL;oHqQ8My_&KAVlUY0c>rAFN7N&p1dgcTXu(P5-~A0rMM6xg z9r`I!o(U5qusTv>O|_B8b(;@6*NFP@UNwa~|DuagJQk5*87;<7Y7^{ne|xUlgn!)z zU}ASCjzs!E>S`K^Nl#o1ZnPYvu}Qoq^|9Ou97{X*vh@|G+!a`ihF<>bwh~QrJ(-`( z3AUD$%bK@JUPgF2V~IP`EsL&!iFDoTQtqp!+-rHCx{cUt-nRBsX7AZX`2?B%^jBMq z>)iw`S?I3aP=VwKCVP+_GryR}}^`di|>9tow}pn_nYU7!w)J1I%wE<_T59KP{4!%=n#_ znm#vQCf(H5#Yu39+7=7>xJ?%_jd7Sa&^iO*eE8mHd+Wd*asJ09%ebuW=d1dkEpa2V@yI1_I+I6lkV25Ot zMS9(9Eyaf6;aMijnzMlG9QGDrAg?s&JQ|?$gw{Z~Hik}M%f>6}qL#1eIh1;`*YP|} z@@tK5U;i48xfXf$XvpqpzTtGzkYo3}i$Im0i&`e4ujI+aHAU{&RvF~2>_nG z$ESTtAJP;2%t4SE&jJ$pmk{f-V)h_z=4> zN5TZCyYjey_&F;^<-=3Q&RXQqJUuE=;y^VHf&AcuEf_C5L&^_AEU zy4@QDQgUe|O$=XjgFT@1d?DISx^jYJc1_9Ogz$;Z1v&$rv1IAQ>89Ss*G|7qGPd?? zuN@YC5lZ%vY=@jGliBGB9!78)D7EHVBYo@6n|CrHhe^K}jV3V4xP?)EfBM+EnrK+U z!MI$4k}_s$9z>`?>P&f?eaBW>KbUEB@d__K z*w6^bXbqZ+L6^ymYq{NN)d)q*1=-wh%7~qh8{r14rfx@N%P$(;jpm~{^N))?$ma_W za?@jRb1foS_P&EIee2p97}Q8c`!oUtbT(+_cP5FEPsNNV+MZ8Nv0fAAI++)=2{S+z zNheCxwkyZpWX4bCI!4oLGi|`qYf6^Xy!-RL7zsR!C`J zDy^xoQ~7_(3;iFd2PEc%R=>ImJHXeQf*~=Bv6$7ntZRRA>(jK06g?{dR^CCgHTHho1 z?uzf{*U|3(S5PAIAe)8--z2N0_}??=m9Vsc0%v!9=%tnThRov9# z4^!j3`6mhu9^E<8?BouiOu$AGTIH!;#t7ztq=2Kv7RPx z%*@({sayl4{NyIZfy&T?_6ZLM!PpBMc*gR;i^}w7Q@bCjhRYG|vo=#DKUyX(E2)_X zz;y;_^PuHpK507N2!86t#}39@wpQ*vUL$<%36-aWS$QdwL` z1Q){YB3RmDNiqhB(I4Yy`$RFMVe?`YaUU#&b2z-jw#ySd`1UBi_a!`aCz<0xkJzW&+BLWCQkx% zkmEVc49$pm{frlX&aSexgo7_~4^=cLoV~f|N~0GFS6Z8>v8`Hq_TSh;;ahYleI#kW zh4n1cpM6do91+Q2g)*#RpEU<&lOk_l7#8CLcPVbvGtOnmD-SpvQp_}TbFVVSclOI~ zwl!vqmsLRb1#2-KS?W{>Y36c{zqkNSqO^OyMzGmjK6v^*G!~-`Q4ted7^pnD-?HCU z+*~nzQWxJ(Yqi*Bee5R1N%FrNq0W%JPeWbe7Jj3cetr9X)xhN zbPS)t-WLKI=%i|mk__&@z~hUiY+qQuu(b%I$;&gZvZ7QGvXy#YgUAXz9obWH9T$o+ zc}Y>Xz_0gr*QFe8tom^GdD!}v;(s&?`Ery_undX}^0Jp*bX>5BCVZOkfhUhelSES* zc7mQf4W4b1xZ22_ND@x`zrB*d1ZAi+Fk`P29-!lnHw{?WFGH1~E_sn)U1rJaw)N{* zx#Z)JUP|w>=0T;;trYQ!p;UMXpw_%?*Ujd{t?ZN0wK&_U9nmp;wNYfo9!qF-TUVgg z0+^Xx7^r0GL^Q#T&7y81F@5V&kkHLMw!HjEC4JUVwfdA|yRpM*8O3YPg0)S-C~cE% zLWtfg=$$m*Z_pseX}!;m&yRobsFugqb?+U;txP^I`I0fpH)W)0sAKp#B?|Xcr}Vis zU`a|_@`aFZaGkXK#+DYSNwYBw_TOMy(6`tMgbNA3O4BuXlmBb}6AdEbtG(S#1c9XeF z9gaJ~3JH!!js;w7>uqk)Oa1jr|(MP~x` zSscqOH8`(A`g{mMW`P2jAW)7R!z8VFU!P|3TYO$5ZIXMwN#%1OwR=wYf8`c*bA8^5 zxtFdznGXb$fUd%My9ZF&OBz0!7d-}oO6Yv*{fd&wGnT8`{xd~pACo$^V@uUf zxQWIF1A4ayGIO3|!_OM#+yV3GrSO=I9Zm{acZ-Ff;~CoK1igi>F`5qy%HWbObz2@a zBKS=HN*<|{gR=CmJd6@(vogYj;r*n*(6w}w^)oewqW*Z{Z1D#{rA$#F7-2+H47nrI z$aff^V?Wkz&V+FB@R6{ns@TG_I``L7W3(^flv60 zLe=;}#Wf(NhiaZQGTH4q0t^8d{;M&GRq1LJTn8=ACbA*X4-R!mt^vQG55>Z(Qp@m` z{E=wlwMowlmILgny(+Tt`Y<6e=E<9FdxIl9)HrlqqKfDkHNzkKfHj z>R(9XC56;;?2`2#0{8{X5AkS%(9amz&ote73FyC_El%ilLRhxaqn}eeeab|@7zZD2 z!hilHzaD3VO+eJmC(VUU<&UAJZ<2^sW9>yYhmj>Hdicnqmwq9TYLgsPKmGCeueriX z+VVKn5fl;OtS=NTD;0oVjuK!7@!#YF!oW3Q`_)9{TYtymV52R27jhTNfknWc;Uq2>k4l>b=)AZo~CE(@pwg-_c&p0owQXK-&2gLr)yGgy#k|`Jx~4F}5YF*&5y=Bd_?6ZjUY@(r_-0{NX32^BoZHm@Rbnz3g$i1O`UvuY5gft4 zAGC^XG*}%~E>!M{GYG@<;Y<1uB+knY77Z(5lj9=MhvNlF&Mcn(TCN*c!33ofXja+5 zqtR+=D-Q!OIS`!MD0|>H6G;L8>18z#SxV~Bp99 z$L+!LzkW+5!=(Dl2Qar%j>lr~8h7L8uAG$u(aaD7AZ@C3cD+1?^ZsHTaY6UOnWIoz zns6>k8#oQz1LjOoj!>ahT|O>Z`9EYQXkKS2rFm8eO_sBOF{JE5S4sbtsQr0$;Joao z$1Xi}LKp#y^vEyqDLYWUeLa@#ad>GLl$W6XUnzc~NU?&t$Qn8qmHArgx_U1*=)$uL zsq%uyl2SzKcnXrG!4^KQk$!-Bl(e9TePAd-qYcBK{?o_5@dPwfQo*~6WlaKQ7nvid zlayo5izc5@0L65C!K5LKsfyiP+1I78;u)7w5xt|1^~#p>M>wKtzC!=| z6jFD>=*Oc`#Jm9v2_~Zm`&HKU?0Oh% zJ)_a{=CHT41ts^v9B!1z-q#bM;{f>L7ilPG9N2JfV?ux6vIM$8tNg#s0wIHu+?l|# zu>kr_F?!4%#5q9f-;X`{SAs2T*=z2X6?w`>4YwEIBSi{8+ykOT)cd{il%~Q!_kj@`+e)1F`0&k2YzLQb%#CAh*d=o zWlmKC%w)jqr9zA3Y+mpBu=?20vwh+Ou;D+UZGN2dW^YQeQOE3|aOT!-(7_n z!2HN~RS~4+>(FJ>`9y#fX>#e6v2Q@Y-5(zQwu~kOuW82xdV5~}H<)~CrUTG}naf-@ z^OFh+l5oUM)W|+A0QK}uf=ccFKJXKk0JmduKpgg%|4}MKHoh>I5wS+WeZ+C!!$v^a@h=I~)g{3{c`g0$l-&sWXtaJOKL-~ke=$*4M0&dOU z>tH>2T#DA55KXg_BCwt;u>K>rde!&VVN%~lInBR?*jbE)49V~5MXNO&MvKA9kzQ&& zpI4;pd-#}Ktqh2--9XAs>|#8pvc&3*AdNS8NV+?y$olnf0Dv+7$fk#UiafO5A=Qu| zHEXZcmVI%r>_+!t=$$FB8?NR`{CQ%Anm&&RnSLr~<-GJlSMtlCUS0kwzn4GcOK5;> z36lc zRNgrM3VI4WJfQ@%dmw1O%3qjdUsAr^v5`<*q)+3V26~+#x$CGDGgkLkeD>E%UEx#R z7u+2YT)F9}9FFix7RV`oa2qSuL^&(UYNT!ALM3AL*vSDt*|g>|JSA1+@_R^iBKQ-z zv%;31@6~1@Bc9OpPVM+D?puOMpNqv$nwIM4N_RuIE~@rpX8apS+7}i4{`H}S>+Mqm zT33F#l#kX$R6x>8E$UC=okk3g@?1pnSH7@Gv}3uS19n2neD8IFK)Vb3B?2OQnSSgB z_rOQt0iweHhpXL;6>q*;zSnlWhwKM#U{E>-fUl!@1MJ%3J7E&~^LcMaq#CU?-wNE! zo|~-fZLo=gg8;#45IpQ67>B=H9at+zkzNMYmK~S-&TrnrK2Zh&Z8ud&fCIozwnCL{ zS8urhFZm_x2r5&@7_0>q(uq`ZHZ$>Q;?0Jnynv8Z+JYuE1&TpkIxsZ~RUR;Sa3?cn z`8c~JnZ+P3mcqLQ+72Us@de(Y+F?JcDD-7gvaR3|9|Eb6#*0Z=Il zf>u4@NDs?xD)IQIB1ir?tG7(z1Q>86cjaDtpfA9r`%ZsPQeaz0>PK0uv?s|Nf=d^%>NPp*Xi_&P=9gow z0u|myU>7fKl~z(FzNd&DG>~mFU}va8n**^4PI|wq@vKQK$1}8*H^Bih&knipcsR^6 z)+w0XW3HK>`Q}u~5*ycfp8c^Y{Y2&ttc2V;Nn>nT9f9-C%k}qj0A6XROT8e@rGpRD z!Gh=IlYhb&sW;HTc9GI#lRMCivZ^wPsmg4#g?dLlpRzOr-iHR$UZSDHOIZlZ_knrb zhl0SzF8TC~3mB@xflNA$qBaAn7F!FT6S+EpjYxbx>!PaYY_peU=`C^o4uBG>lXYAa zI)EoQZ3ns`Sfyv8ftz@YJJxR;=`Kcm)_A&YB(DEhRRyI)N!(q0{?JQmlOBtK2l+MC zc2KBrX1#9UzmESfpE`9)Sq#J2A zB#sZGrF=_{=>NvO)a3vyYvq8hztfF#Nau(LCM_h>?;>*c+cF&3-PwBnx2NGCXyJk; zHE>DS@x2zYmTLF5Lj;#qA~T#1GOHr8%ljn(G_k79qb6=6K}mN-s<~& z)}Hai1VNAur9trDK|tFv5&HX2?!IW0ul!N)7dDIx!cmir>H?q#AvS&)XM8KGgHh2*Kfm6`+FTUz}lh zHNy#7g*lGeosy$q;hq z?*Nz&VV{wb2htW6{-TW^g zMws0EeJoM5Hy;zu(IyDf6k=suAVSFi7@3oLg^y%hbcs=B=(808jkZI_o36r2=s!Z4 zl|W&yUlDU$0?8TW$~W5A*o2?i zExs_pbsU&YS7DWMS3yD@Hk97@CQv=c?HDs$HJbeqPyeYNU@868RX>p|k{2-QOYes$ zrQVQ1Ub~oxjmIlR~l6nW9gfMyX zLt{}U`B;>`0`H$i-u4O0k@F|?)g3tVzd4p{W@j!a_IJEo9k>29ikCkKlE^ETHb19* z7-(eDFhh_!9a{*Ku5Jl&EH_tx#L2W>*o&31n(St4mu!Q`>%x^ZTED1PE8|@xrmn}8tMXQduH+I$Mw#l#ugE1Ev_;uWO#}XZ`j#H9-`Tca{gIf zri_;^VdTwovi7xu0#O4`X{kccF;2oS*S^isT_mw|2`b5T zLlYYz)c8HBt1iumgo_i-wp|L$UZhjSR>m8{^)oiLL;TOw@Sr^8pdr@7bVRGHT|A}! zrMJFc@Ctg;WID)+f`35T|Db=4R0}9a`E%$g>4%@~g~shIh4rQ}=rf!(L&P!U!z2Mo z{<;CtA)0Y6OzQO2*T>Vor8z z#466wENNy3z_6OSA3UX4mO``y&ZG%U2F-=0)J}uBS4Ht?Gzd35%9pOTD=R~B52N`$ z1*p(~1{^{Ng-O7ndZ9G+I%;Cowu#Q@4MWw}25~brkNZhuJz}>$ru}_4@JXw2JO+JFu)de_I{8-(c>TS zavQ$LP}Wqcw|g3~7K85K#Nd+z8W|L5W(aPRX?aOH!P$6x6eQ&v8R)C%pl7)uJ6QY} zFR?;fz@g|$j5Jz8w7P7PVwKC3ZRW?C{Wi6)W)kt5FsVS;z6#B!)w*5a=gVI0#wl|` zWKAZ&XeYR=VXtD(+hqB=gKP(h6BxV{PoS^=eCKD8!)y4avLHE-R4A#%?Ae6PNJ)x@ zdAS1wH+L?S%?mBeE=D)r(ym}XBOm~Df0j8OlQD+0cRw9Vv+g)OnEWYG+7eK4|0}8~ z$k@_2#AqX!*y?0n7gCJ(>N8RRoW7xzpr|C3f-Of1#2vu)kB3DnubihWezK^mC+B3D z_#fOwfv(6)P2IO=G_LQ_cpm zMDDNpAGBWc(McZol`Lt6@@>`4l^3DR0%~fV8Z$$j+MIfj`hpPPi{UMHWjYC)m*_M) zS;uC_K2oC?U;xPE<_H*+6ih}-N-I)zgr3trQjR!I)tVq}T_=(NCNb6f4f&0YKpgR+ zJ1;HHB_QHp~bykOH*aa_d)d|5s9qK~y}P*4|XY ze_XuaQO*QE5t)(sO{*yZIh`*=cd9yn{*_d)&+3oJU4FrK0+%Nhd z6Q+?VNumr|WZ7_N$|A9nd!hYz+m-GFsZluu@BKR+*cN9NR ze$C<+BlgsBBj|yxbO`oBq2Fr+^&&+O1S&Q}k`E*uk>@{L9zyp5s7<*(4`WEV*zQ{X zjaes91_45I`CzYuU}Rq4Y1Y-R!Vd5fAm$SzH`)|`UJOY zUruMR@Oj?ssXBaM5j{t$)*f~cn($XvFk<4lOQ-KRefDS(GujS-q7OvKv zn!y70VIksQeYo0~xC8NO^{MF7;Q>KL34$>P=_4v8eP&AqX$~cAWwl z8~bX(5<9eh3~XE-kFokv$Fed zw(M7@6^DXNfPLd!!-&x+NTVb}-I`EUD?W^mL?okT1WA1d$)zlr5D&|}B$$*hA*Jm) z9ipU<9`Uc_xuw1mz&rjlAXc#tb5grC8_;Tj1cP;$g#L${nVPX76{{z5l<|6uD(T7a zAYAkjW>MH-H*skTgX<>0u9Cte{VHI;MIZ@RmyVl5xeD?z%EyX;vu4!E1m?L;V0tYE z5&ukuLLG$eJG1e!>7oR`jHtVf3iS~j!jJGbkNgw2iXP+it-p{lq=-TJ{vMb1S0Dlq zq&FtGfk>Y!FCRZ5Zm`@CWCJRug`qdp@*D1AiKLIh_((Ufw2IG?>=8ZQ!8z# zVUs$-LTal#tjWDR{E}RMNo>deP?Io$^$^k^3h!k}v$&UQg)=9az7WKX>c6D=rw*h@ zz563DK(uP*du{kR&JPXd2{UO)s~pZP~!LdqA!>?o~B_gTqTjxlym6bUW@q z3@VgefkdSoBV(*TZBuA8+HOIPOBaXGm1|(vO@~^h>HT+}@0wR2g_Q!W6McSHEXS;KI23n!{j2YZ1t$oxO;J-x zepvCn(Mr#r7z8*?_clKJlN!ZkA6;}_H!m)IV(!qkWBaW;#qW&vKYm7c!WI_*~uacAS%&ss#Z9nWEWRcgj=#_*aBvzh?YymZ?TgR?8gr zz5^jas58lpDUIWbt#LLk%C2QON+b+qr^V;4CGIarCZZW_{~4(a&Yj-!6faatiOa+! zcvU(QF|;oLbitI&T5EyTX|KT)o=Mx|X14-Y!(^acKXWj>-O>$5CN|$t8UTgs^Cuiv zp1JI?f-6mquA?;{rGX&=7vn(sk*2dq{%I!PeWc1|F|I72d|Wh(gL$t%-F3qp z{umh!jOd@0w)zzo6EsP(fXrt92J;xMt)u@ufjTW_^Wh2g8v8?-bLNmJX>HFful@+s zaZQI_-6*ZD03fPX|jr%}NTK zPmF*B`>MxfcssyM^p9Y-r&EReP$^$6PVtMsf!!bvo3ckN-T!+%xF&N58EXi(Z}?-a z7$3_vWL_%%A~W|!^tAC$ z?fjooKlN?nae35}_C9JN^4uX`cinj22$Q4pLCv2?#>xfb+8My5 zbdkZLO-kM9gvMtMUupi}Z(HwHbz=8pI`5)sWEy5Y8avXrsp5~rri^LFc>&0LV=RA>U{B04wwD^gtVo!XFx*>I7fMaDA zgO1^*Gw|~TcJm`tAz1zrc?H3dz&8llcs*^`+z_1{-KN;tZ@QqUfIT=D5euO(p<=d%)_XfneHqj7ys%*kd{0hkQ{8wzo;|GKVJvtg6)ZU;^t zV@Bxtg1zAWu15Nv;NH6`cKiP9c(%3;cNIiq$&bvWiujAIrYx92`Zyp2aA9*ud#joghh=5PIi6lkyjvg z0%DBIO0HQBt|U``RfwbUT>IDGb2Mj}4sC{KR6tywNNT}8u00~B7W)}6{};%6<=Wx~ z-}x^d8`D9p)iFC?o)mw<@Oqp-(Dse!@AevuI1JmB_3xkJe%x&o_yiKD?!-oSEohPQ)&j&7v1MreQs#u zn;3ZbVRVwI)=|MLuAJ{rwwI)Aj{#%Z*D~GnRBE2M`RVeG`9t|4~7yi%Q$W3iv$ zqS-J8>SGqKY2VTI9K1<|NPT6fmwtPG?c-xgg>j|2cQunbqo}lb#ks3t<;RqCee-gi zs){;>zO`v;N}XxC77i5o*&eW?enw3#MwtyNR|JGqh+7m(ZFEM@Iz?a%WNTt-e$I0E z9fo&<6H&(CzyeK3Ocbe()u|DRF*OvKdFB?i$%I*-=4ba-iFyhQ6M6$U77mUC(AnS3 z?dq*+-?sp=<*8M9&P%>=LBm`6^SEg}v$SnC-n9<$a>L+L;9@AA)i(nCpIZ$MkM!Zl zlTy68Rz=D7l}Q#NqYr(Ml6jNRGo1a;nku2r%M3J7ln`8fGSQ9qcwX1Ljp6x;1}tp8 zHvlJVn__!GF24cbBUs-h;8dSR4RwCt_34RQ<_uC}UrJlJv92DId-kMxJD|MEUqIUH4R$sP;=O3i%tyV@Zga_2spO`axz zZ#Dg->z06B=;(bI(UTqYSx!BqZ=UUlk+ULgM;4`!t*`#0 zW3(sWv{jy&cK^i`o&NC_VD&JmD zJsFuhZDuEjr0&4$PO7_@sM^KgX9ae}Nvam3Lz{-cD~+SZ8$|M!X2U_Q(2Vk!^`+1z z$3HXg#X2qxRs{tt?EEQ)Zs%Lc`)}0G;GXg01=eY zX>PkCeu`bMRwY3xXn5zo%A%(ReKdLh9X0-Ua=GeXNX)%Aj=2iuaNf)KFrbkm5*vSR ze!o)QYec=I#_Frm6{9IS`}t1qZZcb{Qochi8b|zs+Fm-SQ1-+K6Q{GD>*#J@6gDFI zs`N-WE1ePlC|%g?t<&_I!XfIDPGusRFC_f-!W3*!N_?CI^*}tM(H4?&YrL(=bTuAY zz_>?SR7P4&EJ>k1Mx&@C+Agja?oF;+IsYJIMl8ST_=SOqF@8G`E@9#^=l1d!iFn4d z8tOw5c$p{KZBSnNV~%$@K}4_qDae>KJ7N~jrh5PFVfXK9OHGMZpnO%1{PR!8HQ>gK zs%7)7%k_9Vlxgdo;IH#da;ByEfmIW$*+a=rpIlt9wPL5#YJg@ zfd#7?H`xfA4rvS!0e@p8&YW+lF(tq9Z*Nl{I@eF%SQm|!of^f%>S$k9iYaeAI>k~* zBRUoL?CbrA#Y&y|mt7pq8()~IETdwxhEs@j%E{=(k4(?j$G-X(*x}A_&o9>uvMc`c zmz2hqY_5hBgZ}D^(UJ;0!Mzg1jW@|M(!4kQ2#gm+&V`p};Vs&H{O(1tb_K!$mn?bK<7C4D0M#z1DHVKZeti0wN zn2-NG#68H`Zzf{XI|E2>PUyx%|45qh;{w7r}%uh+T{=9 z@Dfq~5pTPvON0M*;rq@<@8Ic4gbsg5zRLd@Z)lQmHi~CdRk?R(M|%vr-}hM;d6|6! z!fEzND18e}90-J*%U2Ms73Kg1xfvV+vNPqxu^+u8dBP)Jo;jsWl;f~1Ggk&Vq=YX; z6hy9(+MvZeU}ib+M-%l>tXkq+<{;07Bdn#JNvEC~Ix=d*9jBv-Z;_4}GiN%T|;b7d81xx!<*EJiQ;2uWxfrwunz@hlL8 z6v-}hC%I%X2N1<$PLegi4H_HT(*xA`EFIy-(MTXiI)gm_Q@?=6v?K?AdT&MI9{5Q# zOaMYJxVqXG^bhHUb26?>htn;+PKR#Ohwrq0!?DylrADMD&codX>WF+mpnQS}T{8+t z7EZaZhRg9pX-3SNESr`I>Ws{!e*Gb&k@YmaXJinq_DY^rL`kUe##uL~6Ncr;8jGd- z^Sw*vQlQg1+iZ|Sbjr$ykK)Obs}s=l|1k43_fb;QqT!3Nav-HsGOenqeuoN5swlSH zFiY89yOAok>8i#Sa8pVfBm##qf6`>nuRmuksE<;^>rCO&4KB2hG1=>9sNqj)3uv5hg4GCED~2G9+`o`pc@OTi$}A{H^y+mlO4Q?+^%FsVbN-HBNxFqfHw0N1GWK<< z2&4AnrH@6dE_*CzTGhpzE@Er4Fx7SF1LLIQmCF_EM;-AU-mvb~tuEsn=)Uwt2y5j~ zHGJrZeug~m2Z5vP!<8mP(ui3%p{|k%-u}e(fv2m}RNC&{y$DI|s?oU*Ma5jq-|ESIWJYZu3(~fslzb zyalYb6SkZH*n+MniwePzdgF&!g9@gM@bCk9!PA%C3~YEuiNf5=HEgDpLl= zWL6ot`6&h;ti0k(8%?=RYo%t|)j=)rr1lnzvXShQ6gaY`9$6M0Abcw$gB`pmpmvz< zIZxvIB`&hYg^s#H9+Q$*gW@Ua4im=T=NKOoVy6ZY9Atjf;|0H^c@Uj?V8aoOTO;I` zw4Z+td^9nQ(yW^G!brW=Es^WwlkK*N?ZI{ZJ`fRy7mO3qu1IN+YVIrQ$vG#c{UEF$ zrW<*GDRy#7`NbV787UmuGth6gNVxdGbiQqk8jCR3@_dHay{h#J9s@TwFdkC)AYTjN z+MC`i65n>j)y8?m+e8pp+9vuL>*Jvb6po62%q+y<}{Mt=4} zvtPFKf0Djo6ZL*BBXW;Han!PyrYcG7nlGKul$K2?;~cjo%yIvwcV@Hk>DdTH;5}fG z+NNaOG9{UPbp%WFSv>?;c&RG7A-J8k4wCL^+v+L}XEqPIbDB0vqOV?6MDfO5Rq*w8 zxL|)cr>pzRXP&gkNhVi@VB431kQRQYmfD-gc+r4Qr$Dy`c2HV>MxQhQ^WbtLlK9n? z&m(=Cg6!z229Ghf%qyf-20-Jmoq4wtO2Am~RY2XYz$W9pq-n=rHyX&Hd-bXpp%`wh z4qv=YUK;MF4EO0`1}IBj$zrSy^$m^dqHovob=diNkpAB`vsW(H9k(UKa&J)ZG*q6^ zK6Mpon?ifLqcplm`*|JxrT8mne(w301sc{>p(l~JnCG|(U!lw;U%BYgOP%1K?>4jU ziuqH@DP`0(^e$AH6ob_Hk~+NUY@2*rBGq2aDzYT~0Y`G}c>dap63pW{4f*f;ZiU9g z1fz#8?Kop1k6&h?seaX{U|z=w!KULdzXDmZ#)hn8VwU2bvu94=NQ>alrItQVCWVpp#+q5VlFHvFHulv{b+-(u_C-Evl~a0t7n;qI zGW%4WwEWy1+oFfX#Z%_Y<5s5M4tbLF=r=b4onZHKRkJRoLnQI7t8qoX!52G9_&hi_ zHHC~PGE^U$$Z&f5cNzUDIWKPvNj*;-9lov0_L*+|K|ncpaFQPH!t?bn*CjbZ-oM|I zHZNLVAUwv7>fMAnr`G|+;ZAQ|{3c+Uhpgb3-GFZb)AsF3;I1PPccuJN2HsPzaR<6^ z_<}&K(uaO~1e!mi?sFTX$8PRAPg%C`ZEux+W)&;;-KNZPJ6H^=Mk z9r6gj8pxaCr%3W+1nKN1NsM$%V1DMrtKjGpkvOwJ%xG z$MwVK|7qvE|B`IqH(pPrV5s1>)ZDAw6Qxo_GIQa`nU-n#XgSbQTor;7_g*OC%Gq#> zX68zBRpz$bD>X$cwd`~A{14yXzCZJV`?_EE&3Rtec^t?4p3#y8AFg{GzL+kF;1V?> zpRkE|u`&ZMvE3xKLeu`{$dGIDc0MG3fdn$O-S6F!R<^7-TQs9(Fal^`; zN6H^2IPZSqzx7zb8g+@dMvHv(mtW)td#z|}kn38XWweBt`!SbkoKITpKYQwa$EaSo zjXR|2##7Hqc?7zhxLqy?iOM>%VAF>82yFR(ft(<)Z?0?;C)Ssm%6}mMC7JY_sumBq z*9?Z8`0^IiV+?Eor6U(eo&3+y2mE}`IN6-`f;Qs#_WK_z&YuIN+fQZO3FNNxk zj+U{fDY$!ma(CqNu0dQMd${v;npfm%A(bPkv?Cl-ZG5S(3KM9L_KkP7$W7YGI;g}x zMf2ziCD8I5?K$=aqpi`6hK0W!r)YI1Yxq~t)e@9A+F zoDq~q?w%zHh$!N>Jmb!d+9R0IF%1hRxkXhh?1I_g5+bS*HItr(g-#|BZ{91mLt0+< z-%%cQ*}XU@6QCk_jwZd5e&p%;`?3O&`D2;0Dci;KbdRGXSuIQYO)k_ThsUM^jd`e} zjsw(D5}9^<3nigYP>hvd33$)MJD>8A!#rh3)L>9eA$OU~lHXJ+%luGpxBzqG$U$qn z^t;QC4(u2a0rfE<)fir#<*iB1C<^v_T)bx$1*Lv`z-rVlx@ZeNesOce3~3%ehl8G3 zlgzEzzT*`B(XkMCLK*HFV#u#Ei%a2u@e>e9){5S^(0 zlWhCU9Dp--ll!sNFwQsC;7`fT)8+e28swS5=5H-oMqxw=wOrYtlf@z|)Sis_! zFsW3@`ywyAITYStO#^+9Pky|3ohT4!5+)V7=pC3ZyX(O0`x2LDy%ren^urvi;4OEy z94f6KT@$Oq)qIOE9pHK5%wP8cSzaw0$XA5tOuf+~9ts8Y-JP*))0+=&5^nof9XtNI z4pyehITa!r?aFhLP`t{0^IbZ0D53N>c}Extsb!A3wv(5v?v4JTWYp+B<$1jC7{%!MT0*#i#LE0=|4yM`;$*!>V z`mAMJLg0&zio7R7-9P)=%X8`PPbJJ5{h((@Cu}F-yu%;pxz3>;G?({h1ZV;8pz=CO zdLdSUb~6t;3F@|cfp=+v-mKP4*${ErRqA-4-o))BEOdf;=^HS(;cfq=yo<)Qi33)D z*)l$976~l5eyd{cNabw~eAZi(JUfiAE(4!U%7|3d*3) zghN>(5Np=dNpqyWgTSy(+?D>Ez@k&do1eyRr>@YZXOLcLD;~n1%aHzMAkY5C%@=6j zg3hQ7B#sGrs46vEyn|Dq6h_0i{*C=6fhjgIL!odOrnh;yf}(oBhkskJYZw9x#2`;0 zB$=!=D=<56&3sL;HlqTTQhHHwVWIKpnhw1BU!L+5KaP7F6}QZy%r?FzEfv2c-le}h zg%Hb!i9O5d^10nE#dZIyNXYd2uO&h;SO}B8U^AGA_@*BoLtOz}k5E2>g zP&t3OvPH#)kSs`@l4ZL~9wq^|WXn^KqA$&7izL`ZUMF`-);N2dkhoM2_~OLbiN3t* zf^1O{Ke^TT`sO2%O|+)tJ{qgfIb!LQuD?-cQaq1Hin1O7Zxm(bsi-ubTaTF2T2UWp zxbrFW%OQuz#n-Yym=m4UG>di5V&^W&66M8tfjJeS%%5^Y6)A5=jj1F45weoO>e-$0 zol-@EAI*#IV&0=GKE|t#XnUc7a$BvF6rOZ9YIqo1J(E!hY>O*My z#g!;RQ!ti7lY*PUTc;bXGwU2&bVB$X{5AvtEo{t0;%K?$;L1gl-uYr^Hy6u_RZXgs zQn<-aoa__2`I|L|@{~Lx$$1L&Y)27RPNT#MJw)x@%&;5=7lX4r(~5_6lum6MoGC#v z&nWHIGW%_U@O|d2j|6+TqDc1|XY-j$_61`KH?Fn)5yCNziIgPkK<}}jJ#A+f9O_l@02-8w-)PKO#kfI zzYi1Wkut~G26ptHm5Jn=da5V@^Z2y=Vr^ty~h-UxFeoy0(y zcwK|q2`t2Mf?=-5UPFe^E}p_%eKohdpSilu*QA!Ve&w;ZZg0q-?7?`F34eR}K(3QdZZ8SN($Z)NpKWk+`hIDaV_?|w0-X@jjeESUZwXlL zlRNIm>(}!632M^9My;%iUyq&X__EWkrS`b;_w)xjWWLrEGqAIeq%0MKQtz_W14EoY zF0kFD&3gGsl(YhydvxL>kyHt{5AS8`%cm9{K)Sd(XEJNewZ^Jx;c*Abu5gk@D&24w z{=?0`KQ07kfz{EXx~OvUc&R14JJPHk1`>YyqE=%|iP`98f(e@q9h`mh6C1$ah(FG^q3bz4oM%tc)wCB8>s5FOxevKpT4)QKmpQ|7?W%E3Vymyk^2Gxf9p9uZ1a&{9tx1cnj*M3VMr zLE>qe6gZ~`@f%+##o!Kx)qW|5X{t3?T6%0{>AKP)Q7JeNsIX!JRDRLa3V-};(Iw>Q z%P%HUv5AP7Bp=1!z1lmfi^+>nxi04c`MEZtUTf*X0C50O}8Tih11@e<^c$$D| zxj6j66+;b513%0hoSw3)>n)mJ{K5KNmwWvO+$;hX^K_rlxKe%kz`nOC^048vNX>MOxwF#`h~P<687r?91f@Xb`?o${ zddw6iZ!DToe*LM2LV$`krb|$Xh6SJ04KtH8gRb48;J{_54!vcjA(gQL3ya2*hDDF ztUJZ@iY=g8!o=wVjYD#W{VKm&P8N6I_%|7PPsQ@|=_);3V{|R~jCJ1wqGUwyy%(*w83l6L(#O8;E5jkn z2!!GvS_i^*W!2;4TfpSpH>rJB@`~hgpnE)a5Zk-&bWkP+8Q=f=8jvgE{rq6_DE#wn zVdn@qd(??{ut!s!t^+z%p$q2-Tn~fUg3k6EzX#&^YxEWFoOS`D(gl5kQ%FHhRSYS) zdv>8PR^HGtah_|(pG<)3%@70RKGjX>I5%fAv8? z4|AlhP6HQyll_e*0zbLY%S^p68&8DP%{BZ}+U84s>g5P}?;Mi+fs`bf{`mtKtzkz8 ziBx>!im5|eD2m+@K>}gu;DNNdBJV&wYCZr{k`G-DVm8TEl?nZkJ+WL|(gKTZS-a39 zyb}=*s7MU@pPtFo*LU~yM^_84r~p5pCG8EU`2UK}y+tr+c0g7%3NXHx^Wf`Z)`5^o z#_{EIR{|*fcv+1iDd)Z9^R3^5-g|S#EU+>npFqzoynzC}KHjgf@M;H{J8Mi9B$z-n z_r|gTEP#ck*L-L6zh9Mr)C&U!S+zC$5cDPvXsBS=0_wh85HCqSq=e>}|B5C#bfwI6 zEDAcPxj?exypdw_7=Sxk1%R9R{sAl$%*6`TPrDgmXP$5iEA?!S11%l*YhC9>QU4*T z(As>0nWtQEzOyYW8mG&=n+*v@hrn2U)7&PWqFhMYw?#9bHgG$A3L*kIxG-1FV0Lzi zL<*SCv~Dy3F*pyT_)ph=sMW$Xv|Yo8V+A*cCF~FC;15_l5U)ja{(Q6&B>=Wi1u$mo zP0=Ez%TgnKlj-A5mJlErt*Ka@%vx9t69V+Twfzy0$cK~o@5}2lLSGl(rBF!?v5Ik> z$@Cnr=6??b>iAQ7NCIYl{&^tX3nh%4NmEN(qok7TLOcTVlX7MVP+jai`|paO(MeR9 z(_JB0xLCMKQTr0y5cJkU-jRUbF+YR}=%O_`t0Mm0m3nqvN z(AmVSj=@7aTVRZ1Jzn^th11|iE&Q)58Oso!@Wai)yenzBWsOTIZ2gicdXv4w#)$HUKbF^%T0gI*9T~44crWG z%N-@P|1fu9)-yFV12}_R>!Fd14;+q?jD(2^@I%NW~p1vG};Z7rB# zIW6(xTrwUvXp9>FS(lYkYMjjUlI3Z{%bg$Pz-?#U5SwkGt$A55V6_&L~pRdPb<(iPnHWW|iQDV+xNiV328%;Shb zVP#@E9$fZQG%#~7_!I9C6#7P`@i*4H|~h0}si9$XmzXK#fPMVL_iO za=r`!9-J=V!|bs1hTj@tKk6pN!e-sd?47o)w`u+MZ4v8jqXS3327?D9Ucw^=c4(#f zxb{UA=&=-{qZsiKnom*kKuJ^aCXr{T#Q?{m(1rnmdTBi#skuZ8uV06_w^oh*<8n8Z zc=p=V&DKHm*!>f?Qy&8;5ee`2WmhLZ?%5BeOvA?b<#L> z9(YwM!z|wj^FI`|)X%l;ai)mjKopT2Xr9jqki_Pl0^J{}76;*jNJ0N$p0zRn9?Ji- fp#M*~*MHfCCsx%HxWQ!r4gAD)eG^nQ@;3f|+$yGE literal 0 HcmV?d00001 diff --git a/posts/assets/20240412-cd/img_3.png b/posts/assets/20240412-cd/img_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b26b6116c2fd1de1629f09f74f02f917d90b6838 GIT binary patch literal 23657 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 Date: Mon, 15 Apr 2024 17:56:46 +0200 Subject: [PATCH 3/4] feat: circular dependency --- posts/20240412-circular-dependencies.md | 90 +++++++++---------------- 1 file changed, 33 insertions(+), 57 deletions(-) diff --git a/posts/20240412-circular-dependencies.md b/posts/20240412-circular-dependencies.md index 51739ee..77cb0c3 100644 --- a/posts/20240412-circular-dependencies.md +++ b/posts/20240412-circular-dependencies.md @@ -1,20 +1,20 @@ --- title: Circular dependencies -date: 12.04.2024 +date: 15.04.2024 --- > "I knew you'd say that" - Judge Dredd After publishing [Practical Dependency Inversion Principle](https://www.buyallmemes.com/#practical-dependency-inversion-principle) -article, I received absolutely amazing feedback from one of my dear colleagues. +article, I received amazing feedback from one of my dear colleagues. -It was a question: -> ...there is another problem, the cross dependency between modules/packages. +It was in the form of a question: +> ...there is another problem, the cross-dependency between modules/packages. > >What are your thoughts on this? -The question was premised by the schema that looks like this: +The question was premised on the schema that looks like this: ![img_1.png](assets/20240412-cd/img_1.png) @@ -38,7 +38,7 @@ implements `NotificationUserRetriever`. It's not that hard to imagine: -- `NotificationModule` wants to know something about a user, and the dependency to `UserModule` is inverted, exactly as +- `NotificationModule` wants to know something about a user, and the dependency on `UserModule` is inverted, exactly as it should be - `UserModule` needs something from `NotificationModule`, and the dependency is also inverted @@ -50,11 +50,11 @@ even with direct uninverted dependencies such a case can occur, and the Dependency Inversion Principle by itself cannot fix it. Some frameworks (like Spring) and build tools (like Maven) will produce an error in case even a single circular dependency is detected. -The Main reason is — it's just too dangerous to resolve. +The main reason is — it's just too dangerous to resolve. It's a recursion. -Unless threaten with care it can produce such nice things like `out-of-memory`, `stackoverflow`, etc. +Unless treated with care it can produce such nice things like `out-of-memory`, `stackoverflow`, etc. -But, more than anything, it shows the fundamental problem in the code design. +But, more than anything, it reveals the fundamental flaw in the system design. In this article, I'm going to share some tips-and-tricks on how to treat circular dependencies. And I'm going to start with the most radical one. @@ -63,37 +63,37 @@ And I'm going to start with the most radical one. Yes, I know. You are your colleagues spent weeks and months trying to separate `UserModule` and `NotificationModule`. -You might have even extracted them into systems separated by network to enforce sacred _domain boundaries_. +You might have even extracted them into systems separated by the network to enforce sacred _domain boundaries_. And now I'm suggesting to move everything back together into a single `SpaghettiModule`? Hell no! -Here me out. +Hear me out. The software is supposed to be... soft. Flexible. -Like a clay. -The purpose of the software is to help business achieve its needs. -If the software is designed in a way that it's not allowing developers to build certain features effectively - +Like clay. +The purpose of the software is to help businesses achieve their needs. +If the software is designed in a way that does not allow developers to build certain features effectively - the design is a massive failure. At the end of the day, most product companies are **not** selling their software directly, but rather via a service that software implements a.k.a. SaaS. I think we can agree on that. -For example, do you care about the code design behind a _google.com_? +For example, do you care about the system design behind a _google.com_? If you're a nerd, maybe. -Regular person cannot care less about the underlying software. +A regular person cannot care less about the underlying software. But everyone cares about this software working. Everyone. So yeah, if `UserModule` and `NotificationModule` want to be together, because business requirements want so, it's probably a good idea to consider merging them, and reshaping into a single domain. -Don't feel overprotected over existing boundaries. -Sometime mistakes are made, and the worst thing we as engineers can do is to pretend that it wasn't a mistake. +Don't feel overprotected by existing boundaries. +Sometimes mistakes are made, and the worst thing we as engineers can do is to be stubborn about it. It's a very humbling experience. You should try it. -## One-side inversion +## One direction A less radical, but a bit more political approach is to invert dependency only from one module to another, @@ -101,7 +101,7 @@ and leave the direct dependency from another module back. For example, we decide that `NotificationModule` is the high-level module, and `UserModule` is... well, further from the core of the business logic. -This is where political card has to be played +This is where the political card has to be played because the team that manages `UserModule` might not agree on doubling down on `NotificationModule` dependency: ![img.png](assets/20240412-cd/img.png) @@ -120,10 +120,10 @@ With the code structure like this: And so there we have it. `UserModule` directly depends on `NotificationModule`, -and there's in inverted dependency from `UserModule` to `NotificationModule`. +and there's an inverted dependency from `UserModule` to `NotificationModule`. The dependency cycle no longer exists. At least, during build time. -There's still possibility of an infinite loop during a **runtime**: +There's still the possibility of an infinite loop during a **runtime**: - `NotificationModule` invokes a `NotificationUserRetriever` interface that's implemented within `UserModule` - To implement `NotificationUserRetriever` `UserModule` needs something from `NotificationModule` and so it calls it @@ -136,9 +136,9 @@ Domain boundaries are wrong. We just tricked the system. To solve this problem once and for all, one of the dependencies has to be broken. -With the best case scenario being, both of them no longer exist. +The best-case scenario is that both of them no longer exist. -Seemingly, there are ways to break circular dependencies via some integration patterns. +However, there are ways to break circular dependencies via some integration patterns. **Queue** is the first thing that comes to my mind. Is it possible to eliminate the dependencies altogether by listening to a message queue? Or maybe something a bit more robust, like a Kafka topic? @@ -165,9 +165,9 @@ Been there. Done that. ## Extract new module -This is a ticky one because it's very easy to get it wrong and make things worse. +This is a tricky one because it's very easy to get it wrong and make things worse. -The approach is to extract functionalities which produce circular dependencies into a new even more high-level module. +The approach is to extract functionalities that produce circular dependencies into a new even more high-level module. And invert the dependency from it. ![img_2.png](assets/20240412-cd/img_2.png) @@ -191,8 +191,8 @@ The code structure: ``` -Basically, we're demoting `UserModule` and `NotificationModule` to lower level of abstraction, -and introducing new higher level `AggregatorModule` (naming is hard). +We're demoting `UserModule` and `NotificationModule` to a lower level of abstraction, +and introducing a new higher level `AggregatorModule` (naming is hard). So that `NotificationModule` depends on `AggregatorModule`, and `UserModule` depends on `AggregatorModule`. The nuance here is that `AggregatorModule` now exposes two interfaces, @@ -202,12 +202,12 @@ so the setup requires more attention. There are whole lots of tricks that could be applied to handle such a case: from something like a combination of `@ConditionOnMissingBean(...)` and `@Primary` bean annotations if we're talking about Spring Framework, -to something as simple as default interface method. +to something as simple as the default interface method. And if you feel like there might be more modules to depend on `AggregatorModule` it might be a good idea to introduce a generic aggregator interface. -This is where the real engineering happens. +This is where the real engineering begins. -The approach seems like a quite straight forward one. +This approach seems like a quite straightforward one. What's easy to get wrong here? I'm glad you asked. And the answer is simple — direction of dependency inversion. @@ -249,36 +249,12 @@ So the more realistic dependency schema should look like this: So instead of one circular dependency between `UserModule` and `NotificationModule`, there are two, and they are even more distributed! -And as we all know, the best way to solve a problem is to distribute it. +And, the best way to solve a problem is to distribute it. COVID? Anyone? So yeah, be careful. In this case, inversion of dependency could do more harm than good. And this is exactly why I started with the Tactical Merge. -Although it seems like a most extreme, it guarantees to work. +Although it seems like the most extreme, it guarantees to work. Circular dependency will be broken. - - - - - - - - - - - - - - - - - - - - - - - - From 5f3ff21b62fdfe24fbc099f021e033e095a9d951 Mon Sep 17 00:00:00 2001 From: mfenderov Date: Mon, 15 Apr 2024 17:58:20 +0200 Subject: [PATCH 4/4] feat: clean up --- .github/workflows/main.yml | 46 -------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 3499924..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,46 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. -# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle - -name: Gradle BootRun - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -jobs: - build: - - runs-on: ubuntu-latest - permissions: - contents: read - - steps: - - uses: actions/checkout@v4 - - name: Set up JDK 21 - uses: actions/setup-java@v4 - with: - java-version: '21' - distribution: 'corretto' - - # Configure Gradle for optimal use in GiHub Actions, including caching of downloaded dependencies. - # See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md - - name: Setup Gradle - uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0 - - - name: Public IP - id: ip - uses: haythem/public-ip@v1.3 - - - name: Print Public IP - run: | - echo ${{ steps.ip.outputs.ipv4 }} - echo ${{ steps.ip.outputs.ipv6 }} - - - name: Build with Gradle Wrapper - run: ./gradlew bootRun --no-daemon