自定义代码开发指导规范
更新时间: 2024-09-12


1.【强制】不能使用过时的类或方法([Obsolate]标识)     


 说明:C#中对于标记过时的方法,有可能会在新版本的.Net Framework或官方接口中剔除,因此强制不再使用此类或方法。


2.【强制】Object 的Equals方法容易抛空引用异常,应使用常量或确定有值得对象来调用Equals。


// 反例:
user.Equals("Jack");
// 推荐写法
"Jack".Equals(user);


3.【强制】不允许循环里调用Engine接口


请尽量减少服务间的通信次数:跨进程的接口调用大约是普通接口调用的耗时和消耗CPU的10,000倍。通常如果需要多次调用,需要改用批量的接口


4.【强制】代码中禁止使用反射


GetType().Get*()方法,是只能单线程执行的。在一个并发环境中,使用这样的代码,是无法发挥多CPU线程的优势的。反射的执行速度大概比普通代码慢10倍。


5.【强制】禁止使用以下引用和方法


"Finalize",
"MemberwiseClone",
// 这个会很消耗CPU,用户做逻辑计算是不会需要这个方法的
"GetType",
"Clone",
"GetHashCode",
"ResetObject",
"AfterDeserialize",
"AfterSerialize",
"AfterUpdateDirtyProperties",
"ClearDirtyProperties",
"DirtyProperties",
"GenerateObjectId",
"GetPropertyDirty",
"ParentIndex",
"ParentObjectId",
"ParentPropertyName",
"Serialized",
"SetPropertyDirty",
"SetPropertyUndirty",
// 回调类
"System.MulticastDelegate",
"System.IAsyncResult",
"System.AsyncCallback",
"System.IAsyncResult",
// 这个比较危险,这个是Disposable的
"H3.Data.Database.ICommand",
"H3.Data.Database.ICommandFactory",
"H3.Data.Serialization.ISerializer",
// 反射类
"System.Type",
"System.Reflection.PropertyInfo",
"System.RuntimeFieldHandle",
"System.RuntimeTypeHandle",
"System.Activator",
"System.Reflection.MethodInfo",
"System.Reflection.MethodBase",
"System.Reflection.MemberInfo",
"System.ComponentModel.MarshalByValueComponent",
// 下面这个访问是没有意义的,因为我们是分布式架构,其实无法Monitor的,而且这个会阻塞掉线程,实际上又没有用处
"System.Threading.Monitor",
"System.Collections.Concurrent.ConcurrentDictionary",
"System.Threading.Interlocked",
"System.Console",
"System.Environment",
"System.Timers.Timer",
"System.Timers.ElapsedEventArgs",
"System.Timers.ElapsedEventHandler",
"System.Reflection.Assembly",
"System.OperatingSystem",
"System.Version",
"System.AppDomain",
"System.TypeCode",
"System.IO.TextWriter",
"System.ComponentModel.Component",
"System.Data.SqlClient.SqlConnection",
"System.Data.SqlClient.SqlCommand",
"System.Data.SqlClient.SqlConnectionStringBuilder",
"System.Data.SqlClient.SqlDataReader",
"System.Data.SqlClient.SqlDataAdapter",
"System.Data.SqlClient.SqlTransaction",
"System.Data.SqlClient.SqlBulkCopy",
"System.Data.SqlClient.SqlBulkCopyOptions",
"System.Data.SqlClient.SqlParameterCollection",
"System.Data.SqlClient.SqlParameter",
"System.Data.Common.DbConnection",
"System.Data.Common.DbCommand",
"System.Data.Common.DbDataReader",
"System.Data.Common.DbDataAdapter",
"System.Data.Common.DbTransaction",
// 动态编译
"Microsoft.CSharp.CSharpCodeProvider",
"System.CodeDom.Compiler.ICodeCompiler",
"System.CodeDom.Compiler.CompilerParameters",
"System.CodeDom.Compiler.CompilerResults",
"System.Collections.Specialized.StringCollection",
"System.CodeDom.Compiler.CodeDomProvider",
"System.CodeDom.Compiler.CompilerError",
"System.CodeDom.Compiler.CompilerErrorCollection"


6.【强制】禁止对数据库进行DDL操作


数据库的DDL操作指的是数据定义语言(Data Definition Language)的操作,主要用于定义和管理数据库的结构。DDL操作包括创建(CREATE)、删除(DROP)、修改(ALTER)数据库和表等结构。


7.【强制】禁止对数据库大数据量的操作,如一次性读取上千条数据;


8.【强制】禁止循环调用数据库的操作;


9.【建议】不要通过SQL直接对数据库业务数据进行增删改的操作,需要通过接口操作;


10.【建议】前端子表行添加时,尽量采用批量添加


11.【强制】前端代码禁用循环调用服务端接口,构造一次性调用,返回一次性处理


12.【建议】对人员、部门、关联数据的赋值,尽量不只是赋值Id,采用赋值对象

Copyright(C)2023 HFBangFu Inc. All Rights Reserved 皖ICP备12017563号-5
收缩