我想知道将自定义挂钩插入我的应用程序的最佳方法是什么。基本上,我的应用程序分为两个程序集:一个Core
包含所有业务逻辑的UserInterface
程序集和一个包含 GUI、控制器类(我正在使用异常的 MVC 模式调用“被动视图”)和一些帮助程序类的程序集。核心组件也被其他一些应用程序使用。
我们公司使用我的应用程序来处理来自其他公司的订单。所有公司的一般流程都是相同的,但这里和那里存在特定于客户的小偏差。截至目前,这些偏差已直接实施到核心组件中,闻起来很臭。我想将这些细节分开,最好将它们封装到每个客户的单个对象中,这样我就有一个包含所有客户特定细节的中心对象,我可以将其放入 UserInterface 程序集中。
我考虑过使用事件来实现这一点。通过在我的核心类中添加一些事件,我的控制器类将能够订阅或取消订阅为某些客户实现这些偏差的方法。
我可以想到两种方法:手动添加这些绑定或让它们自动添加,如果存在异常方法。我正在为后者考虑这样的事情:
foreach (Order order in form.SelectedOrders) {
CustomerExtension customer = customerExtensions[order.Customer];
if(Exists(customer.StatusChanging(...)) // Pseudo Code!
OrderManager.StatusChanging += new StatusChangingEventHandler(customer.StatusChanging(...));
order.SetStatus(newStatus);
if(Exists(customer.StatusChanging(...)) // Pseudo Code!
OrderManager.StatusChanging -= new StatusChangingEventHandler(customer.StatusChanging(...));
}
我想我必须使用反射来实现这一点,但这对于需要多次执行的操作是否可行?
或者有没有更好的方法来添加自定义钩子,同时让我以客户为基础集中偏差?
[编辑] 完全修改了问题。