MVC 创建 SQL 视图与将计算放入控制器

Posted

技术标签:

【中文标题】MVC 创建 SQL 视图与将计算放入控制器【英文标题】:MVC creating SQL views vs. putting calculations in the controller 【发布时间】:2012-05-19 10:11:43 【问题描述】:

我申请了一份工作,他们要求我在面试之前创建一个小型 MVC 应用程序。他们拒绝了,说我使用了不良做法。请帮我弄清楚我做错了什么!

该任务涉及一个简单的数据库,其中包含 ProductSales 的负载(一对多)。

我不得不:

    显示总销售额的产品列表 显示和允许编辑和删除销售

我的解决方案:

    创建一个左连接 SQL 视图,该视图使用一个组并连接到自身以获取销售总额。该表每个产品有一行

    创建一个包含所有产品和销售数据的内部连接 ​​SQL 视图。每次销售只有一行。

对于#1,我只是渲染了视图

对于 #2,我必须呈现产品详细信息和销售详细信息(在单个页面上一对多),因此我在控制器中执行了以下操作:

public ActionResult Details(int id)

     // get details for the selected product
     var product = db.ProductsWithTotals.Where(q => q.ProductId == id).Single();
     ViewData["CatalogueNumber"] = product.CatalogueNumber;
     ViewData["Title"] = product.Title;
     ViewData["Artist"] = product.Artist;
     ViewData["TotalSold"] = product.TotalSold;
     ViewData["ProductId"] = product.ProductId;

     // then pass its sales lines to the view
     var salesLines = db.SalesLineDetails.Where(q => q.ProductId == id);
     return View(salesLines);

如果有人能解释我如何才能更优雅地做到这一点,将不胜感激。

【问题讨论】:

你能从那些人那里找出他们不喜欢你的方法的地方吗?老实说,我觉得这很明智,而且是个好主意…… 我能看到的唯一“坏”事情是您的控制器与 L2S 绑定,您将无法切换到不同的数据访问组件,但我不会考虑这种不好的做法面试问题。如果拒绝您的申请的人没有考虑到解释他/她认为这是错误的原因,那么您没有得到这份工作可能会更好。和这样的人一起工作很痛苦... 非常感谢您的回复。很高兴知道我的设计没有根本性的错误。经纪人确实尝试过催促他们,但我收到的只是:“编码标准不够高。看起来他对所使用的一些技术只有非常基本的了解,并且有一些奇怪且不必要的代码,看起来可能是样板文件,或者从其他地方复制而来。”该任务是一个有拍摄截止日期的小项目,所以我认为可以使用 L2S 课程来节省时间。 Dradu,我认为你是对的,这可能是一种祝福。 这里唯一的潜在问题是。如果我有一个日志开发的想法,这意味着更改数据库(在数据提供者的情况下)和表结构。从这个角度来看,imo 更好:1) 带有组的查询并加入而不是视图,然后显示该 2) 用户首先需要选择某种类型的方法实例日期过滤器从->到和/或产品过滤器的销售输入参数,然后将它们过滤掉,然后编辑选定的一个,因为它将减少工作量。但正如已经建议的那样,我没有看到一个简单的显示应用程序存在任何根本缺陷 请向我们展示表格和视图。我能想到一些你可以做得更好的事情。如果您可以为您的问题添加更多细节,那么我可以给您一个详细的答案。 FWIW:您问题的标题没有准确描述问题。 【参考方案1】:

我个人唯一会做不同的事情是:

使用 EF(不过,L2S 适合这种快速入门者) 为详细信息视图创建一个 ViewModel 类。我尽可能少用 ViewData。

但是,是的,这里没什么不好的,我同意这可能不是一个工作的好地方。如果人们不想说他们不喜欢你的脸,他们也往往会编造模糊的理由。

/耸耸肩

【讨论】:

以上是关于MVC 创建 SQL 视图与将计算放入控制器的主要内容,如果未能解决你的问题,请参考以下文章

MVC 获取控制视图 HTML 值

在 MVC 中生成没有控制器的视图?

在 MVC 中创建具有上下文的控制器时如何省略视图的生成?

视图控制器MVC屏幕旋转内存警告

MVC4 - 添加新控制器后,未生成相应视图

模型-视图-控制器模式