一个视图模型应该有多厚?例如,我的视图模型或模型应该处理实际的筛选吗?
例如,假设我有一个名册对象,它保存了分配给类型(即全职、兼职等)的用户集合。与其拥有一个大型视图模型来处理全职或兼职的筛选(因为这是客户端选择的内容),不如由名册模型通过使用roster.GetUsersByType(type)
来处理这个问题。
我的Schedule对象(包含事件列表)也有类似的问题。在我看来,由于我有一个包含所有用户日程的主计划,所以最好由模型过滤它,并给我一些类似Schedule userSchedule = masterSchedule.GetScheduleOfUser(user)
或Schedule selectedSchedule = masterSchedule.GetScheduleByDateInterval(dateFrom, dateTo)
的东西。
此外,如果我想交换视图来测试一个新的字段(因此,需要一个新的视图模型),那么我需要将这个过滤逻辑添加到新的视图模型中(违反DRY)。
然而,我读到很多视图模型应该很厚,并且应该处理过滤和UI逻辑。我是不是理解错了?似乎大多数人在做MVVM时都会实现贫血的域模型(因为这是大多数教程所展示的.例如,对我来说,这将是带有用户对象和事件对象的ObservableCollection在ViewModel中)。
但是,尽可能地将逻辑推入各个组件中似乎更自然。
发布于 2018-01-24 08:17:58
如果您期望在程序中的多个地方使用过滤器方法,如果您知道过滤器只会在特定的ViewModel中使用一次,那么我将倾向于在模型中进行过滤。
https://softwareengineering.stackexchange.com/questions/364608
复制