怎样设计可以避免重复的功能开发?

_-Leon-_ 发布于 2015/04/20 15:04
阅读 951
收藏 1

【深度】AI、5G时代下,算力网络与内生安全最全解析!>>>

我现在在开发一个信息平台,大致有三个模块:会员、租赁公司、管理员。

结合我之前开发的项目,我发现一个问题,就是功能的重复性开发。比如:在租赁公司模块中,有一个功能,编辑公司资料,这个功能在管理员后台也有一个。我在开发时,是写了两次的,都是跳转到公司的编辑页面,填写信息,然后提交,后台处理,成功。我总觉得这样不够好,因为如果还有别的模块需要这个功能,那是不是又要再写一次呢?怎样设计才能将这个功能剥离出来,成为一个独立的功能模块,然后不管是哪个模块需要这个功能,就直接调用就行了,求有经验的同僚们给予指点,不胜感激!

以下是问题补充:

@_-Leon-_:比如编辑公司资料的功能,这个功能公司管理后台有,管理员总后台也有。而且都是90%一样的。都是跳转到公司信息的编辑页面,填写信息,然后提交。我写了两次,因为他们的链接入口是不一样的,提交的地址也是不一样的,一个提交给公司的控制器,一个提交给管理员控制器。类似这样的功能不少。我感觉对于公司资料的编辑,应该是一个功能,然后让公司模块和管理员模块调用就行了,只写一份。但是链接又不一样,总觉得哪里设计的不对。要是后面还有模块需要这个功能,就又要拷贝一次网页,在控制器添加处理方法,这样好繁琐。 (2015/04/21 12:31)
加载中
0
_-Leon-_
_-Leon-_

引用来自“英强”的评论

你写了两次什么?

引用来自“_-Leon-_”的评论

比如编辑公司资料的功能,这个功能公司管理后台有,管理员总后台也有。而且都是90%一样的。都是跳转到公司信息的编辑页面,填写信息,然后提交。我写了两次,因为他们的链接入口是不一样的,提交的地址也是不一样的,一个提交给公司的控制器,一个提交给管理员控制器。类似这样的功能不少。我感觉对于公司资料的编辑,应该是一个功能,然后让公司模块和管理员模块调用就行了,只写一份。但是链接又不一样,总觉得哪里设计的不对。要是后面还有模块需要这个功能,就又要拷贝一次网页,在控制器添加处理方法,这样好繁琐。
谢谢您的回答。页面重复是不是避免不了?三个地方需要这个功能,这个页面就要套三次是吗?
_-Leon-_
_-Leon-_
回复 @英强 : 好的,非常感谢
英强
英强
页面重复也是可以在一定程度上避免的。比如说你用jsp,可以使用jsp:include, <%@include %>;velocity,freemarker也有类似的引入标签或者宏定义。灵活使用这些标签,把重复的页面内容提取出来,这样可以最大限度的避免页面内容重复
0
英强
英强
你写了两次什么?
0
JFinal
JFinal
    DRY(Don't repeat yourself) 是写程序最基本的原则之一,所以如果楼主的一个逻辑或者一个业务重复写是需要避免的,通常的解决办法无非是:将重复的代码抽取成可重用的模块,供依赖它的地方进行调用,粒度更大些可以抽取成服务,提供服务接口供调用。
JFinal
JFinal
回复 @_-Leon-_ : 而面也可以重用的,如果是用的 freemarker,可以将重用的页面部分抽取成独立的文件,在用的时候使用 include 包含进来,也可以定义成 macro,在重用的时候还可以传参
_-Leon-_
_-Leon-_
套两次页面是不是避免不了?可以提交到一个Actino,是不是只能到这一步?如果别的模块也需要这个功能,是不是还是要套一次页面?
_-Leon-_
_-Leon-_
比如一个完成的功能,跳转到公司资料编辑页面,填写信息,提交到Action。现在公司模块里面有这个功能,管理员后台也有这个功能。这两个功能的url是不一样的,我的做法是写两次,就是页面也是两次,提交到的Action也是两个,因为验证别的一些相关操作不一样。有没有办法做成一个功能,然后哪个模块需要就调。但是链接问题怎么解决,页面还是要做套两次,好麻烦。
0
中山野鬼
中山野鬼
哈,这个事情是必然发生的。遇到重复后,抽象,然后形成底层逻辑。任何前期的系统规划、设计是不能解决开发中这种重复再抽象的问题。
0
小99
小99
可以单独创建一个项目部署到一个地方,这个项目就是单独抽离公共业务的项目,然后把公共的功能service放到这个项目里面,其他项目调用!以后再有公共的直接维护这个项目
0
ihuotui
ihuotui
正常吖,两个都应该有的功能,但是不应该写两次,在一个逻辑处理就好了。
0
Brin想写程序
Brin想写程序

从业务出发,要复用的代码,首先在业务上是可以复用的。。

0
_-Leon-_
_-Leon-_

引用来自“英强”的评论

你写了两次什么?
比如编辑公司资料的功能,这个功能公司管理后台有,管理员总后台也有。而且都是90%一样的。都是跳转到公司信息的编辑页面,填写信息,然后提交。我写了两次,因为他们的链接入口是不一样的,提交的地址也是不一样的,一个提交给公司的控制器,一个提交给管理员控制器。类似这样的功能不少。我感觉对于公司资料的编辑,应该是一个功能,然后让公司模块和管理员模块调用就行了,只写一份。但是链接又不一样,总觉得哪里设计的不对。要是后面还有模块需要这个功能,就又要拷贝一次网页,在控制器添加处理方法,这样好繁琐。
英强
英强
action写两次正常,但是业务处理这块就是可重用的。重用主要就是重用业务代码这块。其实上面很多朋友都已经说到了,大家的观点基本都是一致的
0
_-Leon-_
_-Leon-_
谢谢大家的建议,我再思考一下,重新设计一下!
0
epiclight
epiclight

页面估计每个模块都要各自,主要是后台提供服务,尽量复用,dubbo,http json 方式,等等

返回顶部
顶部