C#编程经验/遇到陷阱总结(二)
@TOC
前言
搞编程的,在工作中学习中,除了培养好的代码习惯、养成自己的一套代码风格,还需要多思考如何把代码写的更健壮,碰到bug如何去调试呢,与诸君共勉。
一、写代码之前:
1.画流程图/时序图/…,进行整体设计,或者用word进行文字描述,将需求的实现描述的很清晰,产出之后,别人要拿着你这个东西就能写出代码
- 对应着到项目开发流程那里看看哦。因为你进行概设、详设时出的方案,不得满足这个要求吗
2.设计微服务跟设计满足单一职责的单个类是一样的,面向对象,比如开门这个动作是属于门这个类的;计算服务区评分这个动作或者说属性是属于服务区这个微服务的
3.时序图,理一下代码调用流程,挺重要
4.技术得结合业务去做,不能为了用哪个技术而不管特点、应用场景、优缺点,硬塞进去,不管不顾技术方案选型
- 不能无脑上新技术【不能一上线就考虑调优】:
- 比如JVM调优,只有服务用不了了,明显异常,占用内存多了或者CPU高了,考虑JVM调优,再dump堆栈
- 技术得结合业务去做,比如降级、削峰【某个服务在忙碌时不一定要给所有人都提供,可以只给一部分有必要需求的人提供】
- 练习,或者学习新技术另说,但是在公司做业务一般需要和团队充分沟通哦,可别掉进怪圈了
5.如果代码逻辑很简单,生产中不要强行用设计模式
- 加大了工作量,逻辑很多,工作量很大
6.在公司实际开发时,先把各个系统的边界先定好:
- 这个系统需要别的系统提供什么,你这个系统需要像别的系统提供什么,先搞清楚,弄好,然后再着手各个系统内部的事【设计每个系统的数据库……】
- 隔离系统的变化点【刚做好就来需求,不得不对原有系统重构,说明系统耦合性太高或者扩展性太低】,把大的边界先定好,再分别做每一块
- 变化点指的是:一个需求,本来我A…就完成了,但是XXX来了导致我又得B…,这个B…就是变化点
7.根据公司的业务规范、方案流程以及常用规范对代码结构进行梳理:
- 此处以周志明老师的凤凰架构中的书店项目代码结构为例:Fenix’s Bookstore 单体架构后端参考(并未完全遵循)了 DDD 的分层模式和设计原则,整体分为以下四层:
- Resource:对应D DD 中的 User Interface 层,负责向用户显示信息或者解释用户发出的命令。请注意,这里指的“用户”不一定是使用用户界面的人,可以是位于另一个进程或计算机的服务。由于本工程采用了M VVM 前后端分离模式,这里所指的用户实际上是前端的服务消费者,所以这里以 RESTful 中的核心概念“ 资源” (Resource)来命名。
- Application:对应 DDD 中的 Application 层,负责定义软件本身对外暴露的能力,即软件本身可以完成哪些任务,并负责对内协调领域对象来解决问题。根据 DDD 的原则,应用层要尽量简单,不包含任何业务规则或者知识,而只为下一层中的领域对象协调任务,分配工作,使它们互相协作,这一点在代码上表现为 Application 层中一般不会存在任何的条件判断语句。在许多项目中, Application 层都会被选为包裹事务(代码进入此层事务开始,退出此层事务提交或者回滚)的载体。
- Domain:对应 DDD 中的 Domain 层,负责实现业务逻辑,即表达业务概念,处理业务状态信息以及业务规则这些行为,此层是整个项目的重点。
- 4.Infrastructure:对应 DDD 中的 Infrastructure 层,向其他层提供通用的技术能力,譬如持久化能力、远程服务通讯、工具集,等等。
二、写代码时:
1.优化多个if/else:
- 除了之前的策略者模式等,还有个就是,可以给方法参数列表中加@Validated,以及@RequestBody,再利用正则表达式去实现优化if/else个数
2.交付:
- 保证时间,按时交付
- 保证质量【保证质量的方法,去看看,编程经验与编程陷阱,慢慢提高交付质量】
三、写代码后
1.当你有拷贝的欲望时,就要考虑设计的合理性了
2.碰到“一轮…又一轮、一遍…又一遍、一次…又一次”的逻辑时,考虑
- 最基础的:for循环、迭代调用某个方法
- 升级:task+队列(schedule)
- task中重要的点就是时间+事件【什么时间要做什么事】
3.为了提高代码质量一般考虑的点:
- 代码质量
- 考虑代码边界
- 用户额外操作
- 多领域接触的意外情况
- 业务隔离,单一职责
- 健壮性(有时候有的错误不能抛出,空值异常等不能导致产品直接崩)
- 松耦合,模块间不能耦合的太死,强耦合
- 代码规范。统一帕斯卡。注释【C#///生成的不算,逻辑中//的代码注释小于代码量的1/3】
- 对于大篇if…else、switch想办法优化
- 接口名字中带上版本号。要用驼峰都用驼峰要用下划线都用下划线
- restful风格的接口【restful风格的接口,重在资源,强调资源变现层状态转移,设计接口时围绕资源来设计,】,支持这个风格的就是HTTP协议
- 接口安全原则:
- CIA:保密性、完整性、可用性
- 手机号、身份证号脱敏
- 数据层面:SQL注入,用其他条件使得咱们原来的传参过程失效【过滤非法字符,JSOUP框架等】
- xss指的是在正常用户请求中执行了黑客提供的恶意代码,用户数据没有过滤、转义。CSRF【没有防范不信任的调用】:人机交互、Token
巨人的肩膀
- 周志明老师的凤凰架构
- C#高级编程
- C#函数式编程
- 叩响C#之门
- 组内各位前辈们的指导
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.


