风格指南
这是CatLib特有的代码风格指南,如果您在您的项目中使用CatLib,为了避免错误,降低沟通成本,小纠结和 反模式,阅读本指南是一份不错的选择。
我们不能保证风格指南中的所有内容,对于所有工程和团队都是理想的,所以根据项目环境,周围技术环境,风格出现偏差是可行的。
我们应该尽可能的遵守本风格指南提出的建议。
根据周围技术堆栈对于命名规范相关我们建议您阅读微软提供的:框架设计指南
优先级定义
(A)必须
这些规范会帮你规避错误,您必须准守这些规范。这里可以存在例外,但是应该非常少见,只有您非常熟悉c#和周围技术栈且具备充足理由的情况下可以进行例外。
(B)强烈建议
这些规范能够在绝大多数项目中改善可读性和程序优雅度。即使你违反了,代码还是能照常运行,可以存在例外,但例外应该尽可能少且有合理的理由。
(C)建议
在这些规则里,我们提出一个默认的建议,如果理由充分,你可以随意在你的代码库中做出不同的选择。
(D)不建议
这些规则会导致代码变得难以维护甚至出现bug。这些规则列出了存在的潜在技术风险,并说明了它们什么时候不应该被使用。
(A)
项目名始终作为命名空间的开头
命名空间的第一个片段为项目的名字。这样做可以避免不同的第三方服务提供者提供的类发生冲突。
错误的例子
namespace FileSystem { public class FileSystem { } }
正确的例子
namespace CatLib.FileSystem { public class FileSystem { } }
(A)
服务的命名空间必须和服务的父级文件夹名一致
所有的服务(由多个类组成)命名空间必须和其父文件夹名字保持一致(对于根文件夹可以不包含在命名空间中,如:Providers),以避免通过目录检索时无法明确服务位置,同时可以避免现在以及未来的类名相冲突。
错误的例子
Providers/CatLib.FileSystem/AdapterLocal.cs
namespace CatLib.IO { public class AdapterLocal { } }
Providers/CatLib.FileSystem/OSS/AdapterAliyunOSS.cs
namespace CatLib.IO.OSS { public class AdapterAliyunOSS { } }
正确的例子
Providers/CatLib.FileSystem/AdapterLocal.cs
namespace CatLib.FileSystem { public class AdapterLocal { } }
Providers/CatLib.FileSystem/OSS/AdapterAliyunOSS.cs
namespace CatLib.FileSystem.OSS { public class AdapterAliyunOSS { } }
(A)
文件名必须与类名一致
所有的类名必须和文件名一致,以避免通过目录来检索类时出现不一致的问题(这意味着我们不能将两个类写在同一个文件中,除非它是内部类)。
错误的例子
Providers/CatLib.FileSystem/AdapterLocal.cs
public class Local { }
正确的例子
Providers/CatLib.FileSystem/AdapterLocal.cs
public class AdapterLocal { }
(A)
内部类的访问级别不能高于protected
所有的内部类,不允许将访问级别设定为public
或internal
,因为如果内部类可以被外部访问,将会出现不可预测的问题。
错误的例子
public class FileSystem { public class Disk { } }
正确的例子
public class FileSystem { private class Disk { } }
(A)
对待编译器警告视同错误
所有的编译器警告都应该被处理,忽略编译器警告可能会导致一些隐藏的bug。
错误的例子
int a = 0; if(a == null) // 引发一个编译器警告 { }
正确的例子
int a = 0; if(a == 0) { }
示例中会导致完全不同的两种结果。
(A)
对外服务的接口放在API命名空间下
对外服务的接口放在API命名空间下,这样在IED using的时候可以避免错误的使用实现代码而发生耦合。
一般来说我们放置在:项目名
.API
.组件名
的命名空间下
错误的例子
Providers/CatLib.FileSystem/API/IFileSystem.cs
namespace CatLib.FileSystem { public interface IFileSystem { } }
正确的例子
Providers/API/CatLib.FileSystem/IFileSystem.cs
namespace CatLib.API.FileSystem { public interface IFileSystem { } }
(B)
完整单词的类名
类名应该倾向于完整单词,而不是单词的缩写。
代码编辑器的自动补全功能已经让书写长类名的成本变得非常的低,而其带来的的明确性是非常宝贵的,我们不应该使用缩写来代替长类名。
错误的例子
Providers/ CatLib.FileSystem/ ManagerFS.cs OptsFS.cs 正确的例子
|