问题描述
分层开发的时候,层间调用,是传字段值,还是传对象?比如说查询订单方法1service.search_order1(Stringp1,Stringp2,Stringp3,Stringp4)service.search_order2(Stringp1,Stringp2,Stringp3)方法2servcice.serch_order1(OrderOrder1);servcice.serch_order2(OrderOrder2);第二种代码会简化很多,但是从方法参数列表里无法看出业务逻辑,还得从方法名和源代码理解。请问大家,哪种方式更适合使用
解决方案
解决方案二:
我觉得还是传对象方便些!如果参数比较少,也不会有什么变化的,也可以直接传字段!
解决方案三:
我个人从面向对象的理解应该是第二种,第二种更符合面向对象的思想。分层的思想是便于开发维护。一般一个方法传递参数的个数是有限制的(好的编码规范),我记得华为的编码要求是5个参数为上线的。再说,java的三大特性中有封装,第二种更符合封装性,你有个四个参数,感觉不乱吗???养成一个良好的编码规范很重要,java的三大特性也不是说说的。欢迎拍砖
解决方案四:
如果传一个对象,这个对象有10个属性,浏览代码的时候,怎么快速知道这个方法的功能,是按对象的2个属性还是4个对象查询。
解决方案五:
传对象,没说的
解决方案六:
如果你后期再也不会加字段的话,第一种就行的。但是,你无法保证,因为需求在变,系统也在变。那么,这时候,你天天改方法加参数很明显不合适。如果我这个方法在其它地方也引用了,其它地方也要跟着改参数。这种系统很明显有问题啊。(要对修改关闭)但是对象做参数就不会有这种问题。对象里面加个属性,哪个方法想用直接get调用就行了。而且,对于“但是从方法参数列表里无法看出业务逻辑”这个问题。写方法要遵循几个原则:1.方法名一定要简单易懂2.方法的职责最好单一化(一个方法只实现一个功能)假如遵循了这样的原则的话,上面的问题也就不是问题了。
解决方案七:
解决方案八:
to楼上。多个条件,比如10个条件的筛选,无法做到职责单一啊。search(p1,p2,p3,p4,p5,p6)searrch(p),这个search,怎么命名?难道是searchByp1p2p2p4p5p6??
解决方案九:
解决方案十:
方法1肯定不可取。方法2可以。但是要注意一点:Order最好不要用具体类,因为用具体类的话Order和Service就紧耦合了。比如,系统中存在多种类型的订单时就会比较麻烦。如果是我来做的话,我会用第二种方法,但是会把Order定义为接口。
解决方案十一:
解决方案十二:
个人认为针对数据量大的系统适合分层,数据量小的可以不分层吧
解决方案十三:
oo编程思想上来说,传对象是比较合理的。但是传值和传对象有个关键区别,传值的话是值的拷背,操作方法里的值不改变原来的值;传对象是对象引用拷背,操作方法里的对象会改变原来的对象。参数不多具相对固定的前提下,建议传值。
解决方案十四:
传对象还有一点好处,方便扩展方法,如果现在方法只用到4个属性,将来又增加了怎么办?传对象就没有这后顾之忧。
解决方案十五:
如果解决传对象,造成的无法分辨业务逻辑的问题。
解决方案:
引用12楼momoyssy的回复:
oo编程思想上来说,传对象是比较合理的。但是传值和传对象有个关键区别,传值的话是值的拷背,操作方法里的值不改变原来的值;传对象是对象引用拷背,操作方法里的对象会改变原来的对象。参数不多具相对固定的前提下,建议传值。
nice//////
解决方案:
引用3楼tuoluofo的回复:
如果传一个对象,这个对象有10个属性,浏览代码的时候,怎么快速知道这个方法的功能,是按对象的2个属性还是4个对象查询。
你方法名字是干嘛的,你所有的方法是method1,method2这样命名的??
解决方案:
举个例子,java.util.List(不考虑泛型的话)N个方法的参数都是Object,楼主又是怎么区分的呢?
解决方案:
对象,字符串的话缺点很多。1,字符串如若后期增加,维护很难。2,字符串的容易写错。而且,现在你传几个字符串和对象来说,网络压力应该没什么的。
解决方案:
只针对你这种情况,应该是这样调用serviceStringsql=order.asSql();service.searchOrder(sql);