クラス階層がどのようにあるべきかについてのいくつかのガイドを読んだ後、私は階層化アーキテクチャにかなり慣れていません+春+休止状態-
私はこの構造を思いつきました:
public interface GenericDAO {
public <T> T getItemById(long id, Class<T> c);
public <T> int save(T... objectsToSave);
public <T> int saveOrUpdate(T... objectsToSave);
public <T> int delete(T... objectsToDelete);
.
.
}
現在、他のすべての daos impl は、基本的なメソッドを使用するために、このジェネリック dao をプライベート フィールドとして使用しています。
@Repository
public class UserDAOImpl implements UserDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteUser(User u) {
return dao.delete(u);
}
.
.
.
}
私のサービスは次のようなものです:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional(readOnly = false)
public int deleteUser(User u) {
return userDao.deleteUser(u);
}
.
.
.
}
プロジェクトで UserDaoImpl 、 CarDaoImpl 、 XDaoImpl が必要な理由がわかりません。すべての XDaoImpls が同じに見えるため、非常に冗長に見えます。
@Repository
public class UserDAOImpl implements UserDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteUser(User u) {
return dao.delete(u);
}
.
.
.
}
@Repository
public class CarDAOImpl implements CarDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteCar(Car c) {
return dao.delete(c);
}
.
.
.
}
@Repository
public class XDAOImpl implements XDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteX(X c) {
return dao.delete(c);
}
.
.
.
}
XDaoImpl を作成できず、代わりに GenericDaoImpl を使用して、多くのクラス作成を節約できましたか?
deleteUserCar(User u) のような複雑なアクションが必要な場合は、サービスにロジックを実装するだけです。
UserService {
public void deleteUserCar(User u) {
Car c = u.getCar();
CarService cs.deleteCar(c);
}
}
何か不足していますか?XDaoImpl の代わりに GenericDaoImpl のみを使用すると後悔する例を教えてください。
ありがとう