实际项目使用Rop所发现的不足

stamen 2012-05-17
以下内容来自于jeast,我觉得很好,把它单独列出来回复:

最近在项目中使用了Rop框架,效果非常好,特别对服务异常体系规范、同时支持XML及JSON格式、安全的拦截机制等,大大提高了开发效率!但也发现在一些不足的地方:

1. 对输出格式绑定太死,虽然在大多数的应用中,输出XML、JSON格式足够用了。但不能限制用户选择其它输出格式,如输出图片、EXCEL等,至少要提供一个输出格式的扩展机制。像Jersey框架在这方面做得就比较好,任何格式都可以输出。

2. 对REST的服务接口入参及返回参数做了限制,目前只能是RopRequest、RopResponse子类。这样做虽然简单,但大大制约其灵活性。使用起来感觉特别不便。实际的应用过程中,接口的入参是多种多样的,有可能是一个参数、二两参数、N个参数,难道我每一种情况都要写一个类吗?

3. 对REST的URL中,只能使用xxx?method=xxx ,如果method可以让使用者修改,那就更好了。

4. 对输出XML格式时,需要对RopResponse的子类手工编写JAXB相关注解,对于输出复杂的XML格式时,这个过程非常繁锁,且容易出错。 如果能够封装一个根据XSD结构自动生成JAVA类,那使用起来就方便多。目前JAXB就有提供这样的小工具,如果能在这个小工具上做一个批处理工具,那就更完美了。

5. 缺少一个对服务容器的管理,如支持动态发布的服务、撤销服务、获取服务的注册表机制等。这对于一些要求扩展性比较高的应用来讲非常重要。在使用ROP框架中,也认真研究了这个框架,觉得提供这样的功能,应该是比较容易实现,不知作者是否有其它方面的考虑???


6. 如果能对输出格式接口RopResponseMarshaller进行重构,并对RopResponseMarshaller实现类进行动态注入,这样使用者就可以编写个性化的输出格式转换器。

7. 希望能够提供一个获取HttpServletRequest方法。虽然一般情况下,很少使用到HttpServletRequest。但有些特殊的场景,如果需要用,但又无法获取,这时真是会让人抓狂!!!
stamen 2012-05-17
引用
1. 对输出格式绑定太死,虽然在大多数的应用中,输出XML、JSON格式足够用了。但不能限制用户选择其它输出格式,如输出图片、EXCEL等,至少要提供一个输出格式的扩展机制。像Jersey框架在这方面做得就比较好,任何格式都可以输出。


-->这个需求不合理,Web Service不应该返回图片,Excel等格式,一定是以XML或JSON等文本报文格式交互。但是,可以这样做变通:
   如需要图片时,通过Web Service请求一张图片,这时返回的响应报文是一个指示这个图片的url,如:
  <imgResponse>
     <imageUrls>
        <imageUrl url="http://www.yyy.com/1111.jpg"/>   
     </imageUrls>
   </imgResponse>

  然后客户端再根据这个url请求到图片(一般由一个单独的图片服务处理图片请求),这样保证了web service报文的纯洁性。
  这也是淘宝等大型网站的做法。

引用
2. 对REST的服务接口入参及返回参数做了限制,目前只能是RopRequest、RopResponse子类。这样做虽然简单,但大大制约其灵活性。使用起来感觉特别不便。实际的应用过程中,接口的入参是多种多样的,有可能是一个参数、二两参数、N个参数,难道我每一种情况都要写一个类吗?


   这个建议很好!目前确实不太灵活,不如Spring MVC的接口那样灵活,但是用个好处可以让开发很简单。
   我后续会参考Spring MVC的实现,使服务方法的签名更加灵活些!
  

引用
3. 对REST的URL中,只能使用xxx?method=xxx ,如果method可以让使用者修改,那就更好了。


   好的,后面我为Rop提供一个配置文件,使这些固化的东西都可以配置!

引用
4. 对输出XML格式时,需要对RopResponse的子类手工编写JAXB相关注解,对于输出复杂的XML格式时,这个过程非常繁锁,且容易出错。 如果能够封装一个根据XSD结构自动生成JAVA类,那使用起来就方便多。目前JAXB就有提供这样的小工具,如果能在这个小工具上做一个批处理工具,那就更完美了。


  这个相当于是辅助工具,目前还没有时间去开发,参与Rop项目的开发者可以帮忙提供


引用
5. 缺少一个对服务容器的管理,如支持动态发布的服务、撤销服务、获取服务的注册表机制等。这对于一些要求扩展性比较高的应用来讲非常重要。在使用ROP框架中,也认真研究了这个框架,觉得提供这样的功能,应该是比较容易实现,不知作者是否有其它方面的考虑???


  这个是容器级的功能,需要在Rop之上开发出服务体系,这个目录还没有计划。
  也请Jersey具体再谈谈需求和思路。

引用
6. 如果能对输出格式接口RopResponseMarshaller进行重构,并对RopResponseMarshaller实现类进行动态注入,这样使用者就可以编写个性化的输出格式转换器。

  好的,我后面会通过统一的Rop配置文件,让这些接口的实现者都可以配置(或称注入),哈。

引用
7. 希望能够提供一个获取HttpServletRequest方法。虽然一般情况下,很少使用到HttpServletRequest。但有些特殊的场景,如果需要用,但又无法获取,这时真是会让人抓狂!!!


   好的,这个我马上改一下!
Global site tag (gtag.js) - Google Analytics