MVVM新手......我注意到我们的ViewModel正在执行以下操作:
我的意见:
在我看来,我们应该创建一个包装log4net的静态日志记录助手类,所有对象都应该引用它。通过这种方式,我们可以随时轻松地更改日志记录实用程序
除了在极少数情况下,我不认为模特&查看模型对象(或类似对象)应该捕获或管理错误。唯一一次我们应该捕获错误(在任何类型的模型中)是当我们确信我们无法轻易修复它时,因此,我们必须尽可能优雅和简洁地处理它。即便如此,我们必须小心不要使用异常来管理正常的逻辑流程(参见下面的示例)。我们应该让更高层次的记录和更新处理异常(即UI层)。模型或视图模型的唯一工作应该只是...成为模型或视图模型...主要是因为其他事情会简单地混乱代码。但也因为我觉得它创造了更好的分离。我不会在数据传输对象(DTO)中将日志实用程序放在模型或视图模型中。一旦我这样描述......我想我们可以很容易地理解为什么我会这样。
我所说的处理正常逻辑流程的一个例子:
MealExpenses expenses = expenseReportDAO.getMeals(employee.Id)
expenses.ForEach(x => {
Try
{
total += expenses.getTotal();
}
Catch(MealExpensesNotFound ex)
{
total += getMealPerDiem();
}
})
......我相信你能明白为什么上面的考试很糟糕。
我的问题是:
视图模型是否应包含记录器?它该怎么办?它应该做什么?你们觉得怎么样?
答案 0 :(得分:4)
ViewModel
应该是视图所使用的数据的简单容器,并且不应该没有直接与视图关联的行为(例如,单击处理程序)。即使它所拥有的行为也应该委托给Model
。
因此,ViewModel
应该非常简单,它实际上不需要记录任何内容。这应该留给应用程序基础架构。
答案 1 :(得分:0)
我不明白为什么不。通常,视图模型位于应用程序集中,而不在库项目中。在创建库时,抽象记录器可能是有意义的,但在GUI应用程序中没有必要。无论如何,应用程序将依赖于记录器库。除非您计划每周更换记录器,否则无需执行此操作。
答案 2 :(得分:0)
当然,ViewModel可以包含一个Logger,但只需确保它的界面,以便可以模拟它。您不希望视觉工作室设计师使用非模拟记录器。 IMO,如果你真的想要进行客户端日志记录,那么最好使用你最喜欢的IoC容器注入ILoggerService。