标签: controller

胖模型,瘦控制器和MVC设计模式

我刚看了一篇博客文章,用银行类比来解释MVC.我有几个月使用MVC框架(CakePHP)进行Web应用程序开发的经验,所以我得到了基础知识,但我开始看到一个主题让我觉得我采用了一种有缺陷的方法来处理逻辑:

  • 胖子模特,瘦小的控制器
  • 尽可能在模型中保留尽可能多的业务逻辑

在我的应用程序中,模型是厌食症,控制器是肥胖的.我在控制器中有所有业务逻辑,除了模型中的关联和验证规则之外什么也没有.

通过我的控制器扫描,我现在可以识别出许多应该放在模型中的逻辑:

  • 该应用程序具有包含项目的列表,并且可以对项目进行排名.将列表按排名顺序排列的排序逻辑位于控制器中.
  • 同样,项目(项目模型)也有图像(图像模型).每个项目可能有一个默认图像(由items表中的image_id指定).当项目与其图像一起显示时,应首先显示默认图像.我有一个在控制器中执行此操作的逻辑.
  • 显示列表时,相关列表将显示在侧栏中.确定哪些列表相关的逻辑在控制器中.

现在问我的问题:

  1. 通过上面给出的示例,我是否正确地认为那些是属于模型的控制器中的逻辑实例?
  2. 应该进入模型的网络应用程序常见的其他逻辑领域是什么?
  3. 我确定发现这个问题并且改变我的设计模式是成功的一半,但即使我决定采用上面提到的那些例子并尝试将该逻辑移到模型中,我也不知道从哪里开始.任何人都可以通过在这里发布一些代码或链接到一些好的学习资源来指出我正确的方向吗?CakePHP特定的帮助会很棒,但我确信任何MVC都足够了.

model-view-controller controller cakephp model

75
推荐指数
2
解决办法
1万
查看次数

在Spring MVC中,如何在使用@ResponseBody时设置mime类型头

我有一个Spring MVC Controller,它返回一个JSON String,我想将mimetype设置为application/json.我怎样才能做到这一点?

@RequestMapping(method=RequestMethod.GET, value="foo/bar")
@ResponseBody
public String fooBar(){
    return myService.getJson();
}
Run Code Online (Sandbox Code Playgroud)

业务对象已经可以作为JSON字符串使用,因此使用MappingJacksonJsonView对我来说不是解决方案.@ResponseBody是完美的,但我怎样才能设置mimetype?

java spring json controller spring-mvc

75
推荐指数
3
解决办法
10万
查看次数

Spring注释@Controller与@Service相同吗?

Spring注释是@Controller一样的@Service吗?

我知道@Controller哪些可以用于URL映射和调用业务逻辑.

@Service用来注释包含业务逻辑服务类.

我可以使用@Controller而不是@Service注释Service类吗?

service spring controller

74
推荐指数
4
解决办法
10万
查看次数

asp.net mvc3返回raw html来查看

还有其他方法可以从控制器返回原始HTML吗?而不是仅使用viewbag.如下:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.HtmlOutput = "<HTML></HTML>";
        return View();
    }
}

@{
    ViewBag.Title = "Index";
}

@Html.Raw(ViewBag.HtmlOutput)
Run Code Online (Sandbox Code Playgroud)

controller return asp.net-mvc-3

73
推荐指数
4
解决办法
9万
查看次数

71
推荐指数
5
解决办法
4万
查看次数

一个单元应该如何测试.NET MVC控制器?

我正在寻找有关.NET mvc控制器的有效单元测试的建议.

在我工作的地方,许多这样的测试使用moq来模拟数据层并断言某些数据层方法被调用.这似乎对我没用,因为它基本上验证了实现没有改变而不是测试API.

我还阅读了一些文章,建议检查返回的视图模型的类型是否正确.我可以看到提供一些价值,但仅凭它似乎不值得编写许多行代码的努力(我们的应用程序的数据模型非常庞大和复杂).

任何人都可以建议一些更好的控制器单元测试方法或解释为什么上述方法是有效/有用的?

谢谢!

c# unit-testing controller asp.net-mvc-3

67
推荐指数
5
解决办法
6万
查看次数

Angularjs - 将参数传递给指令

我想知道是否有办法将参数传递给指令?

我想要做的是从控制器附加一个指令,如下所示:

$scope.title = "title";
$scope.title2 = "title2";

angular.element(document.getElementById('wrapper')).append('<directive_name></directive_name>');
Run Code Online (Sandbox Code Playgroud)

是否可以同时传递参数,以便我的指令模板的内容可以链接到一个或另一个范围?

这是指令:

app.directive("directive_name", function(){
    return {
        restrict:'E',
        transclude:true,
        template:'<div class="title"><h2>{{title}}</h3></div>',
        replace:true
    };
})
Run Code Online (Sandbox Code Playgroud)

如果我想使用相同的指令但使用$ scope.title2会怎么样?

arguments controller directive angularjs

62
推荐指数
4
解决办法
14万
查看次数

为什么我们不应该制作一个Spring MVC控制器@Transactional?

关于这个主题已经有一些问题,但是没有任何响应可以提供参数来解释为什么我们不应该创建一个Spring MVC控制器Transactional.看到:

所以为什么?

  • 不可逾越的技术问题吗?
  • 有架构问题吗?
  • 是否存在性能/死锁/并发问题?
  • 有时需要多个单独的交易吗?如果是,有什么用例?(我喜欢简化设计,调用服务器要么完全成功要么完全失败.这听起来是一个非常稳定的行为)

背景:几年前,我在团队中使用C#/ NHibernate/Spring.Net实现了一个相当大的ERP软件.对服务器的往返实际上是这样实现的:事务在进入任何控制器逻辑之前打开,并在退出控制器后被提交或回滚.该交易在框架中进行管理,因此没有人必须关心它.这是一个出色的解决方案:稳定,简单,只有少数架构师不得不关心交易问题,团队的其他成员只是实现了功能.

从我的角度来看,这是我见过的最好的设计.当我尝试使用Spring MVC重现相同的设计时,我进入了一个带有延迟加载和事务问题的噩梦,每次都有相同的答案:不要让控制器进行事务处理,但为什么呢?

提前感谢您的答案!

java controller spring-mvc transactional

60
推荐指数
3
解决办法
3万
查看次数

ASP.NET MVC:返回从控制器方法下载的纯文本文件

考虑需要将纯文本文件从控制器方法返回给调用者.这个想法是下载文件,而不是在浏览器中查看为纯文本.

我有以下方法,它按预期工作.该文件将显示给浏览器以供下载,文件将填充该字符串.

我想寻找这种方法的"更正确"的实现,因为我对void返回类型不是很满意.

public void ViewHL7(int id)
{
    string someLongTextForDownload = "ABC123";

    Response.Clear(); 
    Response.ContentType = "text/plain";
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.hl7", id.ToString()));
    Response.Write(someLongTextForDownload);
    Response.End();
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc controller download

59
推荐指数
2
解决办法
4万
查看次数

我们可以在RedirectToAction中将模型作为参数传递吗?

我想知道,有任何技术,所以我们可以Model作为参数传递RedirectToAction

例如:

public class Student{
    public int Id{get;set;}
    public string Name{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

调节器

public class StudentController : Controller
{
    public ActionResult FillStudent()
    {
        return View();
    }
    [HttpPost]
    public ActionResult FillStudent(Student student1)
    {
        return RedirectToAction("GetStudent","Student",new{student=student1});
    }
    public ActionResult GetStudent(Student student)
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题 - 我可以在RedirectToAction中传递学生模型吗?

asp.net-mvc controller asp.net-mvc-3 asp.net-mvc-4

58
推荐指数
3
解决办法
9万
查看次数