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)
谢谢.
保罗
如果您要遵循MVC精神,您的savePerson方法不应接受原始输入.它不应该与来自ui的数据格式直接耦合.相反,它应该接受在服务域条款中定义的输入,例如"人"对象.(这可能只是像Cobby建议的关联数组).将原始输入映射到服务所需的格式将是控制器的操作方法的工作.
这个额外翻译步骤的好处是它将您的服务(模型)与ui隔离开来.如果实现不同的ui,则无需更改服务接口.你只需要编写新的控制器(当然还有视图).
虽然你的例子savePerson($title, $firstName, $lastName...)是正确的想法,但当你有超过2或3个参数的方法时,这通常是一个不好的迹象.您应该能够将相关参数分组到某种更高级别的对象中.