【发布时间】:2016-08-23 09:24:35
【问题描述】:
背景
我想我已经有了这个问题的答案,但我正在努力尽可能地坚持 MVVM,并在漫长的道路上学到很多东西。
我目前已设置好 View、ViewModel 和 Model。我的模型正在使用实体框架查询数据库。
My View 有一堆控件,允许用户设置查询的参数(基本上是构建一个大的 where 子句)。ViewModel 存储这些通过控件设置的选项。
所以我的视图-视图模型交互看起来很不错,我认为这是可以接受的。
问题
我的模型公开了一个函数,该函数将查询结果作为某种 IEnumerable 返回。我现在遇到的问题是我让用户设置的“搜索条件”的数量。我现在有模型函数的 9 个参数。不知道能不能接受至少,它是丑陋的。非常难看。但是这样一来,我的 viewModel 只需要保存模型的一个实例,然后只需要知道一个函数及其签名。
问题
我应该在模型中设置属性,然后在视图模型中设置这些属性吗?这样,单个函数会更清晰,但视图模型必须更加“了解”模型具有哪些属性。我知道仅仅创建一些公共属性并不是什么大不了的事,但我想知道哪个更适合 MVVM。我们当前的代码库没有关注点分离。所以我独自一人。
问题中的代码
当前模型功能:
public IEnumerable<> GetResults(string id, string inputName, DateTime? fromDate,
DateTime? toDate, bool option1, int selectCount, bool exactMatch = true, bool showFailed = false)
{
//QUERY HERE, returns results
}
相关 ViewModel 调用:
var queryResults = MyModel.GetResults(id, inputname, FromDate, ToDate, Option1, selectCount, ExactMatch, ShowFailed);
Results = queryResults.ToList();
建议模型:
public string Id {get;set}
public string InputName {get;set}
public DateTime? FromDate {get;set}
public DateTime? ToDate {get;set}
public bool Option1 {get;set}
public int SelectCount {get;set}
public bool ExactMatch {get;set}
public bool ShowFailed {get;set}
public IEnumerable<> GetResults()
{
//Query here, return results
}
相关提议的 ViewModel 调用:
MyModel.Id = this.Id;
MyModel.InputName = this.InputName;
MyModel.FromDate = this.FromDate;
//...etc (I put the this. to clarify the view model also has those properties).
var results= MyModel.GetResults();
【问题讨论】:
-
有几件事我会像你一样做:1. 引入强类型参数对象以摆脱当前的 9 个参数,2. 创建一个外观,其关注点是创建你的模型,传递 GetResults() 调用, 3. 通过它自己的抽象将结果映射到视图模型。
-
+1 到@kayess。另见自动映射器lostechies.com/jimmybogard/2009/01/23/…
标签: c# wpf mvvm model viewmodel