在过去的4到5年里,我已经开发了很多使用C#属性的设计和框架。
但最近,我看到许多人公开反对使用它们,或者改变他们的框架,以减少对它们的需求或使用。
我发现它们是天赐之物,但现在我开始想知道我错过了什么。
需要澄清的是:使用约定而不是配置正在成为一个需要遵循的主要原则,尤其是在ORM领域。您可以使用配置文件(XML)映射字段,使用属性,或者具有直接映射到数据库表中的字段的通用命名约定。我没有任何可以引用的引用,但我读到了一些反对在混合中添加另一个属性的强烈反对意见。
但我觉得,在我刚刚列出的三个选择中,属性仍然是最有意义的。Config文件更难维护,而且一个通用的命名约定将您与数据库字段的实现联系在一起。属性被准确地放置在需要它们的地方,并且实现可以在不断开使用它的地方的情况下改变。
发布于 2009-04-17 18:24:44
属性实际上有两个目的:作为用户可见的东西,以及作为编译器发出的东西。
我假设你说的是用户可见的属性。
一般来说,我会说用户可见的属性并不理想。
大多数时候,它们被用来在C#之上嵌入某种形式的自定义语言。DLINQ属性就是一个很好的例子。从消费者的角度来看,一种更好的方法是向宿主语言添加一流的支持。这最终会让人感觉自然得多。(与所有疯狂的linq- to -sql属性相比,具有对定义表和外键的语言支持要容易得多)。
然而,在现实中,对于大多数开发人员来说,扩展编程语言的成本太高了。好处并不会超过成本。
也许有一天C#会有元编程功能,这将使做这类事情变得容易。
然而,目前这种能力还不存在。
这给你留下了3个选择:
通常情况下,#1最终是最容易做出的选择,即使它并不理想。
发布于 2009-04-17 18:08:26
这是一个很难给出一般答案的问题。属性是另一种语言功能,如果使用得当,它会非常强大,但也有可能被滥用。我从来没有看到过一个令人信服的理由完全抛弃属性的使用,也确实没有理由认为它们是一个坏主意。
事实上,事实恰恰相反。属性允许将框架特定的信息添加到元数据中。无法通过类型层次结构轻松表达的信息。这极大地增强了使用属性的框架的能力。
我肯定看到过一两个实现,人们滥用了它们,但并不壮观。你能说得更具体些吗?有没有你正在谈论的特定属性/框架。
发布于 2009-04-17 18:09:09
这是一个相当宽泛的问题,就像“我应该在砂锅里放奶酪吗”;对这两个问题的答案都是“这取决于你做的是什么”。
如果您大量使用添加,并且几乎像使用声明性编程范例一样使用它们,那么在此过程中您可能会遇到麻烦。无论它是来自于反射中的某个地方的速度减慢,还是仅仅是一般的可维护性,每个人都在猜测。
当它们合适的时候,就像所有的东西都else...use它们,使你的代码更有效率或可读性。不要为了使用而使用它们,也不要为了抛弃它们而放弃它们。
https://stackoverflow.com/questions/761537
复制相似问题