と「割れたモノリシック」は、デプロイ対象が複数ある点だけは共通だが、中身は全く異なる。
AppBaseみたいな、domainレベルでなく「implementationを参照する」レベルの、全アプリケーション共通の共有ライブラリがあるのが「割れたモノリシック」だ。
domainレベル、implementationレベルの些細な変更でAppBaseが変更され、それを参照して作られるほぼ全てのアプリケーションに影響がおよぶ、という外形だけで「おかしい」と感じない技術者は「おかしい」。
マイクロサービスは、極力各アプリケーション間の依存を排除して、一つ一つのサービスを独立に変更し、デプロイすることで運用の負荷を下げることを目的としている。
割れたモノリシックでは、毎回ほぼ全サービスをデプロイしなくてはならない。
「今回、影響しないから」とデプロイをサボることもできるが、その判断を「理解している人間に」委ねるとか、DevOpsって何?
「割れたモノリシック」のお守りはもう嫌だ。
#そして、新しいサービスもバッキバキの割れたモノリシックになってしまった。
オブジェクト指向でまとめる方向だけで突き詰めて、システムが複雑になりすぎた時に「どうすればいいのか?」ででてきた対応が、
1.DependencyInjection
2.MicroService
つまり、複雑な部分を押入れに突っ込んで目に入らないようにする(本当の使い方はそうじゃないけど)か、管理可能な単位に分割するか、だ。
MicroServiceで依存関係を絞り込んだってのに、AppBase参照してDI使う変更をかけるとかいう本末転倒に、ため息しか出ない。