什么是网站风格策划的重点,微网站有什么用,做的网站必须放在idc机房吗,建公司网站步骤一个项目的流程#xff1a;1、公司市场人员与客户交流#xff0c;了解客户、引导客户使用公司最优资源并产出一份市场需求文档 2、公司需求人员#xff08;BA#xff09;与客户交流#xff0c;了解客户需求并产出一个软件需求文档 3、项目经理、开发小组成员、需求人员 1、公司市场人员与客户交流了解客户、引导客户使用公司最优资源并产出一份市场需求文档 2、公司需求人员BA与客户交流了解客户需求并产出一个软件需求文档 3、项目经理、开发小组成员、需求人员BA一起开一个需求评审会议对不合理的地方 打回给BA再由BA与客户沟通 4、程序员接到和充分了解软件需求文档后产生软件设计文档包括概要设计文档和详细设计文档 涉及到数据库的还需要进行数据库的设计 5、程序员根据设计文档进行编码、调试、打包发布。如果编写的函数库还可能编写一份接口使用文档 如果程序是直接运行的软件还需要编写一份用户使用手册包括各种操作步骤和配置参数说明 6、软件发布后客户可能进行一段时间的测试、或者将其投入运营。这期间会发现一些问题还需要 程序员进行修复这已经进行维护阶段了这个阶段的周期很长可能5年也可能10年或者更长 之所以写了软件项目的流程只是想强调软件最花费时间的是维护阶段。这个阶段维护人员可能是 原来的开发人员但更可能是非原开发人员来维护的。在中国IT从业人员流动性太大一个项目的维护 更可能是之前没接触过这个项目的程序员。如果这个时候文档不齐全将是一件很蛋疼的事情。 对一个程序员来说这还不是一个最悲剧的事情。程序员要维护项目最终还是要阅读项目源代码 此时如果项目架构设计得很糟糕和代码写得乱七八糟的想必维护人员在修改项目代码时肯定会咒骂 原来的架构师和开发人员正因为架构师的低水平设计业务代码、数据库代码、控制代码深深耦合在 一起改动一处总害得别人担惊受怕这因为开发人员没有添加该有的注释命名的变量不能让人见命思意 编写的代码过渡冗余重复的代码多处使用让维护程序员改了这个地方却不知道还有一个地方有相同的代码 没有修改此时难保证维护程序员不砸了他的电脑。 每个公司都有自己的一套项目流程自己的编程命名规范 渐渐的慢慢也形成了自己的编码风格和命名风格。在此总结一下。这里主要总结C语言的 因为Java在这方面较C、C做得相对够好就不啰嗦了不过都有参考价值。 1、尽量不用全局变量 全局很容易破坏软件的结构增加代码的耦合度将模糊业务代码、数据库代码、控制代码的界限 害得维护人员在阅读代码时第一要务就是要追踪全局变量在哪里由于设计得不好基本项目的 所有源代码文件都涉及修改了全局变量这一追踪下来不是一天半会能够摸索清楚你要了解的某个 功能尽管这个功能很小你还是要看完这整个项目太浪费时间了不值得啊。 2、少用全局变量 有些项目由于硬件资源的限制比如嵌入式开发你不得不使用全局变量。在这种不可避免的情况下 我们只能尽量减少使用全局变量。 3、别忘记加上static 如果你使用到的全局变量仅仅是某个源文件模块使用到别忘记给这个全局变量加上static。 4、别忘记加上const 如果你设计的接口函数有入参而你不想修改这个入参别忘记加上const。 5、明确哪些结构体、枚举、联合体、宏、常量需要全局使用哪些需要全局使用 如果有的结构体、枚举、联合体、宏、常量仅仅是某个模块需要使用就没必要放置在公共的头文件中 如果结构体、枚举、联合体是需要公用的就要考虑是否需要仅仅在公用头文件中声明在某个源文件中 实现这样可以避免某些类型重复定义的错误。 6、让C代码带上面向对象的思想 不像C这样即面向过程又面向对象的语言更不像Java、C#这样完全面向对象的语言C语言仅仅是面向 过程的但是我们可以为C语言设计的项目插上面向对象的翅膀。 1、面向对象的命名 如我们在开发一个GUI库设计到GUI的初始化、加载字体、设置背景色、设置前景色等等操作 如果是没有代码面向对象的命名可以这样 Init、LoadFont、SetBgColor、SetFgColor 如果是带上面向对象的命名则可以这样 Gui_init、Gui_LoadFont、Gui_SetBgColor、Gui_SetFgColor 这样命名有个很好的好处便于程序员记忆我们在想到需要用到GUI的接口时只需要打上Gui, 好的集成开发环境就能快速提示所有的GUI库函数这无论对新接触GUI这个库还是熟悉GUI库的 老牛们大大的提高效率。 2、为仅在一个模块内使用的全局变量加上static 配合【1】的命名、Gui_Init、Gui_LoadFont、Gui_SetBgColor、Gui_SetFgColor等函数操作这个模块内的全局变量 这个时候GUI犹如一个类模块内的全局变量犹如C、Java、C#等面向对象语言的GUI类的成员变量Gui_Init等GUI库函数 犹如GUI类的成员函数。 3、设计纯洁的接口 如代码 void func(int *iResult) { *iResult g_Val*10000 1000; // 使用了全局变量参数复杂运行的代码 } 以上的代码就需要以来g_Val这个全局变量这种写法已经污染了这个接口 如果是纯洁的接口应当 void func(int *iResult, const int iVal) { *iResult iVal*10000 1000; } 调用时 int iResult,g_val; func(iResult, g_Val); 这样这个函数就不至于严重以来全局变量你可以传全局变量进来也可以传局部变量进来 纯洁的接口并不关心这个。 7、命名规范 1、全局变量加前缀g_如定义一个全局变量int g_iVal; 2、static变量加前缀s_,如定义一个模块全局变量static int s_iVal; 3、结构体变量加前缀st_,如COMM_PARA是一个已经定义好的结构体则COMM_PARA stCommPara; 4、枚举变量加前缀e,如ENUM_SEX是一个已经定义好的枚举则ENUM_SEX eSex; 5、int类型变量加前缀i,如int iRet; 6、unsinged int类型加前缀ui,如unsigned int uiRetCode; 7、float类型变量加前缀f,如float fVal 其实有了double类型可以不用float就尽量使用double。 8、unsinged float类型变量加前缀uf,如unsinged float ufVal 9、double类型变量加前缀d,如double dVal 10、unsinged double类型变量加前缀ud,如unsinged double udVal 11、short int类型变量加前缀si,如short siVal 12、unsinged short类型变量加前缀usi,如unsinged short usiVal 13、如果定义一个bool类型的变量加前缀b,如int bFlag;char bFlag; 14、如果定义的是一个字符串类型char[] 如果字符串是需要以0结束符的字符串则char szCountry[111]; 这种情况下的字符数组的大小写法是字符个数1的 如果字符串不需要以0结束符的则char sCountry[11]; 15、如果定义的是一个字符串类型char * 如果字符串是需要以0结束符的字符串则char pszCountry[111]; 这种情况下的字符数组的大小写法是字符个数1的 如果字符串不需要以0结束符的则char psCountry[11]; 16、如果是一个指针类型 如果指针变量是通过malloc动态获取内存的则int * piValPtx; Ptx代表这个变量是需要动态释放内存 如果指针变来那个不是动态获取内存的则int piValPtr; 如果带上了Ptr或者Ptx的后缀则前缀的p可省略 17、项目的命名 在公司内唯一 18、文件的命名 如果某些文件是项目唯一使用的文件名称加上“项目名称简写” “_“作为前缀 19、接口函数命名 如果写的是库则库接口则应该是库名称加上“项目名称简写” “_“作为前缀 20、防止头文件重复使用宏命名 项目名称简写” “_“ “文件名 “_“ “H 每周更新关注:http://weibo.com/hanjunqiang 新浪微博手机加iOS开发者交流QQ群 446310206