我有一个实体的创建页面和编辑页面。页面是相似的,所以我有一个包含页面之间公共字段的基本视图模型,以及一个从基本继承的每个页面的视图模型。
这两个页面之间的区别之一是,create页面有一个搜索表单,用户可以在其中输入条件并使用ajax查询进行搜索。搜索条件字段不是实体的一部分。我为不同的搜索条件创建了一个具有自己的属性的"SearchCriteria“子模型,这样我就可以在执行搜索时简单地发布这个模型,并且将来可能会添加更多的搜索条件,而不必修改方法参数。
事实证明,我确实需要添加一些其他东西,但其他东西是基本视图模型的属性之一。我不确定最好的方法是什么。我认为我将不得不将该属性视为不再常见,并将其移动到我的编辑视图模型和SearchCriteria模型中,但随后我将丢失到实体的公共映射,并将不得不重复代码。
我想我可能在什么地方弄错了,所以一些设计建议将不胜感激。
谢谢
发布于 2011-10-06 22:49:10
我也遇到过类似的问题。首先,使用搜索功能。您可以创建SearchServiceController。然后,当您想要显示搜索栏时,添加一个局部视图并向其传递一个模型,否则传递null并不显示任何内容。这样,您就可以通过将搜索功能保留在自己的进程中来分离关注点。
至于添加一个不会被使用的属性,我觉得这并不是什么大问题。.NET框架充满了不实现部分基类的子类。相反,您可以抛出NotImplementedException。对我来说,为了获得一致性和干性而进行权衡是非常值得的。
就我个人而言,我发现在控制器之间共享视图模型并不是一件好事(但在这种情况下,您可能使用单个控制器)。在使用IoC和Ninject时,当我在控制器之间将接口绑定到相同的视图模型时,我得到了大量的循环冗余错误。出于这个原因,我去掉了Ninject。但是,也许你可以在另一个layer...have上绑定,而不是尝试它。
https://stackoverflow.com/questions/7675871
复制相似问题