一个对象,包含了很多属性。
例如一个学生对象,有学号、姓名、性别、试卷列表、这些属性
有个方法是根据指定学生编号和他的试卷列表计算出他的成绩总分
这个方法的参数可以有两种设计方式
版本1:
        public int getTotal(int no,List<Test> tests){}
版本2:
        public int getTotal(Student stu){}
版本1需求需要多少属性就设置了多少参数,如果需求有变,需要把性别跟年龄考虑进行,那么参数就一下子增多两个了。还不能保证以后需求再改变。
版本2直接把学生对象传递进去了,那么虽然把问题变得简单了,但是方法只需两个参数,把整个对象都传递进去,会不会影响性能还是增加了内存开销?
在实际开发过程中,你们会怎么设计这个方法的参数的呢?以前我是不会考虑这样的问题,能实现功能就好,版本1版本2都有用,现在为了程序效率有些东西还是注意点好。

解决方案 »

  1.   

    个人感觉应该这样:
    信息系统业务逻辑上肯定是这样:工作人员输入学生的学号,然后系统返回学生的总成绩。因此,对外的接口肯定是:public int getTotal(int no){}这样需要Student提供试卷列表的get方法,这个应该是有的。作为一个bean,应该至少提供属性的set get方法吧,因此个人感觉不会造成代码更改。这样做,你版本1,2的顾虑都会没有。不管年龄,性别需不需要考虑,我们只需要读取相应属性就行。版本2的顾虑显然也没了。能力有限,just personal suggestion. 
    thx
      

  2.   

    首先一句话——你选择了java,你就放弃了速度。
    所以编程的时候你不必去考虑速度了,java本来就是解释的,所以不用管版本一版本二的速度差异。第二句话——现在的技术,完全不在乎这点差异。
    举个例子,你想用util里面的某个类,我们往往是这么导入:import java.util.*;也就是说把整个util包都导入。没关系的,完全看不出多少差异。第三句话——以后的编程语言的发展,是朝着让程序员更轻松的方向发展。
    所以不用考虑那些太多,实现功能就可以。