Java 使DAO层独立于服务层

Java 使DAO层独立于服务层,java,database,oop,design-patterns,dao,Java,Database,Oop,Design Patterns,Dao,我如何使DAO层独立于服务层,以便当Db模式发生变化时,我可以在DAO层处理它 编辑:我正在使用Struts 2 JVM框架。 我开发了UI端,然后在我意识到Db中缺少一些东西之后。所以我必须在Db表中添加一些字段。并执行一些规范化任务。它会影响服务层,因为我的模式类会因为Db模式的改变而改变。所以,是否有任何最佳实践或设计模式,以便我可以独立管理我的DAO层和服务层 class PersonService { PersonDao personDao = new PersonDaoOra

我如何使DAO层独立于服务层,以便当Db模式发生变化时,我可以在DAO层处理它

编辑:我正在使用Struts 2 JVM框架。 我开发了UI端,然后在我意识到Db中缺少一些东西之后。所以我必须在Db表中添加一些字段。并执行一些规范化任务。它会影响服务层,因为我的模式类会因为Db模式的改变而改变。所以,是否有任何最佳实践或设计模式,以便我可以独立管理我的DAO层和服务层

class PersonService
{
   PersonDao  personDao = new PersonDaoOracleImpl();
   public void addPerson(Person person)
   {
     personDao.add(person);
   }
}

class PersonDaoOracleImpl implemets PersonDao{
    public void add(Person)
    {
       //db dependent code here 
    }
}

class Person{
   private String name;
   private String age;
   //getters and setters
}

interface PersonDao{
public void add(Person person);
}
假设您从Oracle迁移到mysql,创建了一个
PersonDaoMysqlImpl
,我更喜欢将它自动连接(使用DependencyInjection)到服务类,这样您就不需要接触java类。另一方面,你必须改变

 PersonDao  personDao = new PersonDaoOracleImpl();  
服务类中的行到

 PersonDao  personDao = new PersonDaoMysqlImpl();  

对于这个问题,有很多可能的答案,有框架,没有框架等等。请分享您迄今为止的尝试,以便给出适合您案例的答案。从您的服务和DAO中添加一个实体到db的方法就足够了。好的ans。但是当我从数据库表中删除字段年龄并添加一些其他字段(如性别)时,address..etc当只更新Person域类时,不需要接触除控制器或主类之外的任何其他类,在主类中填充Person对象并传递给服务方法。