属性与静态属性

Dav*_*ton 2 c# reflection

我有一个需要保存到MongoDB集合中的模型.要获得集合名称,我有两个选择.

1)属性

我用自定义属性装饰类,并使用反射来访问其中的值.然后我可以缓存它type以避免将来的查找.

[MongoCollection("Foo")]
public class Foo
{
}
Run Code Online (Sandbox Code Playgroud)

2)静态属性

这里我在类中有一个包含集合名称的静态属性.

public class Foo
{
    public static string CollectionName { get { return "Foo"; } } 
}
Run Code Online (Sandbox Code Playgroud)

我发现我倾向于选择前者,因为它看起来和感觉更干净,但是这里的一些高级开发人员正在利用反射来改头换面.

是否有第一种选择的情况,或者最好选择2?

Ond*_*cny 5

这是元数据与数据的明显案例:

  • 选项1:属性都应该持有的元数据对它们所连接到的实体.
  • 选项2:成员字段和属性,不管实例或静态,都应该保持数据组成的类的积分值.

因此,选项1属性是表示元数据的正确方法.反射的使用仅仅是技术性的,可以封装到一个单独的类中,例如AttributeManager,它可以简化对元数据的访问并适当地缓存它们以避免性能开销(在特定情况下应该是一个问题).

  • @DavidPilkington [.NET Framework设计指南](https://msdn.microsoft.com/en-us/library/2ab31zeh(v = vs.110).aspx)特别说明了你是否担心属性查找的速度,你可以考虑**密封**你的自定义属性类. (2认同)