そういえば・・・こんなことあったなぁという話

ふらっと思い出したので、書いてみる。


前に、ちょっとだけコンサルしてた会社で、新しいプロジェクトが立ち上がるということで、
プロジェクト概要を聞き、フレームワークの選定(もしくは開発)+サンプル作成、概要の解説等々をやることになった。
クラサバ型というよりは、スタンドアローンで動けばOKのアプリだったので、
とりあえずはC#+SQLServer(無料のやつ)でOK。という結論になった
最終的には紆余曲折でVBになった

まぁ、そっちでも実質かわらんのだけど。


VB(.NET)はふつーにフォーム作るとかならずスパケッティー現象がおこるので、
それだけは回避したかった。


最終的な結論としては、
DBアクセスの抽象化+処理クラス(Logicクラス)をFormとは別で用意し、Formから呼び出すかたちにすればまぁOKだろうという結論に至った。


最初は、DBアクセス(O/Rマッパー)を自前で作ろうと思ったんだけど、
S2Dao.NETがあるじゃん。ということで、それを採用。
S2Containerからコンポーネントを取ってくる処理がなかなか面倒だったので、(たしか)
そのあたりをWrapしてうまいことDIするのを作った。


結局最終的には、(たしか。(もううるおぼえ))

/**
*本当はVB.NETなんだけど、構文忘れたからJavaで書く
*/

// Logic
class SampleLogic {
public EmployeeDao edao;
public DeptDao ddao;
public void process() {
//処理
}
}
class SampleForm extends ProjectForm {
public SampleLogic slogic;
}

という具合にしておけば、Formをnewした時点で、自動的にSampleLogicとSampleLogic内のpublicなDaoはDIされるような仕様にした。(これはChuraのぱくりw)


私は、2週に1回程度顔を出すだけで良かったので、とりあえず、DIの概念とO/Rの概念とこのフレームワークの簡単な使い方とFormにはこういうことを書いて、Logicに処理を書いてやるんだよ。
ということを説明し、あとはプロジェクト担当に任せた。


しかし、publicフィールドがまずった。
てっきり、理解してるもんだと思ってたら、publicだからいいと思って。
とFormに主いっきし処理を書いてた。

slogic.edao.select〜〜〜〜


oops!
やっぱ、ちゃんと概念理解してないとこういうことになるんだなーと実感した。