viewmodels应该包含静态函数方法吗?

时间:2015-10-21 13:21:34

标签: c# asp.net-mvc design-patterns model-view-controller software-design

如果我的Viewmodel设计用于视图目的 -

将一堆静态方法添加到viewmodel就好了 - 通过使用db中的数据获取项目列表(viewmodel对象)? - 使用viewmodel中的属性更新数据库?

我正在使用.NET MVC,感觉我的视图模型混杂了许多静态函数和更新方法。

为视图创建视图模型背后的主要原因是视图开始包含许多功能,必须从所有地方获取信息。因此,我决定创建一个viewmodel,通过一次调用从一个地方获取信息。

我是否遵循良好的编码模式?还是我在黑暗中拍摄?

2 个答案:

答案 0 :(得分:7)

  

向viewmodel

添加一堆静态方法是一种好习惯

,您的viewmodel应该只是一个http://i.stack.imgur.com/gR8HM.png,包含很少(如果不是零)业务逻辑。视图模型的唯一作用是将数据从控制器移动到视图。

一般而言:

  • 控制器应从某处
  • 获取模型的实例
  • 这可以直接由视图使用,或者如果需要多个模型 需要组合或额外信息(不在模型本身中) 然后可以创建一个视图模型。
  • 理想情况下,应在控制器外部创建视图模型 (保持控制器工作清洁),这可以简单地实现 使用POCO

如果您阅读MVC模式的factory pattern 。您会注意到它仅用于呈现数据,而不是业务逻辑:

  

模型 - 视图 - 控制器(MVC)是一种软件架构模式   实施用户界面

所以MVC对象(模型,视图或控制器)都不应该包含业务逻辑。 MVC模式的工作是呈现数据(句号)

所有人都说将简单的业务逻辑放入控制器是很常见的。但是,一旦网站变得更加复杂,就应该避免这种情况,因为担心会创建wikipedia page

答案 1 :(得分:1)

  

我是否遵循良好的编码模式?

不,这不是一个好的模式。

  

为视图创建视图模型背后的主要原因是视图开始包含许多功能,必须从所有地方获取信息。因此,我决定创建一个viewmodel,通过一次调用从一个地方获取信息。

存储功能或任何类型的逻辑不是ViewModel的目的。它应该只是一种传输机制,用于保存在View和Controller之间传输的数据。

考虑将您的“功能”移动到应用程序,服务或其他对您的应用程序架构有意义的层。