巨人の足元でたじlog

そうして言葉を軽んじるから――― 君は私の言葉を聞き逃す

pythonではじめるソフトウェアアーキテクチャ読書メモ②

双方向結合の削減

  • 単一の方向に依存するように関数を定義する場所を考える。

抽象共通サービス・継承の活用

  • 同じような処理があるモジュール、あるいは今後同じような処理が増えていくと予想されるクラスは、共通する部分を親クラスとして抜き出す。

遅延バインディング

  • これの概念がいまいちよくわからなかった。調べてみても、VBの情報がたくさん出てきている。あまり有名な概念ではないのかな?例も実装イメージやメリットが良く理解できなかった。そういう概念があるくらいに留めておこう。

静的解析ツールとメトリクス測定

クラスでのコードの匂い

  • ゴッドオブジェクト
  • 定数クラス
  • 拒否された遺産
  • フリーローダー
  • 属性・操作の横恋慕

関数やメソッドレベルのコードの匂い

  • ロングメソッド
  • パラメータクリープ
  • 循環的複雑度
  • 長すぎる、または短すぎる識別子

自分として思い当たるフシは、ゴッドオブジェクト作りがち、長すぎる変数名つけがち。ってところを気をつけていきたい。 パラメータクリープ(関数やmwソッドのパラメータが多すぎるために関数呼び出しやテストが困難になっている状態)にもなりがち。しかし、テストをちゃんと書くことをしていないのでこれのダメさにも正味あまり気づけていない。やはりテストを書いていくことから始めていきたい。

循環複雑度

$ python -m mccabe --min 1 hoge.py

これで循環度を調べることができるらしい。

この他にも、コードの臭いを確かめるために、flake8などのツールは積極的に使っていく。