swing

別件でswingの相談を受けた。結局「.NETかなぁ」って言われた。swingをかばうつもりはないが、swingをなめるなぁ、ということで、そのとき、今ならこう作りたい、やりたいと整理したことをメモ。機会があれば本格的な続きを実装バリバリで。

まずはview。
view定義をよく、xmlとか外だししているFWをみかけるけど、それはそれでいいけど、個人的にはプライオリティは高くはない、だってVisualEditor, NetBeans楽チンだもん。もちろん独自のコンポーネント組み合わせて使用する場合とか完全にIDEでまかなえるわけじゃないけど。サクサク作れるリズムを大事にしたいなぁと。

あと自由度の高さはswingのよさだけど、ある程度、ソースの統一感は必要だと思っている。
View-ViewControl-ModelはAnnotationとかつかっても守りたいかな。

実装的裏づけはとってないけど、viewのイベントをハンドリングするコントローラは、こんな感じ

@inject
ContentPane contentPane

@inject
SomeComponent compA

@inject
SomeService compA

@inject
SomeBean bean

@eventCatch("add")
@eventFire(method="compA.fireMethod") //<--明示的/@refleshとか
public void someAction 
{

}

で、view<->modelの変換も自動にやりたいかな、JSR295も利用しつつ。

@Model(class="com.sample.SomeBean")
public class SomeComponent extends JPanel{
}

bindingの振る舞いは利用者が自由に差し込めるようにもしないと。
@refleshでview=modelの変換+画面の再表示を隠蔽/自動

initイベント - 画面開いたときなどのinitイベントを起こせる、拾えるようにしたい。

undo/redoも共通化したい、でもFW依存とかにはしないようにする。

Validatorの適用/ルールの検討

画面間の情報の引渡しもDIContainerレベルで細工したいかな。例えばSpring2.0だと、scopeをカスタマイズして独自scopeができるようになったし、Seamではbijectionのアイデア、seasarだとouterを利用してやることになるのかな?要調査

Diaplay-template(ルール外だし?うざい?手間かなぁ)- setFont/Color/Open/Dialog制御

とりあえず、こんなとこかな。SingleThreadPolicyやAWTとの描写アルゴリズムの相違など結構、本格的にやるといろいろあるけど、でも、ちゃんとやると結構おもしろそーだ。