アーキテクチャメモ 私は今はこんな感じかなぁ。 (^o^)
これでサイト再構築するかな。
Seasar + S2Dao + S2Struts + Mayaa + S2Dao + AjaxTags + js(prototype-1.4.0.js + scriptaculous.js)
サンプルコードもできたら公開します。
Dxoってのがなんなのか実はわかってないので使い方違うかも??
Action → ActionForm.getParam() → Service → Logic → Dao
→ DtoDao
→ Logic → ・・・
Action ← Dxo(ActionForm←Dto) ← Service ← LogicDxo(Dto←Entity) ← Logic ← (Entity) ← Dao (主に更新系)
Dto ← Logic ← (Dto) ← DtoDao (主に検索系)
<命名規則>
Action -> 画面名Action.execute()
Dxo -> 画面名Dxo.execute()
Service -> 業務名Service.画面名[XXXX]execute(); (その業務・Action(画面)に対するやって欲しいこと)
Logic -> XxxService.yyy(); (xxxをyyyする単位で作成)
LogicDxo -> LogicDxo.EntityToDto(); (いらないかもな。)
Dao -> テーブル名Dao.getYyy (Logicのyyyを使用:主に更新用に1テーブルに対してPKを取得する検索)
DtoDao -> Dto名Dao.getYyy (Logicのyyyを使用:主に検索系)
※ Serviceは共有しない。
Logicは共有。
<役割>
Action
→画面からの値の取得と値のチェック。 サービス呼び出しを行い結果をDxoに渡す。 画面遷移先コントロール
Dxo
→サービスから来た結果を画面表示用のformに詰め詰めする。
Service
→呼び出し元のアクションに依存した業務ロジックのコントロール。ロジッククラスを条件によって呼ぶ。
Logic
→xxxをyyyするのyyyするだけの業務ロジック共有コンポーネント
LogicDxo
→EntityからDtoに変換かける。 いる??
Dao
→指定されたパラメータでただ単純に検索するなど主に更新系になる。 パラメータにDtoは使わない。
DtoDao
→joinなどがある検索に使用。 更新はしない。 パラメータにDtoは使わない。
Action.execute(ActionForm frm) {
XXXDto dto = service.execute(frm.getParam());
XXXDxo.DtoToForm(dto, frm);
return frm;
}
Dxo.DtoToForm(XXXDto dto, ActionForm frm) {
frm.setXXXX(dto.getXXXX());
if (dto.getYYYY().equals("a")) {
frm.setYYfg("1");
} else {
frm.setYYfg("2");
}
}
Service.execute(String param, String param2) {
if (param.equals("yyy")) {
dto = logicYyy.execute(param2);
} else {
dto = logicZzz.execute(param2);
}
return dto;
}
Logic.execute(String param) {
Entity entity = Dao.getYYYY(param);
entity.setGGGG("aaa");
Dao.update(entity);
Dto dto = null;
if (param.equals("aaa")) {
dto = DtoDao.getJJJJ(param);
} else {
Entity jEntity = Dao.getJJJJ(param);
dto = LogicDxo.EntityToDto(jEntity); // これいらないかも?
}
return dto;
}
Dao(S2Dao)
public String getEmployee_ARGS = "empno";
public Employee getEmployee(Integer empno);
DtoDao(S2Dao)
public String searchEmployeeDtoList_ARGS = "empno";
public EmployeeDto[] searchEmployeeDtoList(Integer dto);
DtoDao_searchEmployeeDtoList.sql