私のキャリアの中で、私はいくつかの異なるデザイン、レイヤーの操作方法を見DAO
ましたService
。Controller
似ているが違いが少ない2つについてお聞きしたいのですが。最初の設計では、レイヤー間に目に見えるバリアが作成されます。コントローラーは常にサービスを使用し、サービスのみを使用します。サービスは他のサービスまたはを使用できますDAO
。コントローラはDAO
直接使用することはできません。この設計は明確ですが、私にとって大きな欠点があります。常に、のメソッドごとにインサービスのメソッドを作成する必要がありますDAO
。しかし、多くの場合、メソッドはsメソッドとその他のものService
のみを呼び出します。DAO
例:UserDao
class UserDao {
public List<User> findByName(String name) { ... }
public List<User> findByLastName(String name) { ... }
public List<User> findOlderThan(int age) { ... }
......
}
上記のすべてのメソッドは、によって使用されControllers
ます。私たちの場合、私たちは何をすべきですか?で同様のメソッドを作成しますUserService
:
class UserService {
public List<User> findByName(String name) { return userDao.findByName(name); }
public List<User> findByLastName(String name) { return userDao.findByLastName(name); }
public List<User> findOlderThan(int age) { return userDao.findOlderThan(age); }
......
}
私にとって、これは読み取り専用メソッドの追加の不要なレイヤーです。
2番目の設計では、コントローラーでDAOを直接使用できるため、これに問題はありません。この設計にはルールがあります。「データストア」からデータを取得する場合DAO
は任意のレイヤーで使用でき、「データストア」に変更を加える場合はサービスメソッドを使用する必要があります。
皆さん、これらのデザインについてどう思いますか?どちらが良いですか?プロジェクトでどちらを使用する必要があり、どちらを忘れる必要がありますか?この分野でのあなたの経験を教えていただけますか?