假设我有 WCF Web 服务,可以检索 <Person>
的集合对象。我的问题是我应该在哪里放置代码来调用 Web 服务、 Controller 或模型?我的第二个问题是我是否也应该创建自己的 <Person>
类放在我的模型文件夹中,还是只使用在 .NET 项目中添加服务引用时自动生成的类?
最佳答案
通常我会让 Controller 使用 WCF 服务来加载数据,有时也可以是模型。在更复杂的应用程序中,您可能需要一些东西来将 WCF 返回的内容(数据传输对象)转换为您的模型,这实际上超出了“MVC”模式。
<小时/>您可能想查看Nerd Dinner示例并查看他们如何组织代码。它旨在成为结构相当良好的 MVC3 应用程序的“现实世界”示例。
Hanselman 还对几个不同的 NerdDinner fork 进行了汇总审查,这些 fork 进行了不同类型的数据访问 on his blog .
<小时/>@Splash-X 的代码片段
我在“不是 MVC 模式的一部分”评论中试图表达的是,有时 DataModel(DB 或 WCF 返回的内容)与 ViewModel(您发送到 View 的内容)不同,所以有时您可能需要在模型之间进行转换,例如:
public interface ITransformer<out To, in From>
where To : class
{
To Transform(From instance);
}
public class SomeDataToSomeViewModelTransformer : ITransformer<SomeViewModel, SomeDataModel>
{
public SomeViewModel Transform(SomeDataModel instance)
{
return new SomeViewModel
{
InvitationId = instance.Id,
Email = instance.EmailAddress,
GroupId = instance.Group.Id
};
}
}
我的任何评论都旨在暗示模型之间的“转换”并不是由 MVC 模式决定的。或者更一般地说,不要认为仅仅因为您遵循 MVC,就意味着您只能拥有 3 种类类型。并非一切都是模型、 View 或 Controller 。 Controller 可以并且将会使用 MVC 模式本身未规定的其他类。
这就是我的评论的全部意思。我再次意识到这不是最好的措辞。抱歉。
关于asp.net-mvc-3 - 是否应该在 MVC 框架中的 Model 类中调用 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322686/