asp.net-mvc-3 - 是否应该在 MVC 框架中的 Model 类中调用 Web 服务?

标签 asp.net-mvc-3 model-view-controller .net-4.0

假设我有 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/

相关文章:

asp.net-mvc-3 - 部署到 azure 计算模拟器时缺少静态内容

java - 如何解决MVC设计模式中的java.lang.StackOverflowError(加上mySQL)

c# - Math.Atan2 产生奇怪的结果?

.net - 如何在 MVC3 Controller 中处理存储库对象

c# - 具有多态对象数组的 JSON 反序列化

asp.net-mvc-3 - enctype = "multipart/form-data"的表单发布导致参数无法传递

java - spring mvc - 如何在不创建 View 的情况下从 Controller 检索值

model-view-controller - knockoutjs 的无容器语句在 hottowel SPA 中不起作用?

c# - .NET 4、AllowPartiallyTrustedCallers 属性和 SecurityCritical 等安全标记

wpf - 可以对复合对象的字段进行数据绑定(bind)吗?