[Seasar-user:384] Re: AOP-DAO

B isid.co.jp Yasuo Higa higa
2004年 3月 2日 (火) 20:30:56 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:382] AOP-DAO" において、
   "Masataka Kurihara <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> 栗原です。
> 
>   私はちょっと違う(?)予想をしてました。Core Concern に永続化を
> おかずに、Crosscutting Concern に位置づけて考えて見ます。無理押し
> にケース考えているので、例が業務モデル的にはアレでも無視してくださ
> いね。
> 
前の例では、DAO層しか書かなかったので、分かりづらかったかも。
Core Concernに永続化を置いているわけではないです。

登場人物
hoge.service.MonthlyService(サービスの仕様)
hoge.service.MonthlyServiceImpl(サービスの実装)
hoge.dao.EmployeeDao(DAOの定義)
hoge/dao/EmployeeDao.xml(DAOの実装)
hoge.entity.Employee

public class MonthlyServiceImpl {
  private EmployeeDao employeeDao_;

  public MonthlyServiceImpl(EmployeeDao employeeDao) {
    employeeDao_ = employeeDao;
  }

  public List calcSalary() {
    List empList = employeeDao_.getEmployees();
    for (Iterator it = empList.iterate(); it.hasNext();) {
      後は前と同じ
    }
    return empList;
  }
}

コンポーネントの定義
EmployeeDaoの定義は前と一緒
<component class="hoge.service.MonthlyServiceImpl"/>
//EmployeeDaoはコンテナにより自動バインド

メソッドの引数にAspectを仕掛けて置き換えるのは、
ちょっとトリッキーな感じがします。
サービスがDAOへの参照を持って呼び出すほうが自然な気が(^^;

私の考えでは、モデル(MVCのモデル)をサービス、DAO、Entityにわけ、
クライアントは、サービスとだけお話し、Entityをやり取りする。
サービスは、DAOへの参照を持ち、永続化ロジックはDAOに依頼し、
業務ロジックは自分で処理する。

のような感じがいいのかなぁと思ってます。

aspectタグについては、通常だと<aspect>アドバイス名</aspect>
だけですみます。アドバイスを直接埋め込む場合は、
argタグやpropertyタグと同じように子タグにcomponentタグを
使ったほうが統一がとれてて良いかなと思ってます。

と書いていて、まだ、XMLでの設定機能はリリースしてないことを
思い出しました。

http://d.hatena.ne.jp/higayasuo/20040207#p1
http://d.hatena.ne.jp/higayasuo/20040219#p1
のような感じになり、arg,property,aspectの子タグに
componentタグを埋め込むことができます。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



Seasar-user メーリングリストの案内