私はJSF、Spring、Mybatisを使ったwebappを持っています。これらのフレームワークは、それぞれコントローラー、ビジネス、dao レイヤーで使用されます。私の DAO レイヤーには、CRUD 操作のメソッドがあります。さて、私のコントローラーレイヤーでは、挿入操作を使用する必要があります。このために、次の構成を使用できます。
コントローラー層
アノテーション付きの JSF を使用しています
@ManagedBean
public class Controller{
@ManagedProperty("#{business}")
private Business business;
public void insert(){
business.insert();
}
}
ビジネス層
注釈付きのSpringを使用しています
public interface Business{
public void insert();
}
@Service("business")
public class BusinessImpl implements Business{
@Autowired
private DaoMapper mapper;
@Override
@Transactional
public void insert(){
mapper.insert();
}
}
DAO レイヤー
Mybatis (mybatis-spring ライブラリ) を使用しています
public interface DaoMapper{
public void insert();
}
ただし、この場合、私のビジネス層は DAO 層を呼び出すだけで、他の操作を認識しないため、次の構成を使用すると思います。
コントローラー層
@ManagedBean
public class Controller{
@ManagedProperty("#{daoMapper}")
private DaoMapper mapper;
public void insert(){
mapper.insert();
}
}
DAO レイヤー
public interface DaoMapper{
@Transactional
public void insert();
}
すでにテスト済みで正常に動作していますが、悪い習慣が発生しているかどうかを知りたいです
[編集]
実際には DaoMapper インターフェイスは、XML ファイル ( Look ) に関連付けられた MyBatis クラス マッパーです。これがDAOクラスになるかどうかはわかりません。私は実際にそれをPersisence LayerまたはMapper Layerと呼ぶべきだと思います
出典: http://www.infoq.com/articles/ddd-in-practice
ご覧のように。プレゼンテーション レイヤー、私の場合はコントローラー レイヤー (別の名前付けを間違えたと思います)、DTO を直接呼び出します (または、それは私が理解していることです)。
コントローラーまたはプレゼンテーション レイヤー (名前は何でも) で挿入または更新操作を使用する必要がある場合、マッパー クラスから直接呼び出すか、このクラス呼び出しからマッパー クラスへの新たなビジネス クラスを作成する必要があります。
今。可能であれば、この構成を使用してください。疑問があります。
私のビジネスクラスのメソッドで、操作を挿入するために呼び出す必要があるとします。これは次のようになります。
@Service("business")
public class BusinessImpl implements Business{
@Autowired
private DaoMapper mapper;
@Override
@Transactional
public void insert(){
mapper.insert();
}
}
ただし、DaoMapper インターフェースからのメソッド挿入には、すでに@Transactionalアノテーションが付けられています。メソッドの挿入は@Transactionalアノテーションによって 2 回影響を受けます。これは問題になりませんか?