我做了一个 PHP 的 API 接口,用户通过 domain.com/api?method=sign.auth2 提交 POST 请求
我在相关的 class 中的 __construct 中接收这些 POST 请求并处理然后直接在屏幕中返回 Json 内容
这是我的接口使用步骤
后来我发现这些 CLASS 有时候是需要被其他的 class 调用的,我没法在 __construct 中 return 什么内容回去. 不知道有什么两全其美的办法?
1
freeminder 2017-05-18 10:50:06 +08:00 1
设计问题,接收 POST,返回 Json 应该是 A 层。具体做逻辑的,也就是你所谓会被别人调用的,处于另外 B 层。就不会有你这个问题了。简单来说就是 Controller 负责接收参数,调用 Logic 层,返回 Json。Logic 层互相可调用。
|
2
vzyw 2017-05-18 10:50:19 +08:00 via iPhone 1
构造函数不适合输出东西吧
|
3
lurrpis 2017-05-18 10:53:22 +08:00 1
逻辑和控制放在一起,当然没办法解耦
|
4
otakustay 2017-05-18 10:54:27 +08:00 1
所以你为什么要用一个构造函数完成所有的功能,既然你只要一个函数,为啥要 class
|
5
freeminder 2017-05-18 10:55:43 +08:00 1
反正看起来就是想贼简单的写一个 web 服务,然而最终你会发现少很多东西。然后撸着撸着就重发明了一个框架,还贼丑。
|
6
hoythan OP 所以各位的建议是分开还是怎么改造?
|
7
Moker 2017-05-18 11:07:25 +08:00 1
__construct 不要返回任何数据 你可以新增一个方法 去返回 比如 response 或者 responseError
__construct 放在父类里面 可以统一用做校验或者鉴权 这种情况 如果有需要统一调用 就做成父类吧 |
9
Moker 2017-05-18 11:43:23 +08:00 1
@hoythan 异步的话 你抽出一层来做监听器 在控制器里面只负责触发或者把任务加入到队列 然后再用其他的方式去消费这些任务
|
10
jsjscool 2017-05-18 11:45:25 +08:00 1
MVC 框架设计很重要的一条就是避免 C 与 C 之间的调用。Model 你不用,Component 你不用,一定要用 C 写完全部……
|
11
dangyuluo 2017-05-18 11:53:55 +08:00 1
避免一个 controller 调用另一个 controller,如果一定有代码重复的话,把重复的代码抽象出来,或者成为 model,或者成为一个 private function,仅供内部访问。
如果是 Codeigniter 的话,还可以生成一个 helper 或者第三方 library |
12
visonme 2017-05-20 19:04:21 +08:00
你不应该尝试在__construct 中去返回任何结果。
对于 API 请求处理,第一层(应用层 /controller )处理应该只是起协调作用,具体的处理和返回应该放到业务逻辑层或者独立的服务层中去处理。 |