我需要在一个由两个主要部分组成的应用程序工作:在业务逻辑中使用反射是否是一种好的做法?
- 业务逻辑部分的具体业务类(如图书,图书馆,作者,...)
- 通用部分,可在数据网格中显示Books,Libraries,...,将它们映射到数据库...)。
泛型部分使用反射来从业务类中获取数据,而无需在业务类中编写特定的数据网格或数据库逻辑。这工作得很好,并允许我们无需调整数据网格和数据库逻辑增加新的业务类(例如LibraryMember)。
但是,多年来,代码被添加到业务类中,这些业务类还利用反射来完成业务类中的事情。例如。如果一本书的作者被改变,观察家们打电话告诉作者本身,它应该本书添加到其收藏的由他(Author.Books)写的书。在这些观察员,不仅实例都过去了,而且还直接从反思中得到的信息(这样,来电者知道,这本书领域的“作者”是改变字段信息添加到观察者调用)。
我可以清楚地看到在这些通用模块(如数据网格或数据库接口)中使用反射的优点,但在我看来,在业务类中使用反射是一个坏主意。毕竟,应用程序不应该尽量不依赖反思工作?还是在21世纪反思“正常工作方式”?
是因为你的业务逻辑使用反射好的做法呢?
编辑:一些澄清柯克的一句话:
- 试想一下,作者实现对图书的观察员。
- 书呼吁所有的观察者只要书的某些领域改变(如名称,年份#Pages,作者,...)。更改字段的'FieldInfo'在观察者中传递。
- 的作者,然后观察者使用该字段信息,以决定是否有兴趣在这个变化。在这种情况下,如果FieldInfo用于Book的字段Author,则Author-Observer将更新其自己的Books矢量。
你说'FieldInfo'通过,但我没有看到你解释如何使用它。具体而言,(除了传递信息类,这是相对无害的)如何使用反射? – 2010-10-13 14:15:48
你使用它像INotifyPropertyChanged接口(通常在WPF应用程序中使用数据绑定)?在属性设置时引发事件,使用属性名称? – 2010-10-13 14:42:56
@Amittai:不,这是一个相当自定义,使用反射的非常具体的实现。 – Patrick 2010-10-13 14:56:05