网站建设资讯

NEWS

网站建设资讯

java公共代码抽取 Java公共代码抽取出来

如何写好业务代码

烟囱式开发模式:

作为一家“创意+整合+营销”的成都网站建设机构,我们在业内良好的客户口碑。创新互联提供从前期的网站品牌分析策划、网站设计、网站设计、成都网站制作、创意表现、网页制作、系统开发以及后续网站营销运营等一系列服务,帮助企业打造创新的互联网品牌经营模式与有效的网络营销方法,创造更大的价值。

上述开发模式有几个弊端:

这样开发模式的优势:

业务代码集中在业务层 service,专注于业务对象 bo 的封装以及业务对象给展示层 vo的转换,封装复用逻辑,可以减少大量重复的代码,后期维护便捷的多。

数据库改动只设计dao层,快速响应各个业务。

业务代码如何拒绝 all in one

以上的controller代码最突出的缺点就枯搭是代码完谨败物全无法复用,完全没有使用到面向对象封装,集成,多态的特性。业务开发中,一般都是权限校验,参数校验,业务判断,业务对象转换数据库操作。

我的做法是业务抽象,把公共代码进行抽取,通过配置的形式的方式调用,使业务代码可以以可插拔的方式选择指定的权限校验,参数校验。简单来说,就是善用AOP面向切面编程的思想,示例如下:

使用aop对权限校验逻辑进行抽取,能够通过注解的方式指定哪些controller需要进行权限校验。对用户进行数据过滤时,使用controller的拦截器获取该用户拥有的各类权限,并把用户数据保存在上下文threadloal中,并且通过配置对指定url进行拦截。在业务层,从上下文拿到用户权限数据做各类数据业务过滤,通过aop实现各类拦截业务的指定调用。

使用java validtion对通用的字段,例如电话号码,身份证,进行扩展,详细可祥液以参考,如何使用validation校验参数?,在项目中其他类似校验进行复用。

业务判断:使用设计模式对不同类型的业务开发进行封装,集成,多态扩展;这样在后期的扩展中可以基于开发封闭原则,针对新的业务扩展子类即可。

业务开发过程中,依照阿里巴巴研发规范的要求,存在DO(数据库表结构一致的对象),BO(业务对象),DTO(数据传输对象),VO(显示层对象),Query(查询对象)。

使用MapStruct,可以灵活的控制的不同属性值之间的转换规格,比org.springframework.beans.BeanUtils.copyProperties()方法更加灵活。

例如,公共字段,生成日期,创建人,修改时间,修改人使用插件的形式进行封装,在mybatis-plus中使用MetaObjectHandler,在执行sql之前完成统一字段值的填充。

项目如何做好代码注释?

在业务中特别是状态的值,在对外发布api的vo对象中,加上状态枚举值的注释,并且使用@link 注解,可以直接连接到枚举类,让开发者一目了然。

java 什么是把方法抽取出来

就是重构-抽取方法,简单来说就是把部分相关代码抽取出来成为一个方法,原来代码的位置改由调用该方法来代替。

如果你使用如Eclipse这种IDE,你可以通过选择要抽取的代码,鼠标右键选择重构-抽取方法,按照步骤给方法命名,确认,IDE就会帮你自动地把代码抽取出来形成一个私有的方法,原来的位置就会被调用这个方法的代码代替。

虽然操作步骤很简单,也就是把代码换个位置写,但实际隐含着程序设计的合理性和细粒度的考虑:

很明显你的代码里有超长的方法,一般方法会控制在10行以内,超过10行就可以认为有代码是可以提取出来成为公用方法的。超长的方法常常意味着高耦合、低内聚,重用性差和该类的职责太多。举个例子:

你的Servlet方法可能干了很多响应用户的操作,但有可能Servlet的另一个方法需要做其中一部分相同的操作,或者另外一个Servlet(一个Web应用有多个Servlet很正常)也需要同样的操作,更甚是一个本地的控制台应用程序(Servlet是属于会话喊衡层的,桌面应用程序一般不需要会话层)也需孝渗迅要做同样巧此操作。这时候你会发现写在你的Servlet的代码只能拷贝到另一个程序中,或者压根就得重写,效率很低而且这样你的代码里会有很多重复代码...以后改一下就得改3个地方,不可维护的代码就是这样来的。同时你的超长方法也是难以理解的。

如何把握好程序的合理性需要很多的经验和设计技巧,这里就不提及了。有兴趣可以向着面向对象程序设计这个方向钻研。

利用java代码抽取CFG能生成什么工具,具有什么功能

这个就要借助hibernate tools跟xdoclet来完成了段轮;

首先你要在你的java代码里应用xdoclet标签,例如

Java code

private String name;

/**

* @hibernate.property column = "name"肢燃判 length = "50"

*/

public String getName() {

return this.name;

}

public void setName(String name) {

this.name = name;

}

其中,写到javadoc上的@hibernate.property column = "name" length = "50"

就是xdoclet标签,它需要xdoclet程序来处理,这里历改就需要用到hibernate tools。

具体做的话一般情况是建一个ant脚本来完成,例如:

XML code

target name="hibernate-xdoclet" depends="init, init-xdoclet_hibernate"

description="Generate mapping documents"

echo+---------------------------------------------------+/echo

echo| |/echo

echo| R U N N I N G H I B E R N A T E D O C L E T |/echo

echo| |/echo

echo+---------------------------------------------------+/echo

delete

fileset dir="${hibernate.cfg.xml.dir}" includes="hibernate.cfg.xml" /

/delete

echo message="hibernate.cfg.xml at ${hibernate.cfg.xml.dir}"/echo

sleep seconds="1"/

hibernatedoclet

destdir="${hibernate.cfg.xml.dir}"

excludedtags="@version,@author,@todo,@see"

addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"

force="false"

verbose="true"

fileset dir="${src.dir}"

include name="com/**/model/**/*.java"/

/fileset

hibernatecfg

version="3.0"

destDir="${hibernate.cfg.xml.dir}"

dialect="org.hibernate.dialect.Oracle9Dialect"

driver="oracle.jdbc.driver.OracleDriver"

jdbcUrl="jdbc:oracle:thin:@localhost:1521:RESDL"

userName="test"

password="123"

showSql="true"

schema="true"

validateXML="true"

/

hibernate version="3.0"/

/hibernatedoclet

/target

上面的代码是生成hbm跟cfg文件的,下面再介绍如何从java类到数据库:

XML code

target name="hibernate-schema" depends="init, init-hibernate-schema"

description="Generate DB schema from the O/R mapping files"

echo+---------------------------------------------------+/echo

echo| |/echo

echo| R U N N I N G D B S C H E M A |/echo

echo| |/echo

echo+---------------------------------------------------+/echo

echo message="mysql.sql at etc/hbm2doc"/echo

sleep seconds="1"/

hibernatetool destdir="etc/hbm2doc"

configuration propertyFile="${src.dir}/hibernate.properties"

fileset dir="${hibernate.cfg.xml.dir}"

include name="com/**/model/**/*.hbm.xml"/

/fileset

/configuration

hbm2ddl drop="true"

outputfilename="mysql.sql"/

hbm2doc/

/hibernatetool

/target

Java随机抽取人名完整代码

public class test {

public static void main(String[] args) {

//定义人名数组

String [] name = {"张三","李四","王五","八神庵","不知火舞","大蛇"银改,"袭胡景天","唐雪见","李逍遥","赵灵儿"};

//随机生成锋禅判数组下标、

int num = (int)(Math.random() * 1000);

//对生成的随机数进行判断,如果小于数组下标,就跳出循环

while (numname.length-1) {

if (num=name.length-1) {

break;

}

num = (int)(Math.random() * 1000);

}

//将数组下标设置成随机数,就可以实现人名的随机抽取

System.out.println(“被抽到的同学是:”+name[num]);

}

}


分享文章:java公共代码抽取 Java公共代码抽取出来
本文地址:http://cdweb.net/article/ddpgpsi.html