疎結合 と 認知疎結合 と 認知Gunma.web #44Gunma.web #44@kanayannet@kanayannet
View Slide
近況報告(前座)近況報告(前座)今更ですが...Ruby技術者認定試験 Silver合格
次はGOLD目指します次はGOLD目指します
今のネタが伝わった方は世代がバレry..今のネタが伝わった方は世代がバレry..
ここから本題ですここから本題です
今回の目的今回の目的疎結合 のアーキテクチャにすると..「その仕組み覚えずらい」という人が出てくる何故、覚えずらいと感じるのか?紐解く
凄い技術の発表じゃないよ凄い技術の発表じゃないよでも凄く重要な事です。
今回の大前提今回の大前提密結合 =悪 と断罪したい訳ではない機能を集約化するために、やる場合もあるもちろん「覚えずらい」という人が悪いという訳でもない原因を取り除いてスムーズに物事を進めるために自分も勉強するために
疎結合とは?疎結合とは?細分化された個々のコンポーネント同士の結びつきが緩やか独立性が強い状態個々のコンポーネント同士は連携しているが、依存している事が少ない
もっと具体的にもっと具体的にそれ単体でも動作可能であるそれ単体でテストが可能である
どれが一番疎でしょうか?どれが一番疎でしょうか?rubygems, cpanなど自作のモジュール群マイクロサービス
クリーンアーキテクチャではクリーンアーキテクチャでは
ソースレベルコンポーネント間の通信には、単純な関数呼び出しを使用デプロイレベルあるモジュールのソースコードに対する変更が、ほかのモジュールに影響を与えない単位サービスレベル物理的な場所に依存しない、通信で繋がっている
特徴特徴覚えずらい人の場合
どんな時に覚えずらい?どんな時に覚えずらい?一つの画面でソースコードを追えなくなったソースコードを追えなくなる処理を追えなくなる
処理を追えなくなる処理を追えなくなるこれが「覚えずらい」の正体ソースコードの改修一切なくリリースまで行くことはない追えないのは致命的
という事は...という事は...
RDBの正規化RDBの正規化tableを複数に分けて共通のIDで管理これも同じように覚えずらいのでは?
同じレコードに...同じレコードに...全カラムが入っている方が覚えやすい結構あるある
classの継承classの継承同じ処理を様々なclass内で使いたい同じように覚えずらいか?
複数のclassに...複数のclassに...同じような methodが書いてある方が覚えやすかったりする
把握できる人と把握できる人と何が違うのか?何が違うのか?
情報非対称性情報非対称性エンジニア組織論でも出ましたね。「見えてるもの」が違うエンジニア同士でもあるある話「相手」の立場になって考える
特徴特徴「覚えられる人」の場合
絵・図で表現しているホワイトボードに絵を描くと伝わる ->あるある
道具の使い方道具の使い方複数画面を並べて眺めているエディタの画面分割を上手く使っているそもそも一つの画面で追ってない
単純に「慣れ」単純に「慣れ」頭の中で通信の線が引けている
解消方法解消方法
もちろんケースバイケースもちろんケースバイケース人によってポイント違う場合あるある「そのコードの書き方知らなかった」これも「あるある」話
道具の使い方問題道具の使い方問題画面分割やmethodの追い方を「一緒」に探す「解らないもの」を認め合える文化これ大事
苦戦ポイント苦戦ポイントエディタは人それぞれ違う使われる事が多いエディタに集約されるかな?その場で情報交換しやすい方向くれぐれも「vim」は強要しない自分が使っていても、正直おすすめしない
あ、ちなみに...あ、ちなみに...vimだと「:spファイル名」で分割できます「:!fgrep "検索文字列" */*/*.rb」railsとかだと検索しやすいかな?
絵や図で描く絵や図で描く面倒くさがると描かなくなるんだけど...ここも「重要」です。コードを追えなくなる方が「もっと面倒」
絵や図のフォーマット絵や図のフォーマットゆるく決めるそんなに拘らない伝わって「頭の中で整理できる」方を優先
まとめまとめ
処理を追えなくなるのは...処理を追えなくなるのは...追えてる人と見えてるものが違う
把握出来る人を集めれば...?把握出来る人を集めれば...?手っ取り早そうな話だが、中々集めづらかったりする業務知識をオブジェクトにしたものだったりすると特に...人を選ばずにどうにか出来ないか?
処理を追えない事が処理を追えない事が「悪い訳」じゃない「悪い訳」じゃない
「見え方」を同じにするもしかしたら「自分が抽象化し過ぎている」かも?これも、あるある話謙虚さ重要
良い悪い で判断しない良い悪い で判断しないエンジニアなんで合理的な判断をしたい人 対 人 にしない人々 対 課題にする
まずは「動くように」するまずは「動くように」する仕事なんで動かないソフトはNGその上で運用・開発しやすいように教える事が最優先ではない
しかし...しかし...メンテできなくなったソフトは価値を失うプロダクトの考え方サービスが長続きするよう、開発し続けられるように
バランス重要バランス重要
ご清聴ご清聴ありがとうございましありがとうございました。た。