组织 MVC 后端
Organizing MVC Backend
如果我必须为内部 API 和外部 (public) 创建不同的方法,我应该如何正确组织控制器 API.
变体:
- 不划分控制器:[Model]Controller 将有两个 APIs 的方法;
- 为所有外部请求制作一个控制器:PublicApiController
- 按用途划分每个控制器:[Model]Controller、[Model]PublicController
- 除以 PublicReadController、PublicWriteController 等其他东西
我问它的原因是美观和代码的可扩展性和可读性。
根据经验,我喜欢遵循控制器没有任何自定义方法的模式。
因此,您最终会得到很多非常薄的控制器,所以我会分解控制器以仅处理通用 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
并将我所有的业务逻辑都写在那里,因此这会产生瘦控制器和瘦模型。控制器只是一个使用服务、路由请求和响应的地方。
如果我必须为内部 API 和外部 (public) 创建不同的方法,我应该如何正确组织控制器 API.
变体:
- 不划分控制器:[Model]Controller 将有两个 APIs 的方法;
- 为所有外部请求制作一个控制器:PublicApiController
- 按用途划分每个控制器:[Model]Controller、[Model]PublicController
- 除以 PublicReadController、PublicWriteController 等其他东西
我问它的原因是美观和代码的可扩展性和可读性。
根据经验,我喜欢遵循控制器没有任何自定义方法的模式。
因此,您最终会得到很多非常薄的控制器,所以我会分解控制器以仅处理通用 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
并将我所有的业务逻辑都写在那里,因此这会产生瘦控制器和瘦模型。控制器只是一个使用服务、路由请求和响应的地方。