woshidan's blog

そんなことよりコードにダイブ。

どこに何のコードを書けばいいんだろうとか

今週は、自分の書いたコードの汚さや自分の作業量の見積もりの甘さに死にそうになってました(ああ)。

 

以下、頭の悪い愚痴。

 

今週はやたら、

「MVCの勘違い」について、もう一度考えてみる - 圧倒亭グランパのブログ

のようなことを考えていました。

 

コントローラで検索するな。

モデルに関する処理をするな、というか。

 

いや、特定の画面でのみそのモデルを操作する、

という場合はコントローラにまとめて書いていたほうが理解しやすい気がする。

 

でも、複数のコントローラやアクションからいじるようなときは、

コントローラに書いていたら、

コントローラの各部分によって処理が変わるのを把握しきれなくなる気がする。

関係のあるモデルの呼び出しとかは、モデルのメソッドに書いたほうが自分には把握しやすい気が。

複数のコントローラからいじる、というよりは、

関連している他のモデルの更新にともなって更新されたり、他のモデルを更新し合ったりか。

 

また、似たような画面を作るときはその画面の部品をきちんとテンプレート化する。

テンプレートの方にどういうデータが欲しいかを書いておく。

コントローラに細かく書かない。コントローラは多分範囲の指定とか、命令の振り分けとかのほうがすっきりするし、テストしやすい。

データベースと関わるタイプの命令は、たぶんそう。

 

ただ、最初っからモデルにメソッドを置くとか、やたらとテンプレート化するとか、

やりすぎると却って読みにくくて理解するのも大変なので、

2,3回繰り返して今後も使いそうな場合、その場ですぐ、というのがいいんだと思う。

つまり、そういう余力を残しながら仕事をしたほうがいいんだ。

 

サーバとブラウザ間のデータの受け渡し方は、可能な限り統一する。

統一する、という意思の問題ではなくて、規約をはっきり設けておいたほうがいい。

自分くらいのあれあれな人だと、Ajaxがちゃがちゃやってると忘れるから。

ここの画面はこうだよね、とか例外的に考え始めてしまう。絶対よくない。

私はそんなに頭が良くない。

 

Ajaxであるモデルの一部のパラメータを送って、そのパラメータを1つずつ更新して……

なんてことはもうやるな。

いいな。見直すときに死にたくなるぞ。

 

もうモデルのデータを渡すときは、絶対Model.new(params[:model_name])で渡せばいいようにしておくんだぞ。

 

約束だ。

 

あと、テストは絶対に書け。

境界条件を網羅してなくてもいい。

ここのコントローラではこのモデルが参照されているのだ。

だけでもいい。

そして、そもそもテストがめんどくさくなるような処理を書かない。

 

ああああああ。

あと、そろそろ前よりはコードが少し読めるようになったから、

コード読んで、コード綺麗にしたい。