开发规范

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. 选择器要重点熟悉
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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

友情链接更多精彩内容