C#属性命名约定

C#属性命名约定,c#,.net,custom-attributes,C#,.net,Custom Attributes,C#中的属性应使用带“Attribute”后缀的PascalCase命名。我的问题涉及到更微妙的事情;当涉及到自然语言时,属性应该如何命名 例如,我在ASP MVC应用程序中有一个authorization属性,用于检查登录用户是否有权查看模块(由特定控制器表示)。我决定将其命名如下: [IsLoggedUserAuthorizedToSeeModule(ModuleName = ModuleManager.Modules.ExampleModule)] public class Example

C#中的属性应使用带“Attribute”后缀的PascalCase命名。我的问题涉及到更微妙的事情;当涉及到自然语言时,属性应该如何命名

例如,我在ASP MVC应用程序中有一个authorization属性,用于检查登录用户是否有权查看模块(由特定控制器表示)。我决定将其命名如下:

[IsLoggedUserAuthorizedToSeeModule(ModuleName = ModuleManager.Modules.ExampleModule)]
public class ExampleModuleController : BaseController
{
    ...
}
这对我来说很容易理解,但这是一个很长的名字,我对此表示怀疑。Microsoft通常提供默认属性的简短名称,但它们不是很同质。
Serializable
属性意味着修饰类可以序列化。
obsoletAttribute
属性意味着修饰类具有某种状态。描述和类别属性定义元数据

可以找到默认.NET属性的完整列表


是否有关于属性命名约定的指导原则?你知道关于它的文章吗?

属性应该用简短的帕斯卡大小写句子命名

毕竟,它们装饰程序集成员,当您看到应用的属性时,您希望理解它们仅仅读取名称的含义

无论如何,如何命名属性是主观的。可能对我有意义的事情,可能会让你感到不安

关于具体属性
IsLoggeDuserAuthorizedToSemouleAttribute
,也许可以简化为只
AllowedModuleAttribute
,您应该实现另一个属性
AuthorizedAttribute
():


[仅可视授权]
在我看来会更好。它听起来更像一个语句,属性是关于它的,而您的名称听起来像一个函数。似乎
ModulePermissions
是一个更通用的名称,以后可以添加其他属性
IsLoggedUserAuthorizedToSeeModule
是特定的,如果该属性将来需要支持其他选项,则可能需要更改。用户是将
记录到文件中还是在会话中登录到
中?我会使用命令将其命名为:
[ExposeModuleToAuthenticatedUser]
[ExposeModuleToLoggedUser]
@MarkJansen很好,谢谢。与其说是
允许模块
,不如说是
模块
,因为在您的场景中,“允许的”部分已经由其他属性(授权)处理了。@SamAxe好的,
授权
意味着*您需要获得安全性的授权*。这就是将
Allowed
作为属性的一部分进行维护的原因。您可以登录并获得授权,但不允许使用某些模块。恐怕您是对的,这是主观的。当涉及到已登录用户和模块的拆分时,我不需要检查用户是否已登录,它在别处完成。@Landeeyo您不需要检查“已登录用户”。属性是描述性的。Authorize+Allowed module=“您必须登录,我允许您使用此模块”@Landeeyo思考数据注释。你能想象一个属性“MinLengthAndNotEmptyAttribute”吗?不可以。应该有两个属性,MinLength和NotEmpty
// This way you splitted out the concept of "logged users" and "what module"
[Authorize, AllowedModule(ModuleManager.Modules.ExampleModule)]
public class ExampleModuleController : BaseController
{
    ...
}