アーキテクチャメモ 私は今はこんな感じかなぁ。 (^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