请教Reusability和Flexibility(重用性和灵活性)的区别,冲突。

happyegg 2004-10-02 12:26:39
我在一篇文章中说道:A framework must achieve a balance between reusability and flexibility.我觉得重用和灵活好像并不冲突,应该两个都能一起提高,为什么需要平衡两者,这说明两者之间有冲突。谁能举些例子说明提高了重用降低灵活,提高了灵活降低重用?谢谢
...全文
308 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
PageYi 2004-11-05
  • 打赏
  • 举报
回复
MARK
zhangjyr 2004-10-08
  • 打赏
  • 举报
回复
其实你可以这么看framework的可重用性意味着framework开发者在你的程序上套上了框框,你必须去遵循这个框架,而灵活性要求这个framework可以被扩展,也就是开发者要考虑为你的程序扩展framework留下足够的余地,这就要求某些方面不能规定得太死。这两者就构成了一对矛盾:限制与扩展。这样大概可以解释你的疑惑了吧。
我再把阎博士jsp关于文件的例子做个说明好了,jsp2.0以前无法返回文件就是framework给用户程序员制定的限制(考虑的不周到就成bug了^-^),而jsp2.0放开了这一点以换取返回文件这一灵活性。
jiganghao 2004-10-07
  • 打赏
  • 举报
回复
ps. a good framework should and can achieve both.
jiganghao 2004-10-07
  • 打赏
  • 举报
回复
reusability is for known, flexibility is for unknown.
reusability is for now, flexibility is for future.
reusability is for applying framework, flexibility is for extending framework.

chenyun2000 2004-10-07
  • 打赏
  • 举报
回复
看看《Java和模式》一书把,有较详细的说明
happyegg 2004-10-06
  • 打赏
  • 举报
回复
多谢 jeffyan77的热心说明,文中详细的叙述了重用性和灵活性在框架中的重要性。可对于achieve balance between reusability and flexibility并没有太多的描述。从你的文章中,得出的结论似乎是reuse和flexible可以同时做得很好,而并没有矛盾,不需要平衡。

不过,我并不知道这句话的权威性有多高,我只是从我们公司的training document上看到,但从网上找不到两者为什么需要平衡的理由。有没有哪位高手说说这是否是正确的?如果是正确的,请给出一个冲突的例子,谢谢
jeffyan77 2004-10-06
  • 打赏
  • 举报
回复
显然,这里谈论的是framework。所谓reuse,也指的是framework的reuse。离开framework,reuse和flexibility不一定是针锋相对的。

对于framework来说,第一重要的是reuse。这其实就是决定开发某种framework的最初理由。framework不能带来reuse,就根本没有存在的必要。

所有的framework都是遵循好莱坞原则设计的,否则就不叫framework。所谓好莱坞原则,说的是You don't call us - we will call you. 意思就是在一个framework下的代码,都是被动地被framework调用,而不是相反。通过这种方式,大量重复的代码就可以隐藏在framework里面,需要特别设计的代码以预定接口的方式交给开发人员,写好后由framework调用。

譬如JSP就是一个framework。你写的JSP脚本会被JSP引擎编译成servlet的一部分。这种servlet都带有大量重复的代码,是JSP程序员不需要考虑的,由framework负责。

framework不难写,但是写好却很难。譬如你写一个abstract class交给别人继承,这就是一个framework。而framework写得好不好,一个重要的标准就是flexibility。譬如JSP2.0以前的版本,不能允许你返还一个binary文件。如果你要动态地传送一个binary文件,只好写servlet。那么为什么在JSP里面不能实现这样的功能呢?如果你打开一个从JSP编译而成的servlet就知道了。在编译的时候,JSP引擎自己在生成的代码中添上了一句话,这句话就是限定返还的流是文本的。

在JSP2.0中,这个限制被取消了。

这就是一个灵活性的例子。对于framework来说,reuse是第一位的,flexibility是第二位的。两者之间平衡掌握,要有丰富经验才行。

happyegg 2004-10-05
  • 打赏
  • 举报
回复
up again
朋友别哭 2004-10-05
  • 打赏
  • 举报
回复
帮顶混分
happyegg 2004-10-04
  • 打赏
  • 举报
回复
up
happyegg 2004-10-03
  • 打赏
  • 举报
回复
哪比如说某一模块或者整个架构的代码重用性很好,你在这个项目中写的东西可以在其他项目中使用,那么可不可以说:这个模块或者架构设计得很灵活,你可以随便把它放在这个项目或者那个项目中,而只需很少很少的改动?
难道重用性一定就是修改某一模块会牵扯到其他模块吗?如果一个系统通过xml配置来驱动,那么模块可以切得很小,各个小模块可以很灵活的配置,重用在不同的项目上。从这点上说不是重用和灵活可以一起提高的吗?
showerXP 2004-10-02
  • 打赏
  • 举报
回复
灵活就是“船小好掉头”。修改这一模块的时候不会影响到其他的模块。这里和Reusability的冲突就非常明显了。
nwpulipeng 2004-10-02
  • 打赏
  • 举报
回复
帮顶混分

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧