汎用性と局所化Advertisement汎用性と局所化
汎用性と局所化を混同してはいけない。
同じコードがシステム内に散在している場合に、それをひとつのモジュールとして切り出すことにより、保守性が向上する。 これは汎用性ではなく、ロジックの局所化である。 汎用性を求めると、とても似通っている処理を無理やりひとまとめにする設計を行ってしまう場合がある。この方法は得るものの代償に、失う物のほうが多い。 私の現在のプロジェクトでは、複数のテーブルにアクセスするための汎用DAOが存在していた。ひとつのクラスのインタフェースだけ知っていれば、たくさんのテーブルにアクセスすることができるのだろう。結果、クライアントからテーブルを識別させるためのフラグを渡さなければいけなくなった。なぜ、このDAOを使うたびにフラグ一覧を参照しなければならないのだろうか。 せめてラップしたクラスでメソッドを切り分けてくれていたらなぁ。 ×
public interface GenericDao{
public Record getTableRecord(String key, String tablename);
}
△
public interface GenericDao{
public Record getYearTableRecord(String key);
public Record getCustomerTableRecord(String key);
public Record getHumanTableRecord(String key);
}
○
public interface YearDao{
public Record getRecord(Strine key);
}
public interface CustomerDao{
public Record getRecord(Strine key);
}
public interface HumanDao{
public Record getRecord(Strine key);
}
複数のとても似通っている処理をまったく同じコードにすることができるならば、その後のメソッドの抽出は立派で安全なリファクタリングであり、保守性は格段に向上することになる。
Advertisement |
ショートカット・634トップページ・このカテゴリのトップページに戻る ・634ラボ サイト検索Y!ログール |