【问题标题】:RESTful design pattern in MVC?MVC 中的 RESTful 设计模式?
【发布时间】:2012-06-23 17:58:59
【问题描述】:

我正在设计一个尝试遵循 REST 规范的应用程序。我正在尝试找出设计它的最佳方式。

假设我正在执行 POST 调用,因此我的控制器和模型中有一个“post”方法

// in controller
function post()
{
    //call post model here
}

在我的发布请求中,我需要进行以下检查:

-validate fields
-make sure item name is unique for that user
-make sure there are less than 10 items
-etc (there could be more cases)

现在在控制器发布函数中,我将根据发生的任何情况返回一个 REST 消息和状态代码,这很好,但我很想知道在哪里保留所有这些检查更好。

我可以将所有检查放入模型中,然后返回某种数组,例如:

array('text' => 'return response text/array or whatever here', 'code' => '200/400/etc')

然后在控制器中返回这个,还是将这些检查分解为模型中的单个函数,然后在控制器中执行所有检查?

// in controller
function post()
{
    //if validation fails -> send response
    //if name is not unique -> send response
    //etc...
}

从设计的角度来看,如果我想从其他方法中调用项目模型中的“post”方法,它不会有一个包罗万象的函数来处理它,但是如果我把它全部保留在一个模型函数并没有给我很多可重用性。如果我必须选边站,我可能不需要过多地重用那些“检查功能”,但是在模型而不是控制器中拥有所有这些响应信息似乎也很奇怪。

谁能给我一些意见。

【问题讨论】:

    标签: model-view-controller codeigniter rest backbone.js


    【解决方案1】:

    我不会在模型中创建 post 方法(尽管将它放在控制器中非常好),因为您只是将代码/模型放在这样一个不可重用且可读性较差的框架中。例如,我将创建 create 方法,而不是模型中的 post 方法。

    数据验证没有万能的方法。我喜欢为各种数据类型创建只有一种方法validate 的验证类(例如,用户名验证类检查它是否与正则表达式匹配并且是唯一的)。这比将验证代码复制粘贴到每个操作(DRY)要好。在哪里调用这个类方法?这取决于。您可以简单地在操作中调用它。由于验证代码在验证类中,所以看起来没问题。您还可以创建一个映射器来接受请求,确定必须执行哪些验证等,但这可能是矫枉过正并且很难正确执行(可维护性)。

    再次输出 - DRY。这取决于您使用的是什么 MVC 框架,并且可能已经有一个很好的解决方案。如果没有,您可以为此创建一个类(是的,我是 DRY 疯子)。您通过响应传递响应代码、数组(或字符串),并且类很好地将所有内容包装成 JSON、XML 格式。优点:如果你改变然后输出格式,那么你只需要改变一个地方。

    还可以考虑使用Remote Facade 模式。

    希望你在这篇文章中发现了一些有用的东西。

    【讨论】:

    • 感谢您的回复,这给了我一些想法。我正在使用codeigniter,所以我只是将所有这些案例都放入了一个自定义验证类中,这几乎解决了它。保持一切干燥并保持我的控制器和模型清洁。
    【解决方案2】:

    我会将 API 与 MVC 应用程序分开并使用 Apify

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多