> For the complete documentation index, see [llms.txt](https://monksoul.gitbook.io/hoa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://monksoul.gitbook.io/hoa/daimaguifan.md).

# 四、代码规范

不成规矩，无以方圆，一个优秀的框架和程序员应该有一套规范化的代码风格。

## 文件命名

* 所有可程序执行文件名均采用[大骆驼式命名法（Camel-Case）](https://baike.baidu.com/item/%E9%AA%86%E9%A9%BC%E5%91%BD%E5%90%8D%E6%B3%95/7794053?fr=aladdin)，也就是首字母大写，如 `MyServiceFile.cs`
* 所有非程序执行文件名均采用全字母小写命名法，如 `appsetting.json`
* 文件命名尽量采用英语单词组成，并且具有意义的命名，如：`AppConfigure.cs`
* 不推荐任何缩写命名方式，如：`AC.cs`
* 所有的接口文件名应以 `I`单词开头
* 文件命名格式应遵循：`{占位符}{修饰词}{名词}{类型}`规范，如：`HoaDynamicServiceFilter`

## 代码命名

* 所有类、接口、方法、属性、委托、枚举、选项、筛选器等 `Public` 类型应采用

  [大骆驼式命名法（Camel-Case）](https://baike.baidu.com/item/%E9%AA%86%E9%A9%BC%E5%91%BD%E5%90%8D%E6%B3%95/7794053?fr=aladdin)命名方式
* 所有的接口应以 `I` 单词开头
* 所有选项类应以 `Options` 结尾
* 所有筛选器应以 `Filter` 结尾
* 所有的帮助类应以 `Helper` 结尾
* 所有的拓展类应以 `Extension` 结尾
* 常量建议采用全字母大写命名方式，相连单词采用 `_` 连接，如：`JWT_CONFIG`
* 所有临时变量、方法变量应采用 [小骆驼式命名法（Camel-Case）](https://baike.baidu.com/item/%E9%AA%86%E9%A9%BC%E5%91%BD%E5%90%8D%E6%B3%95/7794053?fr=aladdin)命名方式，也就是首字母小写
* 私有变量建议以 `_` 开头并采用 [小骆驼式命名法（Camel-Case）](https://baike.baidu.com/item/%E9%AA%86%E9%A9%BC%E5%91%BD%E5%90%8D%E6%B3%95/7794053?fr=aladdin)命名方式

## 框架约定

* 所有需要构造函数注入的接口实例类型，必须继承 `ITransientDependency` 或间接继承
* `Hoa.Application` 层所有的 Service 应以 `AppService` 结尾
* `Hoa.Core` 层所有的自定义仓储的`Repository` 都应该以 `Manager` 结尾
* 任何 `Statup.cs` 配置的代码都应移到 `Hoa.Web.Core.HoaWebConfigure.cs` 中
* 视图层的公共代码应写在 `Hoa.Web.Core` 层
* 开发过程中，尽量做到一个功能模块一个 `文件夹`

## 注释规范

* 所有可执行文件头应添加以下格式：

```
/*!
 * 当前版本：
 * 文件名称：
 * 文件作者：
 * 编写日期：
 * 文件描述：
 */
```

* 所有类/属性/方法采用 三 `///` 方式

```
/// <summary>
/// 
/// </summary>
/// <param name="param1"></param>
/// <param name="param1"></param>
/// <returns></returns>
```

如果注释含引用关系，应添加 `<see cref="完整的程序集签名" />`&#x20;

```
/// <summary>
/// 
/// </summary>
/// <param name="param1"><see cref="Hoa.Application.Person.Gender"/></param>
/// <param name="param1"></param>
/// <returns></returns>
```
