プリンシプル オブ プログラミングの読書メモです。
第3章 思想 〜プログラミングのイデオロギー〜
- 「よいコードには型がある」→「型を身に着けろ」
- 並んでいるのを見ると……いつも使ってるおなじみが並んでますね。
概念的な「線引き」
- 捨象…使いはしてましたが、名前は知りませんでした…!
- だって、絶対現実世界のモノのデータをそのまま持っていけないじゃないですか…。
- 開発者以外のメンバーと話すときにズレがちなのが抽象化で…いろんなものを個別で捉えがちです。どうやったらうまく説明できるのか…いつも困ってます。
データとロジックをグルーピング
- とにかく、関係のないものをなるべくなるべく混ぜないんだってやってます…。
- 属性やメソッドの公開範囲は…ここには入らないのかしら…。
必要ないものは見せない
- 余計なこと考えなくていいですもんね。
- カプセル化といっしょにしてしまうのは遮断イメージ…。
- まさにそれですね…。いっしょくたにしてました。
- カプセルに包んでアクセスを負荷にしたところで、必要なポートを開けていく、みたいな…。
- 関連のパルナスの法則…あまり日本語の資料がなさそうですね…。
3.15 アーキテクチャ根底技法④ パッケージ化
モジュールをグルーピング
- 論理構造を物理構造に格納する方法…ディレクトリとかGemへまとめる的な?
- …ちょっと違うみたい。
- たくさんベタッとあるものを意味のある単位を見つけてまとめる、マップという位置づけとのこと。わかるような、わからないような…。(あんまたくさんで困ったことがまだないので…><)
3.16 アーキテクチャ根底技法⑤ 関心の分離
関心事にコードを分離
- MVCが例…。Railsのディレクトリ構成で、似たものを集めたディレクトリを作ると、models/views/controllersにそれぞれ作られて、ユーザに関連する〜のような関心事でディレクトリを分けようとすると、MVCそれぞれにそれらしきディレクトリを掘ることになり、縦横で仕分けられてるようになることもあるような…。ちょっとおもしろいです。
- concernも横断的関心事を切り出すのもそうですかね…。
3.17 アーキテクチャ根底技法⑥ 充足性、完全性、プリミティブ性
表現が十分かつ完璧かつ純粋
- こっちのほうがわかりいい。
- 3つ揃っていることに対して意味があるのかしら…。気になります。
add10 👼
- 3つ揃わないと、表現している抽象が正確に伝わらないおそれがある…と。
- …まぁ、たしかに、今回は使ってないけど対になるメソッドを足したいと思いますもん。誤解が怖かったのかも。
3.18 アーキテクチャ根底技法⑦ ポリシーと実装の分離
「ポリシー」と「実装」は混ぜない
- どういうのだろうと思ってたんですが…
- コントローラでのbefore_action :authenticate_user!、concernなどにauthenticate_user!を置く。
- モデルなどで validates :title, uniqueness: true として、uniqunessバリデータはここにない、的な。カスタムバリデーションは完全にこれかも。
- 支払いのロジックにActiveMerchantを使う…。
- 知らなかったけど、shopifyだし、ちょっとよさそう。
- あんま気をつけてなかったけど、意識してやったほうがよさそうです。
構成は「インターフェイス」と「実装」から
- インターフェイスだけ知ってればよい、というのは、余計な副作用がないってことかしら。
- サボった改修で、あんなところにあんな処理を…とかやってると、中身を知らずにみたいなことありますもんね><
- 副作用プログラミングでだいぶ痛い目にあってきたので、とても気をつけてます💦
3.20 アーキテクチャ根底技法⑨ 参照の一点性
- Rustはデフォルトで不変ですもんね。
- Rubyだと…どうやって徹底したらいいんでしょうか…。
- freeze、Struct、値オブジェクトあたりみたいです。
- freezeはともかく…Structや値オブジェクトはやったことなかったですね。
- 参照透過性…値を得るものは同じ状態のインスタンスだったら、何回でも同じ…みたいなことは気をつけてます。
- ソレ以外は動詞を使ったメソッド名にして、操作されることを強調してます。
3.21 アーキテクチャ根底技法➉ 分割統治
大きな問題を小さく割る
- 大きいだけじゃなくて、期間の長いに対して分割を適用すると、アジャイルのイテレーション?
- 分割の仕方は…とりあえずこのあたりはよくやる感じですね。
- 責務ごと…MVCなど
- データ構造ごと
- レイヤーごと