操作
機能 #83
完了Redmine Glossaryプラグインをリファクタリングする
開始日:
2018/07/16
期日:
進捗率:
100%
予定工数:
(合計: 0.00時間)
説明
Redminge GlossaryプラグインのRedmine 4.0(Rails 5.2)対応作業を通じて、今後のメインテナンスを良好にするにはリファクタリングが必要と強く感じた。
- Railsのリソース指向な構造に合わせる
- コントローラーのアクションがルーティングでresources/resourceを使うのに馴染まない
- newやeditのアクションの遷移が独特(new→create、edit→updateとなっていない)
- 命名を一貫させる
- glossaryとterm
- styleは表示設定に適する命名かどうか
- 役割分担が局所化されていない
- glossary_controllerが肥大化、term_categoryまで面倒みている
そこで、Redmine 4.0(Rails 5.2)対応を一応終えたバージョンをブランチ開始としてリファクタリングを実施する。
リファクタリングは多岐にわたるので、本チケットの子チケットに個別リファクタリングを設けることでタスク管理する。
リファクタリング作業のブランチは次とする。refactoring/83
高橋 徹 さんがほぼ7年前に更新
リファクタリングの試み(第1回)¶
結果:破綻
作業経緯:
まず、[#86]から着手することとし、モデルクラスのクラス名およびファイル名の変更、次にユニットテストを通すことを目標に修正を実施した。
データベースのテーブル名を変更するマイグレーションスクリプトを作成し、モデル内、ユニットテスト内、fixtureのクラス名を修正。
コントローラーの修正に入るところで、ルーティング設定、アクションの定義、などなどで修正範囲が拡大し破綻。
- リンクでは、コントローラー名を埋め込んでいるものが大半のため、コントローラー、ヘルパー、ビューの随所で文字列を変更しまくる必要あり。例をいくつか示す。
{:controller => 'glossary', :action => 'add_term_category', :project_id => @project.id }
- 部分ビューではパスを多用しているものが多いので、それらを変更しまくる必要あり。例をいくつか示す。
<%= render :partial => 'glossary/form', :locals => {:f => f} %>
アプローチを見直す必要がありそう。
操作