使用MVC以可重用的方式将客户端逻辑与服务器端逻辑分开

Zac*_*tes 8 javascript model-view-controller asp.net-mvc

在回答之前,这个问题很复杂:

  1. 我们正在使用asp.net/asp.net mvc/jQuery进行开发,但我对使用任何框架的任何平台上的解决方案持开放态度
  2. 我认为像排序/隐藏列/重新安排列/验证(它有意义)的逻辑应该在客户端
  3. 我认为搜索/更新db/running工作流的逻辑应该在服务器端(仅仅是出于安全/调试的原因)

我们要做的就是在我们的UI中创建一个MESS,通过编写一堆JavaScript来处理不同上下文中的相同功能.我知道我可以使用JavaScript文件+面向对象的JavaScript,我正在寻找使这一切变得更容易的模式.

提出的一个解决方案是在客户端和服务器端都有一个MVC模型,我们可以在客户端控制器中封装JavaScript功能,然后在站点的不同部分使用它们.但是,这意味着我们有2个MVC实现!

这有点矫枉过正吗?您将如何扩展此解决方案?还有哪些其他解决方案?

小智 2

两个;您应该始终进行服务器端验证和客户端验证

上三;如果您能找到一种在客户端操作数据库的方法,那将令人印象深刻;)

我不知道 ASP.net 是如何工作的,所以我只是根据我的 PHP 经验来谈谈。

我会编写由服务器和客户端代码配对的控件。每个控件都需要一个表单、客户端逻辑和服务器端逻辑。表单由模板引擎编写,客户端逻辑附加到表单并用 JS 编写,服务器端逻辑是操纵模型的控制器/操作对。显然,您不想将客户端逻辑耦合到特定的操作/控制器,因此请务必定义一个可用于与您的控件对话的接口......

然后,对于每个表单,我会用 javascript 编写一个类来实例化您的控件。例如; 你可能有一个控制:

{include file = "list_view.php" id = "ListView1" data = $Data.List}
Run Code Online (Sandbox Code Playgroud)

这会打印出你的表格。然后在您的页面控制器类中:

this.ListView1 = new ListViewController({id : "ListView1", serverCtrl : "Users"});
Run Code Online (Sandbox Code Playgroud)

现在您可以使用“this.ListView1”来操作列表视图。列表视图控制器会执行诸如在用户按下下一页按钮时进行 AJAX 查询新页面之类的操作,并且还处理列和排序(这也将委托给服务器)。

  • 有一些 JavaScript 框架允许您访问数据库。这样做类似于使用 ASP.NET 数据控件,很酷但不可扩展。您需要使用多少 JavaScript 才能实现可扩展的植入,这归结为为什么?C#、LINQ、EF/其他 ORM 比 JavaScript 领先数年。PHP 和 ASP.NET MVC 是两个不同的开发世界。同样在 ASP.NET MVC 中我们没有控件。我们更接近客户端和 JavaScript,因此您的方法会发生变化,并为您提供更多自由。 (4认同)