关于如何在MVC模式中划分模型,视图和控制器的代码和职责,我有一个更普遍的问题。为了更好地理解,我将使用一个示例案例。
我的问题
应用程序分为模型,视图和控制器。如何在模型级别的某些操作期间处理错误,该错误应该在视图中显示?
我想到了两种可能性:
a)模型保存错误字符串并通知控制器和视图。然后,视图将从模型中轮询错误字符串并将其保存。然后控制器告诉视图显示错误。
b)模型将错误返回给控制器,控制器将错误传递给要显示的视图。
你认为最适合MVC模式的是什么? 或者更接近MVC模式的是什么?
非常感谢您提前
答案 0 :(得分:2)
主要有两种方法:
首先我们应该记住Command Query Separation (CQS) principle。
因此,我们希望在更改模型状态时出现命令错误。
您的模型可以抛出某种BusinesModelException
异常或返回值为option type。 None
表示成功(无错误),Some
包含有关错误的信息。
具有操作结果允许在验证期间更容易地聚合错误,并且通过方法的签名通知调用者关于返回的错误。例如,在C#中如果没有正确记录,那么可以抛出哪些异常并不是很明显 如果您有大量操作,其中一些操作会返回错误,那么例外也不利于性能 当没有抛出异常时,我们通常意味着应用程序没有损坏状态,操作结果更自然地传达了这一点,而异常需要约定(无论是否可恢复)。
另一方面,异常可以穿越各层到达真正需要处理的程度。这允许代码更清晰:例如,我根本不需要捕获biz逻辑异常,而是在MVC中创建一个异常过滤器,正确地将其转换为适当的htmls状态代码和错误消息。中间层也不会意识到与错误相关的所有厨房。
异常更容易适应面向方面编程。
这两种方法可以结合起来。
我更喜欢例外。