下载
第1章认开发思想部分
3
当然,有了一个日益增大的
免费工具函数库,依然不能满足全部需要,也不能优化这个库以适应特殊需求,有些库太庞大以致不能随处安装,因为每一次选中都必须分析几百K字节的代码,这将严重降低站点的性能。在这种情况下,需要用100%自己创造的优化解决
方案,以取代非最优解决方案。更大的项目如果缺乏计划将导致更多的错误,在开发后期,可能会遇到没有或无法预见的困难,这是由于缺乏计划的时间和工作,这些困难可能会严重到让你彻底地重组整个项目。例如,对一个依赖额外数据库提取层的数据库支持的应用程序,其数据库提取层仅能接收文本数据,但后来你发现也需要用它接收数值性的数据,通过工作区转换,可以使它能够接收数值性数据。但后来你又感觉到这个工作区仍旧不能满足需要,这时唯一能做的就是改变数据库接口,这需要重构提取层并对所有主代码调用进行检查,当然也需要清除先前创建的工作区。这样,数小时甚至整天的工作将不得不耗费在本来从一开始就可以避免的问题上,这些问题往往决定了程序开发的成败,因为“时间是你永远都不可能充分拥有的珍贵资源”。下面的内容将针对大部分基本的却是非常重要的开发中的实际问题进行讨论:改善代码质量以及基本设计和文件管理的问题。陈述完这些后,我们创建一个应用程序接口(API),采取简单的、实用的方式使你熟悉这一新的思想,然后我们从头创建一个API,在纸上从理论上开发它,并明确一些实用规则来帮助你实施下一个API,例如风格问题、以及商业技巧等。
1.3编码规范
好的编码和差的编码之间究竟有何区别呢?实际上,这个问题很简单。好的代码(确实好的代码)能够像一本书一样被阅读。你能从任何地方读起,并且能够时刻意识到你所读的这些行是干什么用的,它们在什么条件下执行,它们所要求的设置。即使你缺乏背景知识,遇到了一个错综复杂的算法,你也能很快看出它所从事的任务,以及它的风格。举个例子,然后说“照着做”总是很容易的,但我想这一章应该使你打下写专业化代码的坚固基础,这一基础将区分真正精心编制的代码和一个草草完成的程序段。抱歉的是,由于篇幅所限,我们不能按我们所希望的那样详尽地讨论良好的代码书写风格的每一方面,但本章将给你一个很好的开始。我们期望你能迅速获得专用的材料,以熟悉软件设计和工程的每一要点。编码是一个很广的领域,几乎是一门独立的科学。有许多论文论述它,虽然这些论文大多很乏味,很理论化,但在应用中是不可放弃的。下面我们就最重要的问题进行最基本的讨论。1.3.1选择名字选择变量名可能是程序员最常做、但却想得最少的。如果你已建立了这些在大项目中出现的变量名字、类型、定义位置的清单,那么你就创建了一个类似于小电话簿的东西,你想让你的清单成为什么样子呢?不同的命名方案已发展起来了,它们有不同的思想及各自的优点和缺点,这些方案一般分为两类:简短的变量和函数名及谈话式的变量和函数名(描述变量类型和目的的更长的名字)。某个电话目录可能是这个样子的,如表1-1所示。
4
部分第一部分分高级PHP
下载
表1-1电话目录
地址382W.S204E.R.电话-3951-8382
J.D.M.S.
这份
列表非常有意思:该列表有两个条目,但并没有更多的信息。人名只有首字母,没有全称;只有房间号,但没有街道名;只有电话号码的一部分,却没有完整的号码。让我们看另外一个例子,如表1-2所示。
表1-2电话目录
姓名地址电话
ht5ft9in_age32_JohnDoe_male_marriedht5ft6in_age27_MarySmith_female_single
386WestStreet,LosAngeles,California,USA,Earth204EastR
oad,LosAngeles,California,USA,Earth
+1-555-304-3951
+1-555-306-8382
在这个例子中,每个人的名字包括身高、年龄、性别及婚姻状况。地址中不但包括街道和城市,而且也包括州、国家、甚至星球。电话号码附加了国家和地区号。第二种解决方案比第一种好吗?两个都不是最好的。在程序课上讲授的这两种解决方案,都不令人满意,定义一种类型tpIntMyIntegerCounter,然后声明一个变量instMYIntegerCyunterInstance。如果仅仅需要遍历一个数组并将所有元素都设为0,这无疑显得太冗长了(见清单1-1)。