As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




9年前关闭。




MVVM的新功能...我注意到我们的ViewModel正在执行以下操作:
  • 他们正在处理自己的异常
  • 他们正在直接实例化log4net记录器

  • 我的意见:
    我认为,我们应该创建一个包装log4net的静态日志记录帮助程序类,所有对象都应引用该类。这样,我们可以随时随地轻松地将日志记录实用程序更改为最少

    除非在极少数情况下,否则我认为模型和 View 模型对象(或类似的对象)不应捕获或管理错误。 (在任何类型的模型中)我们唯一应该捕获错误的时间是当我们确定无法轻易修复它时,因此,我们必须尽可能优雅地,简洁地处理它。即使这样,我们也必须小心不要使用异常来管理逻辑的正常流程(请参见下面的示例)。我们确实应该让更高的层记录和处理异常(即,UI层)。模型或 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应该非常简单,所以它实际上不需要记录任何内容。这应该留给应用程序基础结构。

    08-06 03:33