我是否需要为每个方案使用单独的模型/控制器,或者我可以为多个方案重用单个模型/控制器吗?

时间:2016-04-22 16:17:08

标签: c# ajax asp.net-mvc

我的主页模型/视图/控制器(配置页面的初始状态)工作正常。

但我也需要回应用户在页面上所做的更改(从选择中选择一个选项,选中一个复选框等),并且还没有让它工作。

也许我遇到问题的原因是我试图重复使用我的" Home" model,它不仅包含我需要的页面初始化,还包含其他一些内容。例如,我的模型:

public class HomeModel
{
    public DataTable Units { get; set; }
    public DataTable Reports { get; set; }
    public DataTable UnitReportPairEmailVals { get; set; }
    public DataTable UnitReportPairGenerateVals { get; set; }
    . . .
}

...包含页面首先需要的东西("单位"和"报告"以及省略号点所代表的东西),但也只是稍后需要的东西(另一个)两个显示)。

我想知道至少部分问题是将数据恢复(通过对HomeController中的另一个方法的Ajax调用)是因为我应该使用单独的模型和控制器来进行Ajax调用。

所以我想知道:模型/控制器是否会增加代码异味/反模式,还是必要的?我应该创建另一个模型,如:

public class AJAXModel
{
    public DataTable UnitReportPairEmailVals { get; set; }
}

......还有一个相应的独立控制器吗?

如果我有一个在各种场景中使用的复杂模型,似乎每次我将模型作为Action的返回值(结果)传回时,很多多余的/未填充的东西也会被传回(只有我当时在Controller中填充时感兴趣的成员,因此传回了很多空/空成员)。

所以我的问题是,我应该为每个"用例"创建特效模型/控制器,还是可以 - 或者甚至更好 - 将一堆东西组合成一个模型/控制器对? / p>

1 个答案:

答案 0 :(得分:2)

没有令人信服的理由将Model限制为单个Controller,或者期望Controller只有一个Model。您可以在一个Controller中编写整个应用程序(顺便说一句,这真的很糟糕)。

通常,划分是逻辑划分...在一个控制器中与同一组Models通信的一堆操作。当你打开源文件时,更多的是让你的大脑不会融化。

您经常有多个Views,并且他们倾向于使用控制器中的Actions来命名名称,但这并不是严格执行的。

当您认为View中的数据超出必要时,可以通过将Model映射到ViewModel来简化View中的代码来简化View 1}}。是的,这是MVVM ......而且......大脑在Controller中处理更简单的对象时受到的伤害更少。

您可以在var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); io.on('connection', function(socket){ console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); }); io.on('data', function(data) { console.log('DATA from client is: ' + data); // Close the client socket completely }); server.listen(4200); console.log('Monitoring server listening on port 4200'); 中手动映射对象,也可以使用自动映射器进行映射。有一些可供选择......它们使MVVM变得更简单。您不一定需要一个。他们只是有帮助。