前言
在工作了一年多之后,我发现静态方法的耦合问题实在是头疼。如果可以尽量不要使用静态方法存储数据,如果要存储全局数据就把数据放在最顶层的主函数里面。
静态方法问题
耦合问题,不要用静态方法存储数据
我这里有两个静态方法:A和B。A和B都各种存储A_Data和B_Data。如果两个静态方法一直互相调用,就会导致耦合过高,无法控制数据流向的问题。
可以看到,这个已经乱成一锅粥了
Mermaid源码
graph LRA--> Method_A_1-->Data_B
A--> Method_A_2-->Data_B
A--> Method_A_3-->Data_A
A--->Data_AB--> Method_B_1-->Data_A
B--> Method_B_2-->Data_A
B--> Method_B_3-->Data_B
B--->Data_B
所以静态方法尽量只存放方法,不要存放变量。比如字符串切割,数组拼接,敏感字去除。
扩展方法
这里推荐使用扩展方法来解决,扩展方法很好的限制了输入和输出,不会出现耦合数据的情况
微软扩展方法文档
如何改变面向过程的思维
喜欢用静态方法,其实还是面向过程的思维,就是在写方法的时候,就已经知道我可以直接去拿Static_A的静态参数。静态方法最容易出现的就是配置文件的读取。
面向过程,直接去静态函数里面拿参数
面向对象,在构造函数里面将参数注入
这个才是面向对象的思想。
如果参数过多怎么办?
方法1:将参数写对象
method(string a,int b,int [] c)//改成method(Data a)class Data{public string a {get;set;}public int b {get;set;}public int[] c {get;set;}
}
方法2:通过委托实现回调
这里不展开说
方法3:依赖注入和IOC控制反转
这里不展开说