zoukankan      html  css  js  c++  java
  • 我的通用程序规范及说明

    我的通用程序规范及说明
    =========================================
    前言
    -----------------------------------------
    每个项目程序功能大多数是相同的,而程序员
    最应该做的事就是复用你的代码,甚至项目。
    所以才有了我做通用程序的想法。

    程序功能的相同点:
    每个项目,都需要后台程序。
    而后台程序50%以上的东西都是复用的。
    比如:
    登录,权限,日志,系统设置,文章模型,产品模型。
    甚至是会员系统都是复用的,或者变化不大的。

    不同点:
    每个项目之间变化的会是什么呢?
    是主营业务模块。
    或者是我上面提到的通用模型表的字段差异。
    端的不同,界面的不同。h5,app,web等...

    大学里学过马哲的同学都知道,归纳和演绎。
    我的通用程序就是,把项目的相同点都归纳出来。
    然后每个具体项目的不同点,我们再进行演绎。


    程序思想
    ------------------------------------------
    1,面向对象编程
    什么是面向对象?对象怎么划分?不同的程序员可能有不同的理解。
    但大致方向是一样的。
    我谈谈我的想法,之前我理解就是mvc分开, c层调用m层封装的CURD.
    把model理解为对数据层的封装。
    后来我觉得没有必要,比如后台的文章列表,文章的添加,文章的修改。
    在controller类直接用db类操作就OK了。如果前台页面有复用的地方,
    复制controller就好了。没有必要为了复用很少一段代码,或者是
    为了符合mvc规范。一定要将数据操作写在model里。
    而且这样的功能,写在model里是有弊端的。
    比如我前台页面要显示文章列表,筛选条件和显示字段都是不一样的。
    请问model怎么复用?
    难道全用参数控制?

    那什么样的查询才写model呢,符合语义的,能复用的才写model。
    比如我要查询最后一条数据,有可能用db类也是很少的代码量。
    但其实可以写在model里, $Aritcile->getLast();

    总体来说面向对象,重点在什么是对象,对象怎么划分。
    对象可以映射到数据表,但和封装数据库操作是不同的概念。
    感觉tp5的也是这样划分的。有种不谋而合的感觉。

    2, 如何组织代码
    我们过往的代码是扁平的,它的结构如下:
    上(model/serve)
    左(function) 中(controller) 右(plugin)
    下(view)
    但现在,事情起了变化。
    1,现在app盛行。 API不得不成为我们复用的一种中间件。
    2,业界已经使用composer管理代码了。
    而且我相信,大部分的项目组件功能,都是有现成的。
    只要在https://packagist.org/, 去搜就能搜出一大堆。
    So, 为什么我们自己的代码不能写成组件呢?只要它和数据库联系不是那么紧密。

    所以在组织我们的代码的时候,考虑如下情况:
    1, 端与端的功能块复用 => API
    2, 但凡能独立出来的,与项目业务无关的功能 => vendor
    3, ORM,对象关系映射 => model
    4,其他小功能点 => extend/org
    5, 我的helper代码类 => extend/my
    6, 前台模板 => view [js组件 vendor]

    总结为: 面向对象编程,充分复用,符合语义,合理的架构你的项目。


    关于命名和注释
    ------------------------------------------
    理论上是可以不写注释的,这在于的你命名要足够符合语义。
    命名的原则:简单明了,符合语义

    比如显示用户列表:
    坏的命名:
    userModel::ShowUserLists()
    好的命名:
    user::lists()

    比如支付组件:
    坏的命名:
    pay_plugins/alipay/alipaypc.clss.php
    好的命名
    pay/alpay/pc.php

    几点需要注意:
    1, 命名的统一性。
    列表:lists
    添加:add
    修改: edit
    取得什么用get: 如:getUser()
    设置什么用set: 如: setConfig()
    统计什么用count: 如: countMoney()
    新建什么build: 如:buildForm()
    最好有一个常用词库:
    类名,方法名,数据表名, 字段名。都统一才好...

    2, 关于注释
    因为我们用面向对象编程.类方法的作用,参数,返回值, 全部要写清楚.
    注释要简单明了,不能太写多。你的注释是给你的同事和1年后的你自己看的。
    只有大段的逻辑比较多的,语义分割的, 才需要在方法内写注释。


    代码风格
    ------------------------------------------
    1, 数组用 [] 不用 array();
    2, 函数返回值, 只能是true or false or 数据
    3, 代码宜短不宜长:

    长的代码:
    if( $_GET['status'] ){
    	$status = 1;
    } else {
    	$status = 0;
    }
    
    $a = 5;
    $b = 6;
    if($a == 5){
    	if($b == 6){
    		if($a<$b){
    			return false;
    		}else{
    			return true;
    		}	
    	}else{
    		return "不比较";
    	}
    }else{
    	return "不比较";
    }
    
    
    
    短的代码:
    $status = isset($_GET['status']) ? 1 : 0;
    
    $a = 5;
    $b = 6;
    if($a!=5 or $b!=6)
    	return "不比较";
    
    return $a<$b;
    

    未完待续....  

  • 相关阅读:
    qcow2文件压缩
    raw格式镜像文件压缩并转换为qcow2格式
    centos7 install virt-sysprep
    镜像简介
    QEMU 使用的镜像文件:qcow2 与 raw
    ubuntu14.04中国源
    less css下载及编绎工具
    分布式计算中WebService的替代方案: RPC (XML-RPC | JSON-RPC)
    Asp.net WebServer
    C#取调用堆栈StackTrace
  • 原文地址:https://www.cnblogs.com/xielisen/p/5473268.html
Copyright © 2011-2022 走看看