0

我正在设计一个尝试遵循 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”方法,它不会有一个包罗万象的函数来处理它,但是如果我确实将它全部保存在一个模型函数中它没有给我很多可重用性。如果我必须选边站,我可能不需要过多地重用这些“检查功能”,但是在模型而不是控制器中拥有所有这些响应信息似乎也很奇怪。

谁能给我一些意见。

4

2 回答 2

1

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

于 2012-06-23T18:23:54.087 回答
1

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

There is no one-fits-all way for data validation. I like creating validation classes which have only one method validate for various data types (e.g. username validation class checks if it matches regex and is unique). It's better than copy pasting the validation code to every action (DRY). Where to call this class method? It depends. You can simply call that it in the action. Since the validation code is inside the validation class, it will look alright. You can also create a mapper which takes the request, determines what validations have to be performed and etc. but it might be overkill and is hard to do properly (maintainability wise).

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

还可以考虑使用远程外观模式。

希望您在这篇文章中找到了一些有用的东西。

于 2012-06-23T22:37:08.833 回答