@TOC


前言

搞编程的,在工作中学习中,除了培养好的代码习惯、养成自己的一套代码风格,还需要多思考如何把代码写的更健壮,碰到bug如何去调试呢,与诸君共勉。

一、写代码之前:

1.画流程图/时序图/…,进行整体设计,或者用word进行文字描述,将需求的实现描述的很清晰,产出之后,别人要拿着你这个东西就能写出代码

  • 对应着到项目开发流程那里看看哦。因为你进行概设、详设时出的方案,不得满足这个要求吗

2.设计微服务跟设计满足单一职责的单个类是一样的,面向对象,比如开门这个动作是属于门这个类的;计算服务区评分这个动作或者说属性是属于服务区这个微服务的

3.时序图,理一下代码调用流程,挺重要

4.技术得结合业务去做,不能为了用哪个技术而不管特点、应用场景、优缺点,硬塞进去,不管不顾技术方案选型

  • 不能无脑上新技术【不能一上线就考虑调优】:
    • 比如JVM调优,只有服务用不了了,明显异常,占用内存多了或者CPU高了,考虑JVM调优,再dump堆栈
  • 技术得结合业务去做,比如降级、削峰【某个服务在忙碌时不一定要给所有人都提供,可以只给一部分有必要需求的人提供】
  • 练习,或者学习新技术另说,但是在公司做业务一般需要和团队充分沟通哦,可别掉进怪圈了

5.如果代码逻辑很简单,生产中不要强行用设计模式

  • 加大了工作量,逻辑很多,工作量很大

6.在公司实际开发时,先把各个系统的边界先定好:

  • 这个系统需要别的系统提供什么,你这个系统需要像别的系统提供什么,先搞清楚,弄好,然后再着手各个系统内部的事【设计每个系统的数据库……】
  • 隔离系统的变化点【刚做好就来需求,不得不对原有系统重构,说明系统耦合性太高或者扩展性太低】,把大的边界先定好,再分别做每一块
    • 变化点指的是:一个需求,本来我A…就完成了,但是XXX来了导致我又得B…,这个B…就是变化点

7.根据公司的业务规范、方案流程以及常用规范对代码结构进行梳理:

  • 此处以周志明老师的凤凰架构中的书店项目代码结构为例:Fenix’s Bookstore 单体架构后端参考(并未完全遵循)了 DDD 的分层模式和设计原则,整体分为以下四层:
      1. Resource:对应D DD 中的 User Interface 层,负责向用户显示信息或者解释用户发出的命令。请注意,这里指的“用户”不一定是使用用户界面的人,可以是位于另一个进程或计算机的服务。由于本工程采用了M VVM 前后端分离模式,这里所指的用户实际上是前端的服务消费者,所以这里以 RESTful 中的核心概念“ 资源” (Resource)来命名。
      1. Application:对应 DDD 中的 Application 层,负责定义软件本身对外暴露的能力,即软件本身可以完成哪些任务,并负责对内协调领域对象来解决问题。根据 DDD 的原则,应用层要尽量简单,不包含任何业务规则或者知识,而只为下一层中的领域对象协调任务,分配工作,使它们互相协作,这一点在代码上表现为 Application 层中一般不会存在任何的条件判断语句。在许多项目中, Application 层都会被选为包裹事务(代码进入此层事务开始,退出此层事务提交或者回滚)的载体。
      1. 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#之门
  • 组内各位前辈们的指导