你认为C#attributes(或类似的机制)是个好主意还是不鼓励使用它们?

你认为C#attributes(或类似的机制)是个好主意还是不鼓励使用它们?,c#,attributes,custom-attributes,C#,Attributes,Custom Attributes,在过去的4到5年中,我基于许多使用C#属性的设计和框架 但是最近我看到很多人公开反对他们的使用或者改变他们的框架来减少他们的需要或者使用 我发现它们是上天的恩赐,但现在我开始怀疑我错过了什么 澄清: 使用约定而不是配置正在成为一个需要遵循的主要原则,尤其是在ORM领域。在这个区域中,您可以使用配置文件(XML)映射字段,使用属性,或者使用直接映射到数据库表中字段的通用命名约定。我没有引用任何参考文献,但我读到一些反对在混合中添加另一个属性的言论 但是我觉得我刚才列出的三个选择仍然是最有意义的。配

在过去的4到5年中,我基于许多使用C#属性的设计和框架

但是最近我看到很多人公开反对他们的使用或者改变他们的框架来减少他们的需要或者使用

我发现它们是上天的恩赐,但现在我开始怀疑我错过了什么

澄清: 使用约定而不是配置正在成为一个需要遵循的主要原则,尤其是在ORM领域。在这个区域中,您可以使用配置文件(XML)映射字段,使用属性,或者使用直接映射到数据库表中字段的通用命名约定。我没有引用任何参考文献,但我读到一些反对在混合中添加另一个属性的言论


但是我觉得我刚才列出的三个选择仍然是最有意义的。配置文件更难维护,通用命名约定将您与数据库字段的实现联系在一起。属性被准确地放置在需要的地方,并且实现可以在不中断使用的情况下进行更改。

这是一个很难给出一般答案的问题。属性是另一种语言特性,如果正确使用,它的功能非常强大,但确实有可能被滥用。我从来没有看到过完全放弃使用属性的令人信服的理由,也没有理由认为它们是个坏主意

事实恰恰相反。属性允许将特定于框架的信息添加到元数据中。无法通过类型层次结构轻松表达的信息。这大大提高了使用属性的框架的能力


我确实看到过一两个实现,其中有人滥用了它们,但没有什么了不起的。你能说得更具体些吗?是否有您正在谈论的特定属性/框架

在定义代码的元数据时,我发现它们非常有用。我使用它们生成自定义报告、插件体系结构以及与第三方代码通信


我想你可以按惯例做任何事情,但我喜欢它们。

好吧,如果ASP.NET MVC是一个值得信赖的工具,我会说不要担心。在这个框架中,使用反射和属性做了很多工作,我看不出有任何问题。MVC是一个相当新的框架,它被广泛使用。从验证输入、处理错误到非常棒的ActionFilter属性,都有很多。所以不,我个人认为它们没有什么问题。

这是一个相当广泛的问题,比如“我应该在我的砂锅里放奶酪吗”;两者的答案都是“这取决于你在做什么”

如果您大量使用addributes,并且几乎像使用声明式编程范例一样使用它们,那么您可能会在这一过程中遇到麻烦。不管它是来自反射的某个地方的减速,还是仅仅是一般的可维护性,都是任何人的猜测


它和其他东西一样……在适当的时候使用它们,使代码更高效或可读。不要为了使用它们而使用它们,也不要为了放弃它们而放弃它们。

我看到ASP.NET MVC中大量使用属性。事实上,切换到MVC使我大大增加了属性的使用。我不确定你对反属性反弹的看法是从哪里来的,但我肯定从MS看不到,至少在MVC方面是这样


我特别喜欢使用属性在这些经过修饰的控制器/动作之间提供横切行为(方面)的方式。看到如何构建MVC来处理操作调用前后的属性调用,我不得不相信这是让方面在MVC中工作的首选方法

属性实际上有两个用途:作为用户可见的东西,以及作为编译器发出的东西

我假设您讨论的是用户可见属性

一般来说,我认为用户可见属性并不理想

大多数情况下,它们用于在C#之上嵌入某种形式的自定义语言。DLINQ属性就是一个很好的例子。从消费者的角度来看,更好的方法是向宿主语言添加一流的支持。这最终会让人感觉更自然。(使用语言支持定义表和外键比使用所有疯狂的linq到sql属性要容易得多)

然而,实际上,对大多数开发人员来说,扩展编程语言的成本太高。好处并不超过成本

也许有一天C#将具有元编程功能,这将使这类事情变得容易

然而,目前还不存在这种能力

这给您留下了3个选项:

  • 使用属性
  • 使用动态语言,并在运行时生成代码
  • 只是不要使用生成性编程

  • 通常#1是最容易做出的选择,即使它并不理想。

    我个人认为属性,像大多数语言功能一样,有其地位,但也可能被滥用或误用

    在正确的框架中,它们是无价的。它们确实简化了DI框架之类的事情(这是一个很好的例子),并且对于测试框架之类的事情非常非常有用


    然而,我认为疯狂地添加用户定义的属性可能有点过头了。我个人喜欢使用属性,但尽量减少属性的使用,并且只在它们最有意义的地方使用它们。

    你能参考一些不鼓励使用属性的链接吗?我会试试看我能找到什么。+1,我忍不住要笑“沙锅里的奶酪”的评论。你是从什么地方得到的吗?哈哈,不,我刚想到:)我正在把它作为一个目标,在下周的电子邮件对话中使用它。我经常使用属性。作为f