アーキテクチャ勉強しようなの書

これはなに

アーキテクチャ勉強しようなの書です

動機

  • 上流工程のこと勉強して、要件とアーキテクチャの関係性が分かった
    • 2023.1〜2023.3くらいで上流工程の書籍を何冊か読んで、結果、システム設計というのは要件をアーキテクチャに配置する行為だよ、というのが分かった
    • 多少なりともアーキテクチャわかってた方がいいな〜と思って『ソフトウェアアーキテクチャの基礎』を読んだり、社内のアーキテクチャ資料を読んだりした
  • アーキテクチャおもしれーやんけの夜明け
    • 勉強するまえ
      • アーキテクチャはゴリゴリのエンジニアが気にするやつでおれのような半端者には無関係だと思ってた
      • LTSFみたいな巨大で複雑なシステムでは実践できない
    • 勉強したあと
      • いやふつうに活かせそうやな
      • LTSFのアーキテクチャってなんなんの会、開催!
  • もうちょい勉強したい
    • 高凝集とか、レイヤードアーキテクチャとか、依存性注入とかの要素要素はわかる
    • けど、 クリーンアーキテクチャとDDDの関係性とか、そういうのは全然分からん
      • なぜ?
      • なんか、レイヤードアーキテクチャとかマイクロサービスアーキテクチャのアーキテクチャ特性とかは理解したけど、そことDDDやら クリーンアーキテクチャやらとの関係性が分かってない
      • DDDとかはわりとコードの書き方だったり、ビジネスロジックをフレームワークから守って移植性高くするみたいな話なのか?
  • 読む
    • 読む、とにかく読む

読む

クリーンアーキテクチャ完全に理解した

  • 読んだ
    • 社内資料の元ネタだった
      • 改めて読んでみたらあの図の意味が分かったりして良かった。
      • あとMVCとレイヤードアーキテクチャは明確に別物だというのが理解できた。少なくともDDDの文脈にあるレイヤードアーキテクチャとは別物。
  • 自社システムについていうと、
    • たぶん、自社システムはLaravelの MVCモデルを踏襲しているのと、あと頑張ってレイヤードアーキテクチャっぽくはしてる。
  • と、ここまでくれば読み直したくなるのがあの記事。mpyw氏のなんちゃってクリーンアーキテクチャのやつ

なんちゃってクリーンアーキテクチャ

  • 内容
    • なんちゃってクリーンアーキテクチャやろうや
  • 分かったこと
    • ActiveRecordパターンを採用するLaravelでは、ドメインモデルとデータベースが密であり、クリーンアーキテクチャとの食い合わせが悪い
    • ActiveRecordパターンとRepositoryパターンの違いが分かった
      • この記事では分からんが、きっかけになって調べたら分かった
  • 翻って、自社システム
    • やはりレイヤードアーキテクチャは無理
    • Eloquent活かしつつなのがよい、現実的、というかこういう大改変をいまやるかみたいなのある
      • 安定稼働してるし、作り直すならもうリプレースだと思うので
  • 分かってない
    • ドメインモデル、ドメインサービス周りが分かってない
    • ならDDD本よもか

ドメイン駆動設計の本を読む

  • 実装の仕方を学んだ
    • 実践する他ない
      • めっちゃこねくり回してて、こんなんマジでやるんか? みたいな気持ちにはなった
    • DIについての話とかは面白かった
  • ドメインの知識をどうモデルに当てていくか(モデリング)についてはあんまり触れてなかったので、次の本で読む

とはいえデザインパターン

  • デザインパターン面白い
  • しかし活かせるか? というのはある
    • もうちょいいうと、型にはめることが目的ではない。いろんなコードの書き方があって、そのなかで保守性とかどういう指標があるのか知り、それを高めるためにどんな書き方ができるのかを考える。
    • その手段のひとつがデザインパターンであるべき
  • というわけで、次回は改めて『良いコード/悪いコード』とか『設計のなんたら』とか『Design it!』とか読むと良さそう
    • これマジで納得感の問題だったな、、。
      • 綺麗で保守性の高いコードを書きましょう、と言われてもおれは書きたくなかった。お前はお前、おれはおれだった
      • が、上流からアーキテクチャにいきDDDとなりデザインパターンを掘り、そこでやっと何のためにコードに気を配るのか? が気になった
  • あわせて読みたい
    • どこに拡張性を持たせているのか? という視点でデザインパターンを読み直すと良い
      • 面白い
  • どうやらOCPとかをもうちょい深く学んだほうが良さそう。

OOPの原則

これだけは知っておきたいクラス設計の基礎知識

『Design it!』を読む

『ドメイン駆動設計 モデリング/実装ガイド』を読む

実践ドメイン駆動設計から学ぶDDDの実装入門

実践する

読みたい