c# - View 模型应该包含记录器吗?

标签 c# design-patterns mvvm

<分区>

MVVM 的新手...我注意到我们的 ViewModel 正在执行以下操作:

  1. 他们正在处理自己的异常
  2. 他们正在直接实例化 log4net 记录器

我的意见:
在我看来,我们应该创建一个包装 log4net 的静态日志记录助手类,所有对象都应该引用它。这样我们就可以随时轻松地更改日志实用程序

除了极少数情况外,我认为模型和 View 模型对象(或类似对象)不应该捕获或管理错误。我们应该捕获错误(在任何类型的模型中)的唯一时间是当我们确定我们无法轻易修复它时,因此,我们必须尽可能优雅和简洁地处理它。即便如此,我们也必须小心不要使用异常来管理正常的逻辑流(参见下面的示例)。我们真的应该让更高层记录和处理异常(即 UI 层)。模型或 View 模型的唯一工作应该只是……成为模型或 View 模型……主要是因为其他事情只会使代码困惑。但也因为我觉得它创造了更好的分离。我不会将日志实用程序放入模型或 View 模型中,就像我不会将数据传输对象 (DTO) 放入模型或 View 模型中一样。一旦我这样描述它......我想我们可以很容易地理解为什么我有这种感觉。

我所说的处理正常逻辑流的例子:

MealExpenses expenses = expenseReportDAO.getMeals(employee.Id)
expenses.ForEach(x => {
Try
{
   total += expenses.getTotal();
}
Catch(MealExpensesNotFound ex)
{
   total += getMealPerDiem();
}
})

...我相信你能明白为什么上面的例子不好。

所以我的问题是:
View 模型应该包含记录器吗?它应该做什么?它不应该做什么?大家怎么看?

最佳答案

ViewModel 应该是 View 使用的数据的简单容器,并且不应该有非直接与 View 关联的行为(例如,点击处理程序) .即使它确实具有的行为也应该委托(delegate)给 Model

因此,作为一个 ViewModel 应该非常简单,它真的不需要记录任何东西。这是应该留给应用程序基础架构的事情。

关于c# - View 模型应该包含记录器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069724/

相关文章:

c# - WPF数据绑定(bind)问题

c# - 在 Entity Framework 中使用 DbContext 运行异步调用

javascript - 如何处理react.js中缺失的字段

java - 在 View 中保留 Controller 的引用或使用监听器

design-patterns - UnitOfWork 是否等于事务?或者它不止于此?

数据绑定(bind)属性更新的 WPF 平滑过渡

c# - 让 ViewModel 对象持有 Dispatcher 是否被认为是不好的做法?

C# 在范围外重新抛出异常

c# - 动态表单控件

c# - 在 DataTemplate 中调用 Storyboard