我想知道您对以下设计方案的看法。设计问题 - 使用事件,属性还是不是? (mvc)
我有一个'AgendaController'(.NET MVC项目),它处理用户操作,如查看他们的议程,约会等等。当用户进行预约时,约会被保存在数据库中。然后,必须完成一项“次要”任务,在这种情况下,向用户发送消息(无论是短信,电子邮件还是其他不相关的内容)。我可以用三种不同的方式实现这一点:
我可以简单地在控制器动作直接添加一个电话,像
messageService.SendNewAppointmentMessage(data)
。我想,这很好,虽然它确实让控制器的操作变得混乱了一点。具体来说,如果由于某些未来的需求需要做某些其他操作(例如,日志记录虽然不是一个好例子),但我还是会再次调用某个记录器类。我可以在AgendaController中声明一个静态事件
OnAppointmentMade
,并创建订阅此事件的MessageService。然后,当约会被保存时,事件被触发,并且实际的消息发送被处理在别的地方。如果这些要求出现,我可以有更多的课程订阅这个活动。这样,控制器动作保持非常干净,所有的“次要任务”都在其他地方执行。我可以在控制器动作
[SendNewAppointment]
上使用自定义属性,并在该属性的OnActionExecuting
方法中发送消息。这很好地遵循MVC设计我猜,但我不一定喜欢属性混乱:我会有一个Authorize
,AcceptVerbs
,ActionName
,SendNewAppointment
等etc属性在一个单一的控制器操作。
哪个设计是首选?哪一个肯定是不行?我对第二个设计略有偏好,但我不知道是否应该(事实上)使用这个事件。我真的很想听听你的意见!
我没有看到你如何订阅在控制器内部引发的事件。你需要控制器的实例。你会在哪里执行它? – 2009-07-01 13:52:29
这是一个静态事件。所以我只能说:AgendaController.OnNewAppointment + = MyEventHandler。 – Razzie 2009-07-01 14:49:48