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

再利用パターン / Pattern of code reuse

再利用パターン / Pattern of code reuse

nakaryooo

April 19, 2024
Tweet

More Decks by nakaryooo

Other Decks in Programming

Transcript

  1. • 共通の処理を関数(サブルーチン)に切り出す
 関数に切り出す def hoge ... taxed_item_price = item_price *

    1.1 ... end def fuga ... taxed_item_price = item_price * 1.1 ... end def hoge ... taxed_item_price = taxed_item_price(item_price) ... end def fuga ... taxed_item_price = taxed_item_price(item_price) ... end def taxed_item_price(item_price) item_price * 1.1 end 消費税計算を行う処理を関数化して再利用→

  2. • 複数のコードベースを跨いだ共通化が可能
 • ライブラリの粒度や依存関係の管理が大変
 ◦ 粒度が粗いと、使用していない機能の変更でもバージョンアップする必要が出てきうる
 ◦ 粒度が小さいと、ライブラリ間の依存関係が増え、管理が煩雑になる
 • 言語の縛りがある


    ◦ Ruby の gem は Ruby でしか使えない
 ◦ 少なくともインポートする側の処理系が扱えるものでないとダメ
 • 処理がコードに閉じない場合(永続化処理があるなど)は、使い所が難しい
 ◦ 誰がテーブルスキーマを管理するのかなど、考えることが増える
 ライブラリ化
  3. • インターフェースだけを共有し、内部実装には依存しないのでより疎結合になる
 ◦ サービス側は IF を守っていれば自由に更新できる
 • プログラミング言語の縛りがない
 • 性能、スケーラビリティ、耐障害性など運用特性上のリスクが出てくる


    ◦ 協調スケーリングが必要
 ◦ リモート呼び出しのため、ネットワークレイテンシがある
 ◦ 共有サービスが SPOF になる
 • 共有サービスの更新で、全ての依存サービスが壊れるリスクがある
 共有サービス
  4. サイドカーコンテナ • コンテナ限定のパターン
 • マイクロサービスの文脈でよく出てくる
 ◦ サービスメッシュとか
 ◦ ロギング、モニタリング、プロトコル変換など全てのアプリが必要とする共通処理を行う
 •

    アプリケーションコンテナの横に、共通処理を担うコンテナを横付けするようにホストする
 • サイドカーのコンテナイメージ自体は共通でメンテされる

  5. fin