每一条订单都与一个用户关联   
    
  在设计数据库时,我们都是这样设计的:   
  建一个订单表,建一个用户表   
  订单表里有一个字段userID,引用用户表(外键)   
    
  那么请问把二者转成JavaBean时,如何设计好?   
    
  方案一:   
          Order中设一个成员userID(int型),代表用户编号,   
          当需要得到用户的名字时,先order.getUserID()   再用这个ID   
          另外再调用另外的方法(需要再次连接数据库),再取得名字   
    
  方案二:   
          Order中设一个成员User(User   Bean型),要取得用户的姓名时,直接   
          order.getUser().getName()   
    
  请问哪种方案好?   

解决方案 »

  1.   

    JAVABEAN设计原则是在物理上去掉所有数据表之间的关系,具体关系在代码中体现
      

  2.   

    订单是一个javaBean 用户表是一个javaBean
    他们都是独立的一个对象而已,关键看你如何实现业务逻辑,你的sql查询语句怎么实现
    javaBean只是负责存储相关信息,是一个独立的对象!java(面向对象)
      

  3.   

    JAVABEAN就就值对象,比如我有一张学生表我回这样建立JAVABEAN
    class Student{
     private String name;
     private String number; String getName(){
       return this.name;
     }
     String setName(String name){
       this.name=name;
     }
     
     //number属性也这样写
    }
      

  4.   

    定单表
    class number{
    private Student userID;--主外键关系
    private String .....;
    ....
    }
      

  5.   

    我觉得是第二种好,更面向对象如果是第一种
    我想你的意思是在order中写一个类似于:getUserName(int userID)这样的方法,
    那么order这个类就要去"管"怎么取到user的属性
    而这不应该由order来负责的第二种,就是user的属性由user的方法来取
    order.getUser(),返回的就是一个User对象A,我就可以按照使用User对象一样来使用A
    要取User的name就A.getName(),至于怎么取,order不用管,只需要调user类的getName()方法.区别就在于,第一种如果getUserName的实现方式变了,
    那么就要到所有用到user的类中(order了,company了)去修改getUserName(int userID)方法.
    (当然你可以把这个方法写到一个publicFunction类中,但是这样还是不够面向对象,"职责"也不够清楚)第二种,使用user的类们,不用管user的name啊,id啊,sex啊什么的属性是怎么get到的
    这些类们只管取到user对象的引用然后调用get方法就可以了--------------
    就像你老板让你办事
    给我拿报表来,给我拿数据来
    老板只管叫:拿来
    你只要给
    老板不管你怎么弄出来的总不可能老板要你拿来
    你告诉老板先mysql -h -uXXX -pXXX
    然后 use database
    然后 selct XXXX然后在很温馨的告诉老板:"
    如果觉得每次都写很麻烦
    你可以写在一个文件中
    每次要看运行一下就可以了" ^_^老板不开了你
      

  6.   

    另外:
    使用getOrders(User u)
    而不要使用getOrders(int userID)
    也就是
    User user=getUser(userID);
    List orders=getorders(user);
      

  7.   

    可惜PetShop4.0刚好就是用了第一种