maple: Action の setter/getter を何とかしたい
したいったらしたい。
ともかくコードをサボりたいのである。
あまりやりすぎるとそこが穴になるので注意が必要だけど、最小限「Action に何を渡すのか (入力)」「Action から何が出て行くのか (出力)」の2点を明示的にしていればクリアだと思われる。
出力 (getter) に関しては簡単。一度書かせてもらった。
各 Action の設定ファイルに「何の値をどういう名前で出力するか」という形でリスト記述するのもありだと思うけど、出力の際に値をこねくりまわす場合がどうしてもでてきてしまうため、設定ファイルでそれを許容するような内容を書こうとすると非常に煩雑になる。mojavi でいうところの ActionView クラス のようなことができるのがやはりいいのだけれども、それを設定ファイルでやるならば view クラスの前にそういうフィルタを準備しなければならなくなったり view クラスそのものを根本から変えないといけない。それならば Action 内にこねくりまわすような専用関数を 1 つ準備してみようというのが上記リンクの内容。get get get ... という形でひたすら書く必要はなくなる。加えて見やすい。
入力に関しては、かなり悩んでいるというか面倒なので現在放置中。
出力と同じように set 専用関数がやはり簡単ではある。入力時にも、例えば request の値を Action に渡すだけでなく同時に session へ入れるという処理が考えられるため、この形での実装が一つの回答になると思う。
別のやり方としては設定ファイルへの記述。今のところ Action に渡す処理が含まれているので、わざわざ setter を準備しなくても Action 内 public property (これは現在も処理内で使われている) と設定ファイル内で値を明示記述することで $action->value 処理で一気に代入。こういう処理を嫌う人もいるだろうけど、public にしているのだからやっちゃって構わないでしょというのが私の考え。
ついでに session へぶち込む記述も許してしまう。つーことでこんな感じ。
[Action]
logic = ref:Logic ; これは既存でもする良くある書き方
name = ; ブランクなら Request "name" を Action の name へ代入
mail = param:email ; Request "email" を Action の mail へ代入
tel = 0123456789 ; 0123456789 を Action の tel へ代入
zip = sess:zip ; Request "zip" を Action の zip へ代入しつつ
; Session へも zip で代入
pet = param:yourPet,sess:pet ; あわせ技。変態コードも許容する :)
こんだけ出来れば大体のシチュエーションは許容できるはず!
で、これを coding しようとすると激しく面倒なので、前記のとおり放置だったりする。
さすがに変態すぎるので 3.0.1 リクエストには投げてない。
トラックバック(0)
このブログ記事を参照しているブログ一覧: maple: Action の setter/getter を何とかしたい
このブログ記事に対するトラックバックURL: http://hatotech.org/mt-admin/mt-tb.cgi/521

コメントする