日期:2014-05-18  浏览次数:20813 次

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


------解决方案--------------------
JAVABEAN设计原则是在物理上去掉所有数据表之间的关系,具体关系在代码中体现
------解决方案--------------------
订单是一个javaBean 用户表是一个javaBean
他们都是独立的一个对象而已,关键看你如何实现业务逻辑,你的sql查询语句怎么实现
javaBean只是负责存储相关信息,是一个独立的对象!java(面向对象)

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


------解决方案--------------------
我觉得是第二种好,更面向对象

如果是第一种
我想你的意思是在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

然后在很温馨的告诉老板:"
如果觉得每次都写很麻烦
你可以写在一个文件中
每次要看运行一下就可以了" ^_^

老板不开了你
------解决方案--------------------
学习
------解决方案--------------------
可惜PetShop4.0刚好就是用了第一种