猫の魔法

主にruby系の技術メモを記載

個人的メモ:Rails AntiPatterns(6)

CHAPTER 5 Services

AntiPattern: Kraken Code Base

  • ある程度の期間をかけて巨大になってしまったアプリケーションのこと
  • modelの数が多くなるとそれに比例して保守性が下がる。

Solution: Divide into Confederated Applications

  • 一番いいのはお互い関係ない機能を別のシステムとして分離する方法。
  • 関連がある部分切り出す事も出来る。
  • アプリケーションを分離する所までは同じで、APIを作る事によってアプリケーション間の連携を行う。
  • APIで直接的にシステム間を繋ぐと、落ちないシステムが要求される。この場合、キューイングの仕組みを使うとベスト。

CHAPTER 6 Using Third-Party Code

  • gemを使う際の注意点を記載

AntiPattern: Recutting the Gem

  • アプリケーションを構築する際に2回以上繰り返すようなことがある状態

Solution: Look for a Gem First

  • 繰り返すようなコードがある場合、まずはgemがないかを探してみる。

AntiPattern: Amateur Gemologist

  • 十分に成熟していないgemを使ってしまっている状態

Solultion: Follow TAM

  • TAM(test, activity, and maturity)の原則に従い、使うgemを評価する。
    • 自動テストがついている事(test)
    • コミュニティが積極的に活動している事(ソースコード、チケット等の更新が最近されている事)(activity)
    • 作成されてから時間が経過していて、よく管理され、多くのユーザがいる事(maturity)

AntiPattern: Vendor Junk Drawer

  • gemを利用することは一般的にいいことだが、使うgemの管理に注意を払わず、闇雲にgemを使ってしまっている状態。

Solution: Prune Irrelevant or Unused Gems

  • 使用していないgemを削除する。
    • ただこれは簡単なことではないため、そもそもgemの追加をするときに慎重になるのが正しい。

AntiPattern: Miscreant Modification

  • 使っているgemに不具合がある状態。

Solution: Consider Vendored Code Sacrosanct

  • モンキーパッチを当てる。lib以下に作る。
    • 直接vendor/以下のコードをいじらないように。
  • モンキーパッチとは下記のような物
    vendor/gems/hoge/hoge.rb
module Hoge
 class Piyo
  
  def print
     p 'piyo'
  end
end
lib/hoge_extensions.rb
module Hoge
 class Piyo
  
  def print
     p 'gao'
  end
end
  • 修正が恒久的な解決策なら、forkして開発にプルリクエストするといい。

CHAPTER7 Testingの前まで読了。

関連

個人的メモ:Rails AntiPatterns(一覧) - 猫の魔法