本帖最后由 java2000_net 于 2008-08-05 15:40:06 编辑

解决方案 »

  1.   

    JSP--->VO--->DAO--->BO--->DB
      

  2.   

    BO是business object?VO是指什么?
      

  3.   

    vo---> value object 值对象
      

  4.   

    ServletA---调用接口IModelA中的方法--->ModelA工厂类FacModelA实例化ModelA,并以接口IModelA的形式返回给ServletA
    ModelA---调用接口IDaoA中的方法--->DaoA工厂类FacDaoA实例化DaoA,并以接口IDaoA的形式返回给ModelA如果照这个过程,是不是每一个Servlet,需要对应1个Model类,一个DAO类,2个接口,2个工厂类,这样下去会不会太冗余,
    工厂多了应该写一个抽象工厂包装所有的工厂还是应该传配置文件的KEY,让工厂通过KEY取配置文件里的类并实例化?
      

  5.   

    Controller调用Model的方法和Model调用DAO方法,一般是不是都要通过接口的形式啊?
    如果想实现分层开发的话,需要实现,比如说表示成,业务层和持久层并行开发,大家不相互影响,这样是需要进行接口话开发的
    就是Controller调用的是一个接口的方法,而Model实现了这个接口,同样DAO也是实现了一个接口,让Model去调用,
    产生的Model和DAO的实例可以由一个工厂类去生成,一般是不是一个工厂只对应一个Model/DAO啊? 
    可以设计成一共有两个工厂,一个是产生所有model的,一个是产生所有dao的
    如果Model/DAO没有重用,是不是每一个Model/DAO都要对应一个接口啊?
    当然要实现,每一个层都是通过接口说话
    怎么保证Model/里加了方法,而接口又不动呢?难道一定要事先都设计好?想不全怎么办,需求变化怎么办?
    model里加了方法,model里的每一个方法基本上都对应一个业务,增加了方法说明业务发生变化,那么业务接口肯定也的变化。函数内部的变动不影响接口,这个你肯定也知道。
    那么有多个Model/DAO,会不会有很多的工厂类和接口呢?
    接口肯定会有多个,但是工厂可以只有两个
    除了工厂模式, 一般J2EE项目中,最常用的还有哪些设计模式,都分别用在什么时候呢?
    单例模式,工厂模式,适配器,迭代器等等
      

  6.   

    谢谢Landor2004 的回复,
    你说的:"可以设计成一共有两个工厂,一个是产生所有model的,一个是产生所有dao的" ,这个是怎么实现?
    这两个工厂是制造所有的具体model实例还是制造生成每个model的工厂的实例呢?问题1:
    是不是每一个Servlet,至少需要对应1个Model类,这个Model类又至少对应一个DAO类,2个接口,2个工厂类,如果Model比较多会不会比较冗余, 
    工厂多了应该写一个抽象工厂包装所有的工厂还是应该传配置文件的KEY,让工厂通过KEY取配置文件里的类并实例化?问题2:
    DTO  , VO , POJO,  JavaBean之间的区别是什么?问题3:
    是不是每一张数据库中的数据表都要对应一个DTO?问题4:
    在DAO层和Model层的异常捕抓应该怎么处理,是一直抛到Servlet里根据异常显示不同的错误页吗?问题5:
    如果只写一个工厂,然后实例化工厂的时候传入要实例的Model/DAO类名(可通过配置文件读入),这样是不是就不够解偶合了?然后有谁能先指点下,我理解的那种顺序和方法,有什么不对的地方吗?另外加里150分,最后详细回答问题的请到下面地方拿分
    http://topic.csdn.net/u/20080806/13/e9550d20-e27b-4dc9-8302-d64de60f5100.html
    http://topic.csdn.net/u/20080819/12/370de809-4e9a-4bf5-a344-5c8739e21fc7.html
      

  7.   

    补充一个问题6:
    DAO里如果不做逻辑操作,相当于只做简单的查询,更新操作,
    那么在Model里的一个方法,就可能对多表进行插入或更新,相当于调多个DAO类里的方法,如果其中一个方法异常了,应该要事务回滚,
    那么回滚控制是不是也应该在Model层里?
      

  8.   

    举个例子,如果自己做这种分层开发的话,先不说异常,我觉得简单点的可以这样,没实践过,因为都是用框架的
    可以做两个接口,User为例
    //业务工厂
    public class BusinessFactory{
    public static UserBO getUserBO(){
    UserDAO userDAO = DAOFactory.getUserDAO();
    return new UserBOImpl(userDAO);//每次都new一个新的BO对象
    } public static OtherBO getOtherBO(){
    OtherDAO otherDAO = DAOFactory.getOtherDAO();
    return new OtherBOImpl(otherDAO);
    }
    ......
    }
    //DAO工厂
    public class DAOFactory{
    public static UserDAO getUserDAO(){
    return new UserDAOImpl();//得到实际的UserDAOImpl
    }
    public static OtherDAO getOtherDAO(){
    return new OtherDAOImpl();//得到实际的其他的OtherDAOImpl
    }
    }
    //其中一个业务类
    public class UserBOImpl implements UserBO{
    private UserDAO userDAO;        
    public UserBOImpl(UserDAO userDAO){
    this.userDAO = userDAO;
    }
    public void addUser(User user){
    userDAO.addUser(user);
    }
    //其他业务方法
    ......
     }
    //其中一个DAO类
    public class UserDAOImpl implements UserDAO{
    public void addUser(User user){
    //实际的数据库增加方法
    }
    //其他持久层方法
    ......
    }
    以上例子代码的UserBO和OtherBO是业务接口,UserDAO和OtherDAO是持久层接口,以上是两个简单的工厂,可以这么来调用,以user为例,UserServiceTest是单元测试,可以相当于表示层
    public class UserServiceTest {
    private UserBO userBO;
    ......
    public void testAddUser()
    {
    User user = new User();
    user.set......
    userBO = BusinessFactory.getUserBO();
    userBO.addUser(user);
    }
    }以上是个例子,没有考虑异常处理,我个人认为这么实现分层!
      

  9.   

    Controller调用Model的方法和Model调用DAO方法,一般是不是都要通过接口的形式啊? 一般来说是的,因为一般都是写好接口,然后再去实现,
    这样是一种好的习惯!
      

  10.   

    怎么保证Model/里加了方法,而接口又不动呢?难道一定要事先都设计好?想不全怎么办,需求变化怎么办? 一班都是先写好,实在不行的话,你可以向接口里面添加方法嘛!
      

  11.   

    那么有多个Model/DAO,会不会有很多的工厂类和接口呢? 是啊,当然会有多个工厂啊,
    你如果学了Spring的话就不需要工厂了啊,
    去学Spring 吧,那里会有很好的解决方法的!第三个贴子了,记得给分哦!
      

  12.   

    楼主加油,你马上就要体会到包结构的设计原理及使用Spring等框架的原因了
      

  13.   

    问题1:
    是不是每一个Servlet,至少需要对应1个Model类,这个Model类又至少对应一个DAO类,2个接口,2个工厂类,如果Model比较多会不会比较冗余,
    工厂多了应该写一个抽象工厂包装所有的工厂还是应该传配置文件的KEY,让工厂通过KEY取配置文件里的类并实例化?
    其实Servlet和model类还有DAO类没什么必然的联系,可能一个servlet只是一个动作,也就是说增删改查可能是4个动作,也就是4个servlet,而这四个动作都是在一个业务类里定义,而某个业务可能有多个实体完成,就可能会调用到多个DAO
    问题2:
    DTO  , VO , POJO,  JavaBean之间的区别是什么?
    DTO:相当于要传给要传到客户端的对象,客户端不一定需要所有的实体对象,需要什么字段就在DTO里面写什么
    VO:页面上要显示的对象
    POJO:老的java对象,就是不包含任何耦合的,脱离容器的外部的对象
    Java Bean:一个特殊的java类,符合如下条件 1、有无参数的构造函数2、每个属性都要有setter,getter方法3、要实现Serializable接口
    问题3:
    是不是每一张数据库中的数据表都要对应一个DTO?
    DTO是数据传输对象:一张表可能对应多个dto,多个表也可能对应一个dto,看你要往客户端穿什么
    问题4:
    在DAO层和Model层的异常捕抓应该怎么处理,是一直抛到Servlet里根据异常显示不同的错误页吗?
    一般的都是一直往上抛,然后自己写一个异常处理类,来处理所有异常
    问题5:
    如果只写一个工厂,然后实例化工厂的时候传入要实例的Model/DAO类名(可通过配置文件读入),这样是不是就不够解偶合了? 
    我觉得其实只要你的每个层面的代码用接口说话,看不到具体的实现就行了