我的通用程序规范及说明

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

程序功能的相同点:
每个项目,都需要后台程序。
而后台程序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;

未完待续....  

时间: 2024-07-30 19:17:19

我的通用程序规范及说明的相关文章

ABAP表抛FTP通用程序

主要功能: 1.支持R3所有表(标准.自建)下传,下传方式为FTP 2.支持输出字段选择及顺序调整 3.支持动态条件,不同的表会有不同的选择条件,根据不同的条件选择需要下传的数据 4.支持单表.多表.以及输出数据再次加工(需自己写输出逻辑扩展程序,可参考YTEMPLET) 5.支持多表查询,及多表查询的动态选择条件 6.支持大数据量表分批取数.以及分批下传(已通过BSEG大数据量表测试) 7.支持单文件下传(只生产一个文件,默认是分批下传,会产生多个文件) 8.其它支持参看选择屏幕 程序创建好后

Win10通用程序 UWP版HtmlAgilityPack UWP应用使用示例

UWP版HtmlAgilityPack,UWP应用使用示例下载. Win10 发布了一个多星期,sdk是随着一起发布的,我安装好vs2015和sdk 开发UWP 通用程序. 在做网络解析的时候,用nuget 安装 HtmlAgilityPack 发现在UWP 通用程序里无法使用. 刚开始以为版本的问题,随后更换了几个版本号都发现无法使用. 然后到HtmlAgilityPack 官方开源地址:http://htmlagilitypack.codeplex.com/ 下载源码,放到win10 sdk

使用 Visual Studio 生成通用的 XAML 应用程序 (Windows Phone 和 Windows 通用程序)

在Build会议上,我们发布了新的版本---Windows Phone 8.1. Windows 8.1 平台.作为开发人员,这意味着您现在可以生成 XAML 和 HTML 的通用程序,并通过分享大量的代码和内容使其运行在手机和平板电脑上.为了使构建通用程序可用,我们在Visual Studio中添加了许多新功能作为Visual Studio 更新 2 RC的一部分. 您有两种方式来了解关于这些功能的更多信息.一种方法是通过这篇博客.另一个方式是收看我的Build talk视频,它涵盖了所有的资

使用Prism6 建立 Windows 10 通用程序.

使用Prism6 建立 Windows 10 通用程序. 目标: 使用prism6,建立Windows 通用程序项目. 1, 解决方案—添加新建项目—通用—空白应用—输入名称—确定—确定 2 ,引用上右键--选择管理NuGet程序包--点浏览—输入Prism.unity查找—安装—确定安装 3,打开App.xaml 更改Application 为 PrismUnityApplication. 4,打开App.xaml.cs代码文件 删除32行. this.Suspending += OnSusp

程序规范示例

1 为什么需要进行程序规范? 可读性 可维护性 2 程序如何规范? 举个简单的例子,如果我们要创建一个Foo项目 Foo/ |--bin/ | |--foo | |--foo/ | |--tests/ | | |--__init__.py | | |--test_main.py | | | |--__init__.py | |--main.py | |--docs/ | |conf.py | |abc.rst | |--setup.py |--requirments.txt |--README

在UNC(通用命名规范)路径和URL中使用IPv6地址

转自:http://www.ipv6bbs.cn/thread-348-1-1.html   虽然微软在支持IPv6上表现得很积极,但Windows却并没有完整地支持IPv6,例如,在Windows中,我们以往可以使用UNC(通用命 名约定)访问网络共享文件夹(如\\127.0.0.1\C$),但现在却不能使用IPv6这样做,因为Windows看到IPv6地址中的冒号时,它会 把它当做驱动器盘符对待. 为了解决这个问题,微软为IPv6地址转换建立了一个特殊的域,如果你在UNC路径中使用IPv6地

《Linux高性能服务器编程》学习总结(七)——Linux服务器程序规范

第七章      Linux服务器程序规范 服务器程序除了需要网络通信外,还应该考虑很多其他的细节,而这些细节很多很杂,但又基本是模板式的.1)服务器程序基本都是以后台形式运行的,没有控制终端,不能接受用户输入,其父进程通常是init.2)服务器程序有一套日志系统.3)服务器程序以某个专门的非root身份运行.4)服务器通常是可配置的.5)服务器进程启动时通常会生成一个PID文件以记录后台进程的PID.6)服务器程序同城需要考虑系统资源和限制. 服务器一般使用syslog函数与rsyslogd守

Delphi Excel导入 的通用程序

Delphi Excel导入 的通用程序 . 分类: delphi 2012-09-24 18:19 127人阅读 评论(0) 收藏 举报 exceldelphiintegerprocedure TForm1.btnClick(Sender: TObject); begin OpenDialog1.Title := '请选择正确的excel文件'; OpenDialog1.Filter := 'Excel(*.xls)|*.xls'; if OpenDialog1.Execute then ed

hive表增量抽取到mysql(关系数据库)的通用程序(三)

hive表增量抽取到oracle数据库的通用程序(一) hive表增量抽取到oracle数据库的通用程序(二) 这几天又用到了该功能了,所以又改进了一版,增加了全量抽取和批量抽取两个参数.并且可以设置每批次抽取到记录数. 使用shell脚本可以直接方便到将hive中到表抽取到任何关系型数据库中. shell脚本到demo如下,为便于测试,将每批次处理改为2条记录: #!/bin/sh ## !!!注意lib中jar包兼容性问题: ## 如果包含log4j-slf4j-impl-2.6.2.jar