组织 MVC 后端

Organizing MVC Backend

如果我必须为内部 API 和外部 (public) 创建不同的方法,我应该如何正确组织控制器 API.

变体:

我问它的原因是美观和代码的可扩展性和可读性。

根据经验,我喜欢遵循控制器没有任何自定义方法的模式。 因此,您最终会得到很多非常薄的控制器,所以我会分解控制器以仅处理通用 RESTful 资源方法,例如 index update store destroy show。 我不会专注于将模型层与控制器层耦合。

例如: 如果我们有一个端点可以更新用户的个人资料图像 而不是这种结构UserController@updateImage我们会/User/ImageController@update因此总是坚持泛型方法。

由于您可以在 Controllers 中创建任意数量的文件夹,因此我在项目中实际做的是:

/Http/Controllers
| - V1
    | - Internal
        | - UsersController
        | - ProductsController
        | - UploadsController
        | - BackupController
    | - External
        | - Auth
            | - PasswordController
            | - ResetController
        | - DashboardController
        | - UsersController
        | - ProductsController

* V1 是可选的。我喜欢它,以便将来我可以更改为 V2 并在需要时更换一些控制器

通过这样做,您可以让您的路由组加载不同的 namespace/middleware 以向每组控制器提供正确的身份验证。然后每个控制器将只专注于几件事情,既漂亮又整洁,并且可扩展。

然后我会将我的业务逻辑放在一个文件夹中 app/Services 并将我所有的业务逻辑都写在那里,因此这会产生瘦控制器和瘦模型。控制器只是一个使用服务、路由请求和响应的地方。