そういえば・・・こんなことあったなぁという話
ふらっと思い出したので、書いてみる。
前に、ちょっとだけコンサルしてた会社で、新しいプロジェクトが立ち上がるということで、
プロジェクト概要を聞き、フレームワークの選定(もしくは開発)+サンプル作成、概要の解説等々をやることになった。
クラサバ型というよりは、スタンドアローンで動けば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!
やっぱ、ちゃんと概念理解してないとこういうことになるんだなーと実感した。