何时以及如何使用基于属性的编程
问题描述:
我已经看到许多ORM映射表/列到C#中使用自定义属性的相应类。即使实体框架以类似的方式做。我试图找出何时以及如何使用属性来使我的解决方案更加易于管理且高效和可扩展。何时以及如何使用基于属性的编程
一些问题陈述我认为它可能是有用的是 1.映射表/视图到类
Table Employee{ Name, Age, salary, height}...
class Employee{Name, Age, Salary, Height}...
- 映射密钥值对/字典来 类
表
PersonAttributes{
Column1, Column2
"Age", "25"
"Salary", "3000"
"Weight", "80"
...
}
Class Person{
string Name;
[MapToTable(TableName="PersonAttributes", Key="Column1", Value="Column2",DataType="Int", Field="Age",)]
int Age;
[MapToTable(TableName="PersonAttributes", Key="Column1", Value="Column2",DataType="Int", Field="Weight",)]
int Weight;
[MapToTable(TableName="PersonAttributes", Key="Column1", Value="Column2",DataType="Int", Field="Salary",)]
int Salary;
}
答
Metaprogramming来装饰你有用组装成员(即组件,类型...)和类型成员来提供提示,系统可以根据这些提示做出假设以执行某些操作或以某种特定方式运行。
实际上,在.NET中,属性是一种提供比修饰符已经做的更多语义的方法。例如:
-
public
,private
,internal
,protected
... -
implicit
,operator
,overrides
...
后来,使用反射,你可以反省你的组装和装配成员基于它们建立一个环境。
例如,有[Required]
数据注释来告诉验证框架,OR/M或序列化程序,给定的类属性应强制包含一个值。总之,我不会说属性只是描述映射语义,但它们是一个强大的工具来实现约定或声明性的方法来提供关于你的系统应该如何工作的提示。