ビジネスロジック層とDAO層の書き方
現在、Webアプリを作成しているのですがビジネスロジックとDAOをどういうように
書けばいいのか困っています。
例えばAテーブルから取得した値を
BテーブルとCテーブルにインサート(途中でしくじったらロールバック)。
現在、ビジネスロジック層では下記のような調子で書いています。
しかし、ビジネスロジック層でDAOを直接newするのは依存性の観点から
よろしくないということなのですがどのように改善すればよろしいでしょうか。
また、皆様はどのような実装を行っていますでしょうか。
try {
DBConnect conn = getConnection();
A aDao = new A(conn);
String a = aDao.getData();
B bDao = new B(conn);
bDao.insert(a);
C cDao = new C(conn);
cDao.insert(a);
conn.commit();
} catch(Exception e) {
conn.rollback();
} finally {
conn.close();
}
Webを見ていたらDAOパターンを示した下記サイトがありました。
http://www.nulab.co.jp/designPatterns/designPatterns3/designPatterns3-4.html
上記サイトののコードに習うならば上記のビジネスロジックのコードは
下記のようになると思います。(各々のDAOの中でDBのConnection、Closeを行っている)
下記の場合、ビジネスロジックとDAOは疎結合になったかもしれませんが
cDao.insert()でしくじった場合、それより前の処理はロールバックできない
のではないかと思います。
また、一番最初に書いた記述方法の方が1つのコネクションを各々のDAOで使い回し
最後に正常終了した段階でコミットするというわかりやすさがあるので
一番最初に挙げたコードを改良できないかと思っています。
ItemDao aDao = DaoFactory.createADao(); //Aオブジェクト取得
String a = aDao.getData();
ItemDao bDao = DaoFactory.createBDao(); //Bオブジェクト取得
bDao.insert(a);
ItemDao cDao = DaoFactory.createCDao(); //Cオブジェクト取得
cDao.insert(a);