下記の様な構成でとりあえずモックを作ってみることにする。
Soil --> グローバルコントローラ
Service --> サービスコントローラ
Context --> コンテキスト(文脈)は何でもあり。
Soilは複数のアクションを持つわけだけど、そのアクションを特定する方法が今回の課題。RailsだとRoutes.rbに相当する部分。
やはり、WebApplicationだからincoming request,output responseという概念は
代わり無いので、何かしらのリクエストをキーにするしか方法が無い。
今回、面倒なのは、
というところ。
複数のアクションの関連性を定義する為に、地図が必要になるわけだ。
Soilが何もかもしる必要は無いので、イメージとしてはSoilは地図を持って
指定のサービスをつまみに行くイメージ。
呼び出し口は下のようになるのかな?
class Soil{
public void dispatch(HttpServletRequest req){
String param = req.getParameter('???');
String serviceName = ServiceMap.find(param);
Service srv = (Service) Class.forName(serviceName).newInstance();
if("DONE" == service.getStatus()){
next();
}else if("PROGRESS" == service.getStatus()){
current();
}else if("BACK" == service.getStatus(){
back();
}else{
//error
}
}
}
この中のここをどのようにしていくか?String param = req.getParameter('???');
String serviceName = ServiceMap.find(param);
これが問題だ。リクエストを後段に渡すことで、サービスのインスタンスを作るのが役割だから。
これは仕様が無いんだろうな。まだそこをどうラップするとかは考えてないけど。。。
リクエストが必要だとすれば、判定すべきは最初のリクエストだけなのか?
最初のクラス名さえ分かってしまえば、その後どのようにしていくのかは
自ずと決まる。それを定義するのがServiceMapの役割だから。
となると、もう少しコードの書き方も変わって来るのか?
うーん、少し苦しくなってきた。考えがまとまったら、続きを書くことにしよう。