Upgrade to Pro — share decks privately, control downloads, hide ads and more …

『良いコード/悪いコードで学ぶ設計入門』を一歩深める読み方 / deepen good code bad code

MinoDriven
November 24, 2022

『良いコード/悪いコードで学ぶ設計入門』を一歩深める読み方 / deepen good code bad code

こちらのイベントで用いたスライドです。

『良いコード/悪いコードで学ぶ設計入門』を一歩深める読み方 - FwLibrary #11
https://forkwell.connpass.com/event/264759/

動画のアーカイブはこちら。
https://youtu.be/_qXG06v8HAI

MinoDriven

November 24, 2022
Tweet

More Decks by MinoDriven

Other Decks in Programming

Transcript

  1. 多くのアンチパターンを網羅 再代入 生焼けオブジェクト staticメソッドの誤用 プリミティブ型執着 Common, Util フラグ引数 switchクローン 多重責務

    モノベース命名 多重ネスト スマートUI 貧血ドメインモデル 退化コメント ダブルミーニング 例外の握りつぶし トランザクションスクリプトパターン ※ここで挙げたのはごく一部にすぎない
  2. 統一的な一枚岩モデルにより生じる弊害 • どの状況で何のデータが使われるのか分かりにくくなる • どの状況でどんな振る舞いが期待されるのか分かりにくくなる ◦ 状況によって守るべき不変条件が異なる • 言葉やデータの意味が多義的になり、混乱をきたす ◦

    混乱によりエンバグしやすい ◦ データのフォーマットが状況によって違うケースもある • 多くのあらゆるロジックと密結合になる ◦ 保守や仕様変更時の影響範囲分析に莫大な労力を要する
  3. 在庫管理 配送 注文 商品審査 ECサイト 商品 モデル 審査用に特化 商品 モデル

    商品 モデル 商品 モデル 注文用に特化 配送用に特化 在庫管理用に 特化 従って各問題領域それぞれに対して専門で解決する、 目的特化型モデルを設計するのが良い
  4. 商品審査 商品審査コンテキスト 商品 モデル 注文 注文コンテキスト 商品 モデル 在庫管理 在庫管理コンテキスト

    商品 モデル 配送 配送コンテキスト 商品 モデル 各特化型モデルは、それぞれ適用可能な範囲が異なる この範囲をシステム境界として定めたのが境界付けられたコンテキスト
  5. 商品審査 商品審査コンテキスト 審査品目 注文 注文コンテキスト 注文品 在庫管理 在庫管理コンテキスト 在庫品目 配送

    配送コンテキスト 配送品 意図や目的は背後に隠れてて本当に分かりにくいし認知困難 だからはじめから目的駆動で名前設計する (詳しくは拙著『良いコード/悪いコードで学ぶ設計入門』)
  6. アーキテクトキャリアの利点 • 利点1:ブルーオーシャン市場 ◦ 圧倒的に人手不足 ◦ 努力は必要だが、努力次第でちゃんとこの上級職に就ける • 利点2:スキルがあまり陳腐化しない ◦

    フロントは特に陳腐化が激しい ◦ 他の技術と比べ、ソフトウェア工学は長きにわたって活用可能 • 利点3:どのIT分野でも活躍できる ◦ ソフトウェア工学に垣根はない ◦ Web系に限らず、組み込み系でもどの分野でも活躍できる ◦ エンジニアとしての生存性が高まる!(私がその証拠)
  7. ソフトウェアアーキテクトの仕事 • エンジニアリングの観点から問題を定義する ◦ 利害関係者と協力し、ソフトウェアのビジネス目標と要求を定義する • システムを分割し、責務を割り当てる • 広い視野を持って全体に目を向け続ける •

    品質特性間のトレードオフを決定する • 技術的負債を管理する • チームのアーキテクチャスキルを高める 『Design It! - プログラマーのためのアーキテクティング入門』著 :Michael Keeling、訳:島田浩二、2019年 刊行、オライリージャパン、 p.4-7より引用
  8. ソフトウェアアーキテクトの仕事 • エンジニアリングの観点から問題を定義する ◦ 利害関係者と協力し、ソフトウェアのビジネス目標と要求を定義する • システムを分割し、責務を割り当てる • 広い視野を持って全体に目を向け続ける •

    品質特性間のトレードオフを決定する • 技術的負債を管理する • チームのアーキテクチャスキルを高める 『Design It! - プログラマーのためのアーキテクティング入門』著 :Michael Keeling、訳:島田浩二、2019年 刊行、オライリージャパン、 p.4-7より引用 初歩の考え方をミノ駆動本で全てカバーしている!