`
cheng.xinwei
  • 浏览: 79670 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【代码规范】我所理解的代码规范

    博客分类:
  • JAVA
阅读更多
    本人是一名从事java开发2年的小菜,常用MVC框架为spring,在这里只是想谈谈我所理解的代码结构。若说的不对请指出。

    我们在写程序的过程中,普通的代码层次都是会区分成controller,service,dao这三层结构,这里主要想聊一下我是怎么样理解这三个层次的,以及他们分别应该处理什么样的事情,担任什么样的角色。

    此处说明一点,这些规范只是本人在coding过程中自己体会总结出来了,可能现在不全,可能现在又不足的地方,还希望各位指出。

    首先简述一下controller和dao,controller这个C在众多的MVC框架中被广泛使用,controller的翻译过来就是控制器,控制器在整个代码结构中主要担当请求转发,访问权限处理,参数处理等,和页面渲染所需要的值。

    而dao则是负责对于数据库的基本操作。这里就不多做介绍了。

    然后主要说一下service,个人觉得service层,是非常强大的一层,也是在三层结构中最重要的一层。绝大部分业务逻辑,数据库的事物,以及数据权限,可能都会在这一层去实现。那要怎么样才能写出一个优秀的service呢?我们来一起探讨一下。 service翻译过来就是"服务",那作为一个好的服务,是让客户端可以更加便捷,方便的使用他。我们先看如下例子:

    1.注意service层对外的方法
   
    //基本插入操作
    public void insert(Object obj){
        dao.insert(obj);
    } 
    //提供给客户端使用
    public void insert(String content , String contentType){
       Object obj = new Object();
       obj.setContent(content);
       obj.setContentType(contentType);
       dao.insert(obj);
    }

    这两段代码的区别是参数的不同,对于客户端来说,如果提供的方法参数是一个object,客户端并不知道需要放入多少个值,但是如果吧参数完整的列出来,客户端可以很明显的知道,当我执行insert的时候我需要给多少个值,可能有人会说,我一张表字段特别多,但是当第一次插入的时候,其实字段并不会很多,可能很多值在插入的时候是不需要的,有一些值是默认的,这种完全可以再我们service中就封装好,使用者无需知道。

    2.在方法中尽量使用枚举
   
    public Object getOrderByType(OrderType orderType){...}
    

   
    public Object getOrderByType(Integer orderType){}
    

    我们在数据库中,很多时候会以某个数值代表某个含义,比如1代表是已付款的订单,2代表未付款,等等。当你提供的service的时候,如果希望客户端使用方法的时候传递的是0,1,2的话其实是很不友好的,因为在客户端使用的时候,我并不用知道0,1,2分别代表什么,可能还需要去看数据字典。但是如果提供的是枚举的话,客户端可以很鲜明的知道,这个方法需要什么。
    其次,因为规范了入口,service的方法体中得到了保障。如果外部传入的Integer因为某种原因传入的数值并不是方法体内想要的内容,还需要去处理参数,但是这个活不应该是service干的。但是使用枚举可以很好的避免这个问题。

    3.入口需要统一
    在我们的service中,我们可能会有很多种insert,很多种update,这是正常的,因为我们需要处理不同的业务,可能会有很多种方法的重载。但是这里需要提到一点。所有的对于数据的操作,建议都调用service中最基础的insert,如:
   
    //基本插入操作
    public void insert(Object obj){...}
    //插入信息和详情表
    public void insertInfoAndDetail(Object obj){
        this.insert(obj);
        otherService.insert(...);
    }
    

    如上的例子,在insertInfoAndDetail方法中,其实可以调用dao的insert但是我们还是期望可以统一入口,全部调用service中的insert。

    4.方法名的注意
    service的提供方法中,最重要的就是方法名。可能有人说,我注释写的很好,很全。但是一般的coder首先第一反应是看方法名,比如一个get方法中执行了一个update,但是在注释上写了“此方法是更新操作”,我相信10个人中8个人会认为他是查询。记得以前在<<如何编写优雅的代码>>中提到,方法名就是最好的注释。这点无容置疑。
    这里还要提一点,方法名要尽量的具体化,如果不是通用的业务,不要使用通用的方法名,我曾今看到如下代码
   
    //查询XXX类型商品的图片
    property List<Picture> getPictureByGoodsId(Integer goodsId){
        Map<String,Object> params = new HashMap<>();
        params.put("goodsId","goodsId");
        params.put("pictureType",PictureType.XXX);
    }
    

    此方法仔细一看,在注释有些是查询XXX类型,但是方法名完全体现不出来,很容易误导使用者。独立的业务需要独立的方法名!

    5.具体方法只做本方法的事情,不要让你的方法“做太多”。大家看如下代码。
   
        //代码1
        public void insert(Order order){
            //当满足某条件下,订单直接付款通过
            if(xxx){
                order.setPayedStatus("已付款");
            }
            dao.insert(o);
        }

        //代码2
        public void insert(Order order){
            //当满足某条件下,订单直接付款通过
            updatePayed(order.getId());
            dao.insert(o);
        }
   
        //更新是否付款
        public void updatePayed(Order order){
            if(xxx){
                order.setPayedStatus("已付款");
            }
            service.update(order);
        }
    

    看如上两段代码,可能有人会说,如果用第二种代码执行会多操作一次数据库,但是从我的角度出发,我宁可多操作这一次数据库,而不是吧插入和更新的业务同时执行。因为插入的时候只需要管插入的业务即可,他无需关心更新付款状态有多少业务存在。如果说之后更新付款状态以后需要添加业务代码的话,我们只需要修改updatePayed方法即可。也反应出我在第3点(入口需要统一)中提到的。

    6.使你的方法作用范围最小化,如果是方法内部使用的方法,可以使用private就private,不要什么方法都用public修饰。当其他人使用你的service的时候,呈现给他的应该就是他所需要的,而不是一大箩筐全列出来




   
分享到:
评论

相关推荐

    检查代码规范插件 检查代码规范插件

    在软件开发过程中,代码规范的重要性不言而喻。它不仅有助于提高代码的可读性和可维护性,还能确保团队成员之间的代码风格一致,减少沟通成本。Java作为一种广泛使用的编程语言,同样强调代码规范。本篇文章将详细...

    Matlab之代码规范.rar_MATLAB代码规范_matlab 代码规范_matlab编程规范_matlab规范_matla

    通过阅读"Matlab之代码规范.pdf",你可以深入理解这些原则并将其应用到实际编程中。实践这些规范,不仅可以提高代码质量,也有助于与其他MATLAB开发者更好地协作。记得不断学习和适应新的编码标准,以保持代码的现代...

    代码规范.pdf

    综上所述,该文档强调了编程代码规范的重要性,提供了一些基本的Java编码实践,并且指出了正确的命名规范和格式化方法。这些都是为了提升代码质量,保证软件开发的效率和后期的可维护性。同时,该文档还强调了阅读...

    浅析框架与代码规范.pdf

    综上所述,代码规范对于保证软件项目的质量和可维护性至关重要。无论是新员工还是老员工,都需要重视并积极践行代码规范。通过系统的培训、定期的考核以及有效的监督机制,可以显著提高团队的开发效率和代码质量。...

    单片机程序编写代码规范工具

    - 提高代码可读性:规范的代码结构和命名规则使得其他人更容易理解代码逻辑,便于团队协作。 - 降低错误率:遵循统一的编程规范可以减少因拼写错误或不一致的命名引发的bug。 - 提升维护效率:当项目规模扩大时,...

    代码规范代码规范.txt

    综上所述,《Lifeix代码规范》提供了一套全面且实用的代码规范指南,涵盖了代码组织、风格、注释等多个方面。遵循这些规范不仅有助于提升代码的质量,还能有效促进团队间的协作与沟通。对于任何规模的软件开发项目而...

    阿里巴巴代码规范-泰山版.pdf

    综上所述,阿里巴巴代码规范泰山版是一份全面、细致的Java编程指南,它不仅提供了编程规范和最佳实践,还致力于培养开发者的职业素养,推动软件开发团队之间的协作,以期达到编写出更高效、更高质量代码的目标。

    华为代码规范代码模板

    在软件开发过程中,代码规范和模板的使用是至关重要的,它们能够提高代码的可读性、可维护性和团队协作效率。华为作为全球领先的ICT解决方案提供商,对于代码质量有着极高的要求,因此制定了一套详尽的代码规范。这...

    C++代码规范培训心得

    最近参加了一次关于C++代码规范的培训,我的心得体会颇多,以下我将结合培训内容和个人认识,从代码习惯的重要性、命名规范、代码排版布局、效率优化等方面,详细阐述我在C++代码规范培训中的所学所思。 首先,培训...

    代码规范.zip

    "代码规范.zip"这个压缩包包含了多个版本的Python开发代码规范PDF文档,旨在帮助开发者理解和实践标准的编程习惯。 首先,我们看到"Google-Python-Style-Guide中文版",这是Google公司制定的Python编程风格指南的...

    Java代码规范.pdf

    Java代码规范文档中涉及的知识点涵盖了Java编程实践中的命名风格和代码组织方式,旨在为Java开发人员提供一份行业内部开发的准则,确保代码的可读性、一致性和维护性。以下是从提供的文档内容中提炼出的相关知识点:...

    百度前端代码规范.pdf

    这些规则有助于维护代码的一致性,让其他开发者更容易阅读和理解代码。 HTML编码规范、CSS编码规范以及Less编码规范则分别针对HTML、CSS和Less文件的编写提出了标准化的指导原则。HTML编码规范可能关注标签的闭合、...

    C/C++代码规范

    C/C++代码规范是指在编写C或C++程序时所遵循的一系列编程规则和约定,其目的是为了提高代码的可读性、可维护性,以及便于团队协作。一个良好的代码规范可以减少代码中的错误,提升代码质量,同时还能帮助开发者更快...

    java、前端代码规范(阿里巴巴).zip

    Java和前端代码规范是软件开发中的重要组成部分,尤其是在大型企业如阿里巴巴这样的公司中,它们对于保持代码质量和团队协作至关重要。本压缩包包含了阿里巴巴制定的Java和前端开发的详细规范,帮助开发者遵循一致的...

    前端代码规范.rar

    "前端代码规范"这个压缩包文件很可能包含了一系列关于如何编写整洁、一致且易于理解的前端代码的指南。以下是对这些规范的一些核心内容的详细解读: 1. **命名规则**:前端代码规范通常会涵盖变量、函数、类以及...

    JAVA代码规范 JAVA规范 代码规范

    Java代码规范是编程实践中至关重要的一个方面,它旨在确保代码的质量、可读性和维护性。以下是一些核心的Java代码规范要点: 1. **命名规范**: - 类名使用大驼峰命名法,所有单词首字母大写,例如`ClassName`。 ...

    代码规范.rar 阿里巴巴java代码规范

    良好的注释有助于理解代码逻辑,阿里巴巴规范提倡使用Javadoc格式的注释,对类、接口和方法进行详细解释。注释内容应简洁明了,避免重复代码中的显而易见的信息。 **3. 编程基础** - 避免使用魔法数字,将常量定义...

    一直追求的代码规范总结

    代码规范是编程实践中至关重要的部分,它不仅关乎代码的整洁性和可读性,还直接影响到软件的可维护性和团队合作的效率。以下是一些关键的代码规范要点: 1. **代码格式化**:保持代码的格式一致性是基本要求。对于...

    C++代码规范检查工具

    综上所述,C++代码规范检查工具,尤其是CppCheck,是提升C++项目质量和开发效率的重要助手。通过正确使用和理解这类工具,开发者可以编写出更健壮、更易于理解和维护的代码。因此,无论是个人开发还是团队合作,都...

    java代码规范

    而且,我相信,如果我们代码规范能够做好的话,且不说开发水平提高多少,至少我们也会有很多出色开源项目。 一、规范的代码可以促进团队合作 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每...

Global site tag (gtag.js) - Google Analytics