我有一个.net应用程序,其中包含表单层,数据库模型层(实体框架)和控制器层层。
我需要处理这种情况:
用户按下按钮编辑某些参数
表单需要请求一些表示这些参数的当前状态的数据库
显示模态表单,用户更改参数并确认
在数据库模型中进行了更改
这很简单。
事实是,在第4点,我们需要在第2点处已经处理过的数据。
特别是:
返回以模态形式显示的几个复选框的状态
在第4点,我们需要再次使用LINQ处理数据
是否值得重新加载和重新处理数据以维护MVC模式?
答案 0 :(得分:3)
我不知道它在VB.NET中是如何工作的,但如果我们以纯粹的“MVC”方式看待这个问题(至少,我是如何理解的),那就是不对。
由于在步骤2和步骤4之间可能已经过了很多时间并且数据可能在2次调用之间发生了变化,我认为执行2次请求是可以的。此外,由于它们在控制器中是两个不同的功能,我认为你没有选择。
我就是这样看的,但我错了:)
修改强> 的
我不知道对数据库的查询是耗时的并且这是一个问题。如果绝对的目标是不让用户等待两次,因为在这个应用程序中时间很重要,我想你可以存储您在内存中的第2步获得的对象,并使用控制器检索它(使用某种辅助类)。这就像在数据库中进行查询,但在内存中。如果你使用repository pattern,那么编码控制器中逻辑的程序员甚至不知道他在查询除数据库之外的东西,因为它是另一个抽象层次。您可以在第4步之后立即释放内存。
答案 1 :(得分:0)
哦,我不是百分百确定,但问题中的流量模式看起来不正确?
通常的程序是显示数据,并在那里有一个带有数据视图的编辑按钮
所以你可能有像
这样的东西Function ShowAddressDetails(OwnerId as long) as ActionResult
你的ActionResult通常是一个要传递给VIEW的MODEL 也许(保持地址记录样本)像......
Return View(AddressRecordModel)
使用OwnerId参数
从SQL DB中提取地址记录在您的VIEW中,您的EDIT按钮位于 你有至少两个选择, 那些
1. Reload data from SQL (used where data may have changed since last action)
2. Pass the already loaded Model (Used where the data hasnt changed)
这意味着你有以下任何一个(或两个)
Function EditAddressDetails(OwnerId as long) as ActionResult
或
Function EditAddressDetails(Model as AddressRecordModel) as ActionResult
或者你可能有“CHILDACTION”而不是“ACTION”的
另外请不要忘记以下内容...... 在HTTP GET请求中,模型从CONTROLLER传递到VIEW 在HTTP POST请求中,Model从VIEW传递到CONTROLLER 那你应该确实有模型(数据)?
最后,如果序列仅由ONE用户使用,则数据不应在请求之间发生变化,UNLESS和EDIT / AMEND / UPDATE请求成功完成。