【发布时间】:2026-02-11 00:50:02
【问题描述】:
我申请了一份工作,他们要求我在面试之前创建一个小型 MVC 应用程序。他们拒绝了,说我使用了不良做法。请帮我弄清楚我做错了什么!
该任务涉及一个简单的数据库,其中包含 Product 和 Sales 的负载(一对多)。
我不得不:
- 显示总销售额的产品列表
- 显示和允许编辑和删除销售
我的解决方案:
创建一个左连接 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:您问题的标题没有准确描述问题。
标签: sql asp.net-mvc view one-to-many