サービス層オブジェクトは DAO 層オブジェクトを "サービス" できますか? それとも、これは適切に階層化されたアーキテクチャの整合性に違反していますか?
例えば、
class MyService {
}
class MyDao {
private MyService myService;
}
サービス層オブジェクトは DAO 層オブジェクトを "サービス" できますか? それとも、これは適切に階層化されたアーキテクチャの整合性に違反していますか?
例えば、
class MyService {
}
class MyDao {
private MyService myService;
}
私はそれをしません。DAO はデータベースを扱うべきです。サービスは、ユース ケースを満たすために他のサービスと DAO を管理します。サービスが DAO やその他の必要なサービスを呼び出すようにしたほうがよいでしょう。
この配置では、循環依存のリスクがあります。
DAO オブジェクトを使用してサービスを構築する標準的な方法は、サービスに DAO をカプセル化させることです。
public class Service {
private DAO dao;
}
public class DAO {}
これは、たとえば、サービスが複数の DAO オブジェクトをカプセル化できるようにしたり、サービスのトランザクション境界などの追加ロジックを提供したりするのに役立ちます。