项目中用到的工厂模式
@TOC
前言做项目的时候,用到了设计模式,总结下来,供以后参考,与诸君共勉。
一、代码中的部分片段123456789101112131415161718192021222324using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace WindowsFormsCustomInfo{ static class StepFactory { public static IStep GetStep(int stepIndex) { return _StepMap.ContainsKey(stepIndex) ? _StepMap[stepIndex] : null; } private static readonly Dictionary<int, IStep> _Ste ...
C#编程经验/遇到陷阱总结(二)
@TOC
前言搞编程的,在工作中学习中,除了培养好的代码习惯、养成自己的一套代码风格,还需要多思考如何把代码写的更健壮,碰到bug如何去调试呢,与诸君共勉。
一、写代码之前:1.画流程图/时序图/…,进行整体设计,或者用word进行文字描述,将需求的实现描述的很清晰,产出之后,别人要拿着你这个东西就能写出代码
对应着到项目开发流程那里看看哦。因为你进行概设、详设时出的方案,不得满足这个要求吗
2.设计微服务跟设计满足单一职责的单个类是一样的,面向对象,比如开门这个动作是属于门这个类的;计算服务区评分这个动作或者说属性是属于服务区这个微服务的3.时序图,理一下代码调用流程,挺重要4.技术得结合业务去做,不能为了用哪个技术而不管特点、应用场景、优缺点,硬塞进去,不管不顾技术方案选型
不能无脑上新技术【不能一上线就考虑调优】:
比如JVM调优,只有服务用不了了,明显异常,占用内存多了或者CPU高了,考虑JVM调优,再dump堆栈
技术得结合业务去做,比如降级、削峰【某个服务在忙碌时不一定要给所有人都提供,可以只给一部分有必要需求的人提供】
练习,或者学习新技术另说 ...
C#编程经验-文件(流)处理工具类工具类总结
@TOC
前言搞编程的,在工作中学习中,文件及文件流操作很常见,每次需要手动关闭流,何不封装一下呢,与诸君共勉。
一、处理文件的通用函数UniversalFileProcess()1.处理文件的通用函数UniversalFileProcess(),只要传入文件路径和处理文件的具体代码,这个方法就会自动完成异常处理和关闭文件的操作123456789101112131415161718192021222324252627282930 /// <summary>/// 处理文件的通用函数UniversalFileProcess(),只要传入文件路径和处理文件的具体代码,这个方法就会自动完成异常处理和关闭文件的操作/// </summary>/// <param name="path"></param>/// <param name="doSmoething" ></param> 把处理文件的具体代码封装在doSomething()函数中public static void Uni ...
C#编程经验/遇到陷阱总结(一)
@TOC
前言搞编程的,在工作中学习中,除了培养好的代码习惯、养成自己的一套代码风格,还需要多思考如何把代码写的更健壮,碰到bug如何去调试呢,与诸君共勉。
一、经验总结(未完待续…)1.面向对象中子类向父类的转换中存在的一个陷阱
将子类对象引用的地址赋值给父类,此时C#规定父类引用是调用不了子类独有的方法的
123456789class Program{ static void Main(string[] args) { //Teacher是Human的子类,虽然此时把t的引用赋值给了h,也就是把t中的Teacher对象的地址赋值给了h,但是此时h调用不了t独特的方法,这是C#规定的 Teacher t = new Teacher(); Human h = t; }}
2.数据库调用存在的陷阱
涉及到数据库的CRUD时,不应该把DataTime.Now这个带时区的存进数据库,应该把不带时区的数据存入数据库,所以应该使用DataTime.UtcNow
3.委托使用的注意事项
委托跟方法调用有区别,比如calcu ...
C#代码命名规范(一)
@TOC
前言搞编程的,在工作中学习中,培养好的代码习惯、养成自己的一套代码风格,还是比较重要的,与诸君共勉。
一、帕斯卡命名法+驼峰命名法写代码时或者Code Review时多多参考:帕斯卡命名法/拼写法【https://learn.microsoft.com/zh-cn/dotnet/csharp/fundamentals/coding-style/coding-conventions】
1.命名接口interface时,使用 pascal 大小写并在名称前面加上前缀 I。 这可以清楚地向使用者表明这是 interface。比如IWorkerQueue2.使用帕斯卡大小写
编写位置记录时,对参数使用 pascal 大小写,因为它们是记录的公共属性
命名类型的 public 成员(例如字段、属性、事件、方法和本地函数)时,使用 pascal 大小写
命名class、record、struct时,使用pascal 大小写(“PascalCasing”)
3.驼峰:
命名 private 或 internal 字段时,使用驼峰式大小写(“camelCasing”),以 _ ...
