模型视图控制器 - 如何划分代码?

时间:2014-12-20 09:29:28

标签: design-patterns model-view-controller architecture architectural-patterns

关于如何在MVC模式中划分模型,视图和控制器的代码和职责,我有一个更普遍的问题。为了更好地理解,我将使用一个示例案例。

我的问题

应用程序分为模型,视图和控制器。如何在模型级别的某些操作期间处理错误,该错误应该在视图中显示?

我想到了两种可能性:

a)模型保存错误字符串并通知控制器和视图。然后,视图将从模型中轮询错误字符串并将其保存。然后控制器告诉视图显示错误。

b)模型将错误返回给控制器,控制器将错误传递给要显示的视图。

你认为最适合MVC模式的是什么? 或者更接近MVC模式的是什么?

非常感谢您提前

1 个答案:

答案 0 :(得分:2)

主要有两种方法:

首先我们应该记住Command Query Separation (CQS) principle

因此,我们希望在更改模型状态时出现命令错误。

您的模型可以抛出某种BusinesModelException异常或返回值为option typeNone表示成功(无错误),Some包含有关错误的信息。

具有操作结果允许在验证期间更容易地聚合错误,并且通过方法的签名通知调用者关于返回的错误。例如,在C#中如果没有正确记录,那么可以抛出哪些异常并不是很明显 如果您有大量操作,其中一些操作会返回错误,那么例外也不利于性能 当没有抛出异常时,我们通常意味着应用程序没有损坏状态,操作结果更自然地传达了这一点,而异常需要约定(无论是否可恢复)。

另一方面,异常可以穿越各层到达真正需要处理的程度。这允许代码更清晰:例如,我根本不需要捕获biz逻辑异常,而是在MVC中创建一个异常过滤器,正确地将其转换为适当的htmls状态代码和错误消息。中间层也不会意识到与错误相关的所有厨房。

异常更容易适应面向方面编程。

这两种方法可以结合起来。

我更喜欢例外。