ouchxp 2010-09-01 23:52
浏览 858
已采纳

Java方法的参数和返回类型统一为Map是否合理?

开发一个Web应用. 主管要求 所有业务逻辑的Java方法参数和返回类型必须统一为Map类型.
理由是将来扩展时接口不用修改.而且有多返回值的方法也好处理
但是这样一来.
返回一个String都要写成
Map resultMap = doXXXXX(paramMap);
String result = (String)resultMap.get("resultStr");
返回一个VO
Map resultMap = doXXXXX(paramMap);
XXXXVO resultVO = (XXXXVO)resultMap.get("resultVO");

感觉很麻烦.

请问,这种情况要怎么处理? 是否有更好的方案? 这种方式是否有什么弊端.
希望大家从软件工程的角度解答一下!

  • 写回答

7条回答 默认 最新

  • m_m1m2m3m4m5 2010-09-02 10:20
    关注

    标准过程化设计:
    [code="java"]resultVo = new V0();
    int isOk = doXXXXX(paramMap,resultVo);
    if(isOk>0){
    .....
    }[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • uastation 2010-09-02 00:23
    关注

    这样全部用Map来存取的话,程序的映射多了可能会造成结果的成混乱.最好就是把最需要按键值存取的用Map存取,其它的按集合类的优缺点进行使用..

    评论
  • oyj7454103 2010-09-02 08:39
    关注

    1.0 个人认为
    [quote]将来扩展时接口不用修改.而且有多返回值的方法也好处理[/quote]
    这样是能带来一定的好处! 很统一 以后添加什么其他应用或者 改造也方便!
    虽然 一般情况下是不建议这么做的! 但是尝试下 没啥不可以的! 或者说你们系统的 业务就这这样!需要处理很多的 key——value 这样的数据! 那采取 map 这种方式 是 差强人意的! 

    软件工程 了解的不多!没办法仔细给你说清楚!
     总之: 采取适合你们业务的方法可能才是最合理的!

    评论
  • iteye_3052 2010-09-02 09:00
    关注

    同上:只有适合的, 没有最好的

    评论
  • iteye_15587 2010-09-02 09:35
    关注

    个人认为所有的入参和出参用Map不太合适,不够透明,开发人员比较容易混乱,尤其是map中的key的命名还需要指定命名规范。
    我建议如果入参出参想统一的话,可以针对业务需要指定两个接口(一个为入参接口,一个为出参接口),在具体业务中对接口进行实现,或定义特有的属性。业务传递时使用接口作为入参和出参。

    评论
  • iteye_12540 2010-09-02 10:12
    关注

    表面上看好像很灵活,但是实际上却是玩过了头,让人无所适从了。返回值是对函数的一种约束,现在没了约束,反而造成了更大的约束。静态语言编译期类型错误验证的优势完全丧失。
    还有,即使日后发生变化,接口本身不用变。但是所有的调用都需要变。而且因为没有静态检查,你连这个接口功能变化引发多少问题都不知道。
    你们如果非要这么干。那么必须做好大量的测试以保证修改后不会产生问题。
    我觉得你们还不如直接用动态脚本语言编写程序呢。

    评论
  • AA@陈长泽@.com 2010-09-02 14:27
    关注

    好处:将返回类型统一,以后扩展容易
    弊端:失去了严谨的代码规范,容易造成日后的“地雷”,出现bug难找。

    即便要统一接口,我也不会选择map,就像走路走了一半一样。我一般会建立自己的结构,里面可以包含map,也可以包含其他的信息。比如建立一个ResultNode基类,里面加上类型检查,exception等处理。比map好多了。

    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 计算机网络技术基础问题
  • ¥15 设置mac系统只能访问指定网站
  • ¥15 西门子博途 s7 1200控制三台步进电机
  • ¥15 基于非参数的方向距离函数求污染物影子价格(有偿)
  • ¥15 vue+element 生成table
  • ¥15 实验 4 FIFO 算法和 LRU 算法-C 程序实现
  • ¥30 电脑画面同步投屏,通过同wifi的方式投屏方法,接收投屏端不需要安装第三方软件,
  • ¥15 有偿拼接大疆精灵4RGB影像
  • ¥15 Arduino实现音频混响
  • ¥15 cuda.jit加速报错