39、C#项目开发注意

1.需求确认:每次任务都要明确需求细节,多问!

2. 需求确认:需求不完全确认,不动手编码(开发前)


3. 每天开发前都要先更新SVN(防止参考或者要修改的代码已经变更)

4. 测试用例:开发前一定要先写测试案例,全面列好边界条件,案例模拟各种使用细节,根据测试用例的结果来开发,可以考虑到多种条件判断不至于遗漏,开发时可以事半功倍

5.吞吐量:开发前一定要确认吞吐量,以此确认开发思路,是否使用分页(一般都要使用)

6.接口兼容性:开发前一定要确认接口可能的参数情况,不要只可以传一个参数,最好是实体,返回也要返回完整的字段,不要只返回当前需求需要的信息,要考虑扩展性


1. 提交所有代码前:无测试完整数据,不可提交

2.提交代码钱必须撤销全部断点调试一次

3. 提交所有代码前:更新SVN核对文件为最新(防止其他人又提交了代码)

4. 提交所有代码前:最后核对需求一次(防止漏掉需求细节)


1.开发中:添加调试日志框架

2. 开发中:有错误,则必须将所有脚本,全部打印!!

3.开发中:传入参数:一定要有null & 空记录数 的处理

4.开发中:要有错误提示返回给前端

5.开发中:数据库交互中:不要操作单条记录,一定要获取所有操作结果集再操作!!(使用分页思想)

6.开发中:数据库中选数据一定要有条件,并且要定准条件(因为一个表数据量往往很大)

7.开发中:一般情况都不存在先捞出数据库数据,再根据数据判定插入的写法,而是合到一起,外层插入,内层作子查询

8.开发中:for循环中不要用continue,而是使用反向if条件替代

9.开发中:批量处理数据!批量处理数据!批量处理数据!切记不要一条一条处理,尤其有数据库连接时。

10.开发中:最好的学习就是模仿项目中前人的例子

11.开发中:日期中月份的增减只能在月初的基础上,不能在月末那天加减月份数(9月月末.addmonths(-2)为7月月末,显然是错误的)

12.开发中:因为数据库取出的日期字段可能为空,所以项目实体中的datetime字段必须定义为:可空类型的日期字段,这样接收数据库字段才不会出错

13.开发中:快速开发,没有专门测试系统,只能自己做到极致(考虑各种条件,考虑各种边界,考虑各种数据测试)

14.开发中:EF框架中先用where再用select,在select之前必须判定内容是否为空;或者在select之后使用:firstordefault(),此方法可以容错select的空值

15.开发中:如果要用循环将一个list中的变量add进入另外一个dictionary中,必须要借助第三者变量,此时这个第三者变量必须是每次都重新定义,不可以使用clear的方式,否则最后全部指向同一个内存。


1.开发流程:第一步:完成主干功能,在DA层,要考虑使用分页;

                       第二步:详细考虑边界条件(很多的话可以包成方法),在DA层;

                       第三步:合法性判定,包括对直接传入值的判断,对间接数据有效性合法性判断,要将这些判定返回给用户,可以把代码封装起来;

                       第四步:考虑异常,将走expo调用别人的方法,将很多数据库操作集中的代码用try...catch包起来;

                       第五步:数据测试,若分支跟输入参数有关则每一个分支都要有一个测试方法(写在main方法中),做成一个测试列表,要有完整的(包含各个分支)数据测试;最后一定要有整体测试(即禁用全部断点);测试要多想测试的各种情况(重复值,不存在值输入)

                       第六步:添加日志框架,方便正式站排错;

                       第七步:整体考虑:是否有死循环,是否有未引用的变量会导致程序down掉等

                       第八步:最后和需求说明进行再次确认;


1.数据库交互:一定要少连数据库,耗时,必须使用批量数据一次性连接数据库的方式,加载到内存中再做其他比较操作;并且最好使用上下文数据库调用方法更快(context.ExecuteStoreQuery<...>(sql).ToList()),不要用再次封装的方法

2.数据库交互:选数据一定要定准条件,不允许无条件全选表格(大量数据表格,拖死系统)

3.数据库交互:一次数据库操作,不超过1000条操作语句(最好是积累一批数据后再处理)


1.Excel处理:一定要注意可能会有空行

2.Excel处理:一定使用分页处理方式

3.Excel处理:回写Excel时,之前怎么修改单元格数据和数据库比较的,回写时需要和数据库中捞出的数据比较再处理,则必须对Excel数据做同样的修改

4.Excel处理:直接按照行操作,不管有没有空格或者无效字符,都是1000行一页,将有效记录(可能少于1000)进行数据库操作,再将这1000行结果回写Excel(这样写很简明,易维护)


1.分页:分页思想是项目中最重要的思想,没有之一!!!几乎所有大量数据处理都要用到

2.分页:分页思想就是:一大缸水一桶一桶地倒掉...

3.分页:分页中的for循环中不要加平行if分支,而是要将分支放到外面(多个分支都要分页,那就做成函数/方法)


1.部署:本地调试和开发站模拟最好分成两个项目,以免每次都要修改app.config和appconfig.xml

2.部署:本地调试必须关闭appclass value,否则会有线上服务进入本地

3.部署:xxx.interface.dll必须要重新生成整个解决方案才会生成

4.部署:项目中的apiDefine.xml必须在项目运行的时候才会更新,因为必须要进到program里面运行代码ExpoBuildApiDefine.BuildApiDefineFile(new List<Type>() { ... });而在开发站上一般都要在.exe所在的文件夹中的apidefine.xml中手动添加commandID

5.部署:仅项目中的apidefine.xml添加commandid是不够的,还要再添加webapi的commandID,在开发站的web服务文件夹中的apidefine.xml中手动添加commandID,为了使新添加的apidefine.xml生效,可以打开web.config,在里面略做修改比如敲两个空格再保存。

6.部署:仅项目中和webapid添加了commandID可能仍然不够,还要在数据库的对应表中添加commandID,这样前端才能调用到接口,因为接口可能有权限,必须从数据库中能查到才行


1.VS使用:app.config,appconfig.xml等文件以及其他要到bin\debug中读取的文件都要设置属性为:始终复制(右击文件,复制到输出目录,选择始终复制)

2.VS使用:线上发布的版本使用release中的exe


1.expo使用:我调用别人的服务,我要定义ExpoBuildApiDefine.BuildApiDefineFile(new List<Type>(){  typeof(IConfigManager)});目的就是通过apidefine.xml这个文件expo才能知道调用谁,这里的IConfigManager是别人定义的接口,别人的服务必须时刻都在启动着,否则我一旦使用就用不了;我调用别人的服务不需要定义ExpoBuildApiDefine,但是必须要将我自己的有实现的接口注册到expo中去,如ExpoRegistor.AddServers(typeof(IAccountManager), typeof(AccountManager));ExpoRegistor.StartServers();这样我生成的dll就可以让别人去调用了,同时我这边的服务也要时刻启动着,让别人可以进来调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值