应用服务层 - 如何编写API方法接口

Pau*_*sen 7 php model-view-controller service web-applications service-layer

人们如何设计服务层接口?

我正在编写一个大型Web应用程序(在PHP中),我们正在使用MVC,并编写精简控制器,例如(伪代码如下)

public savePersonAction() {
    $input = filter($_GET);
    ... input validation ...

    $result = $this->_service->savePerson( ? );

    ... etc
}
Run Code Online (Sandbox Code Playgroud)

应该在服务中的savePerson采用整个$ input结构或上下文的参数(在PHP中,是一个关联数组)?

这个 -

public function savePerson(array $input) {
Run Code Online (Sandbox Code Playgroud)

或者应该将所有输入字段分开并提供"硬"接口,例如

public function savePerson($title, $firstName, $lastName, $dateOfBirth, ... etc.. for many more) {
Run Code Online (Sandbox Code Playgroud)

谢谢.

保罗

del*_*ala 5

如果您要遵循MVC精神,您的savePerson方法不应接受原始输入.它不应该与来自ui的数据格式直接耦合.相反,它应该接受在服务域条款中定义的输入,例如"人"对象.(这可能只是像Cobby建议的关联数组).将原始输入映射到服务所需的格式将是控制器的操作方法的工作.

这个额外翻译步骤的好处是它将您的服务(模型)与ui隔离开来.如果实现不同的ui,则无需更改服务接口.你只需要编写新的控制器(当然还有视图).

虽然你的例子savePerson($title, $firstName, $lastName...)是正确的想法,但当你有超过2或3个参数的方法时,这通常是一个不好的迹象.您应该能够将相关参数分组到某种更高级别的对象中.