开发规范

XML

  1. 书写规范:非生成的SQL一律使用大写,缩进、对齐必须工整
  2. 注释规范
<!-- 描述说明 作者 时间-->

例:

<!-- 后台考试管理分页查询,带排序规则 zhaoj 2016年12月6日 17:17:57-->
    <select id="relationQueryByPageWithSort" resultMap="result">
        SELECT 
            EXAM_SCOPE.*
        FROM 
            EXAM_SCOPE
        <where>
            <include refid="ExamScopeQueryInBo" />
        </where>
    </select>

通用Java规范

  1. 编码前,务必熟读Java代码规范,规范文档地址详见SVN http://218.17.157.105:8055/repos/vcomponent/Document/0.项目管理/0.项目规范/JAVA规范.doc;
  2. 编码前,务必导入eclipse注释模板,模版地址详见SVN http://218.17.157.105:8055/repos/vcomponent/Document/0.项目管理/0.项目规范/codetemplates.xml;
  3. 接口和实现类均要写上注释;
  4. Java中对属性、方法、类进行修改时,请加上自己的名字,如:
    你(userName)修改前的代码如下:
 /**
 * 切面方法体环绕
 * 
 * @date 2016年11月25日 上午10:11:33
 * @author zhaoj
 * @since V1.0.3
 * @return
 */
 private Object aroundAdvice() {
          return null;
 }

修改后应加入注释@author userName

 /**
 * 切面方法体环绕
 * 
 * @date 2016年11月25日 上午10:11:33
 * @author zhaoj
 * @author userName
 * @since V1.0.3
 * @return
 */
 private Object aroundAdvice() {
     return null;
 }

Bo(Bean Object)

  1. 字段名规范
  • 不随意增加基础类型字段,如:ExamUser对象有属性名为id的属性,则切勿再添加属性名为idsid1id2idNotEqual一类的重复属性,一律使用id属性;
  • 在扩展对象类型字段时,新增的业务实体属性名与业务实体名一致,避免重复定义,且只能做声明,不能初始化,如:
public class ExamUser extends AbstractExamUser{
        private ExamCourse examCourse;
        private ExamPolicy examPolicy;
        private ExamType examType;
        private ExamStudentAnswer examStudentAnswer;
        //下面的初始化是极其不推荐的,切勿使用
        //private ExamStudentAnswer examStudentAnswer = new ExamStudentAnswer ();
}
  1. Bo需重写toString()方法;

Dao(Data Access Object)

  1. BaseDao实现类中已经封装了非常丰富的表操作,在写新的接口之前,要先思考一个问题:在不影响功能和性能的情况下,使用生成的代码能否满足需求;

Service

  1. 统一通过getDao()的方式调用Dao层代码,如:
public class ExamScopeServiceImpl extends BizBaseServiceImpl<ExamScope> implements ExamScopeService{
        @Resource
        private ExamQuestionDao examQuestionDao;

        public List<ExamScope> studentQuery(ExamScope bo) {
                return getDao().studentQuery(bo);
        }

        public Integer queryCount(ExamScope bo) {
                return examQuestionDao.queryCount(bo);
        }
}
  1. 涉及到事务的操作,务必方法上加上@Transactional注解;
  2. Service层尽量只注入Dao,不推荐注入Service,避免形成闭回环,如:
public class AService{
        //不推荐
        @Resource
        private BService bService ;
}
public class BService{
        //不推荐
        @Resource
        private AService aService ;
}
  1. BaseService实现类中已经封装了非常丰富的表操作,在写新的接口之前,要先思考一个问题:在不影响功能和性能的情况下,使用生成的代码能否满足需求?

Controller

  1. 统一通过getService()的方式调用Service层代码,如:
public class ExamUserController extends BizBaseController<ExamUser> {
        @Override
        public ModelAndView showMain(){
                Paginator<ExamUser> paginator = new Paginator<ExamUser>();
                List<ExamUser> list = getService().queryByPageWithSort(paginator, new SortData(Direction.ASC,properties,"EXAM_USER.ID"));
        
                ModelAndView mv = getModelAndView(getClassRequestMapping() + "/showMain");
                mv.addObject("resultList", list)
                mv.addObject("paginator",paginator)
                mv.addObject("sortData",sortData);
                return mv;
        }
}
  1. Controller层尽量只注入Service,不推荐注入Dao
  2. @RequestMapping中的value值与函数名需保持一致
public class ExamUserController extends BizBaseController<ExamUser> {
        @RequestMapping(value = "/showMain")
        public ModelAndView showMain(){
                Paginator<ExamUser> paginator = new Paginator<ExamUser>();
                List<ExamUser> list = getService().queryByPageWithSort(paginator, new SortData(Direction.ASC,properties,"EXAM_USER.ID"));
        
                ModelAndView mv = getModelAndView(getClassRequestMapping() + "/showMain");
                mv.addObject("resultList", list)
                mv.addObject("paginator",paginator)
                mv.addObject("sortData",sortData);
                return mv;
        }
}
  1. 后台验证的问题必须引起注意:入参合法性判断,此处的合法性包括:输入规则合法(例如正则表达式后台验证)及数据冲突合法性(例如双浏览器操作)
  2. 确定如下函数名均不能满足你,再去定义一个新的函数:
//主页面
showMain()
//带条件的显示主页面,主要用于“返回”按钮
showMain(T, Paginator<T>, SortData)
//搜索、分页查询
list(T, Paginator<T>, SortData)
//添加页面
add()
//编辑
edit(Integer)
//保存
save(T)
//单个删除
delete(Integer)
//查看
show(Integer)
//批量删除
batchDelete(Integer[])
//批量更新
batchUpdate(Integer[], T)
//批量插入
batchInsert(T[])
  1. 统一调用getModelAndView(String modelName)方法构建视图,如:
getModelAndView(String)
  1. 统一调用addObject(String attributeName, Object attributeValue)方法组装模版数据,如:
ModelAndView mv = getModelAndView(getClassRequestMapping() + "/showMain");
mv.addObject("resultList", list);
  1. 推荐使用如下方式获取Bean
//推荐使用
ExamUser examUser1 = AppContext..getBean(ExamUser.class);
//不推荐使用
//ExamUser examUser2 = (ExamUser)AppContext.getBean("examUser");
  1. 统一使用如下方式获取当前用户
//Controller、Service、Dao层通用
AppContext.getCurrentUserId();
  1. 在合适的场景下,使用queryCount(T bo)去代替query(T bo)
  2. Servive注入时,加@Resource注解即可,无需@Resource(name="vslObjectServiceImpl")Service注入Dao同理:
@Controller
@RequestMapping("/admin/vslObject")
public class VslObjectController extends BizBaseController<VslObject> {
          //@Resource(name="vslObjectServiceImpl")
          @Resource
          VslObjectService service;
}
  1. 每个带有@RequestMapping注解的方法都应加上@LogMark(memo="备注"),用于记录日志;

HTML

  1. 标签必须对齐
  2. 学会用Google浏览器中调整简单样式
  3. Freemarker在页面上的常用操作:
//格式化数字输出
<#setting number_format="#">
//获取枚举国际化propertis文件中键为“Bool.YES”的值
${resourceBundle("Bool.YES")}
//---------------------------------------宏及常用宏的使用---------------------------------------
//引入宏
<#import "/common/tag.htm" as tag>
//截取字符串
<@tag.substr content="${item.examQuestion.content!}
//根据枚举生成select下拉框
<@enum.select id="bo.result" type="com.vnetoo.common.enums.Bool" header="true" default=""/>
//根据枚举生成radio单选框
<@enum.radio id="bo.type" type="com.vnetoo.common.enums.Bool" default="${bo.type}"/>
//根据枚举生成checkbox复选框
<@enum.checkbox id="bo.type" type="com.vnetoo.common.enums.Bool" default="${bo.type}"/>

JS

  1. 学会用console.log()
  2. 学会用Google浏览器 F12中打断点,可以利用console.log()来打断点
  3. 学会在Google浏览器 F12查看变量
  4. 学会用Google浏览器 改样式
  5. 选择器要重点熟悉
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 文档版本说明v1.0 基础版本v1.1 补充规范,增加规范等级 一、代码流程规范 (一) java代码处理 【强制...
    tonyZj阅读 958评论 0 2
  • https://jeroenmols.com/blog/2016/03/07/resourcenaming/ 书写...
    A_si阅读 499评论 2 4
  • 1 基本规范 1.1 命名规则 需遵守java基本命名规范,以下列举需要着重注意的地方和我们的一些规则。 l 统一...
    吴瑶的博客阅读 2,575评论 0 2
  • 请看完结版:Android开发规范(完结版)
    Blankj阅读 8,599评论 25 115
  • 旅记:得空,整理一下照片,只是手机随手一拍,即是美片。 片。去过已很美,分享只为
    幽幽芝兰阅读 150评论 0 0