php - 我应该访问模型中的 POST 参数还是作为方法参数从 Controller 传递?

标签 php model-view-controller encapsulation

我必须处理大约 20 个 POST 参数,但我不确定在哪里处理。

我可以将每个定义为模型上方法的参数,并在调用方法时从 Controller 传递它们。由于参数的数量,这将导致大量工作并使函数调用的可读性降低。

或者我可以调用模型上的方法,然后直接访问参数。

将参数作为实参传递可以让我更好地控制函数访问哪些参数,并且文档将更加不言自明。但是,如果稍后添加新参数,则必须将它们添加到方法调用的末尾,以免破坏每个现有调用。我想如果这种情况发生几次就会变得非常困惑,因为无法对参数进行逻辑分组。

如果我访问模型中的参数,则无需将任何参数从 Controller 传递到模型,从而使方法调用更简洁。但我无法控制访问的参数,因为它们可以轻松且不受限制地添加或删除。这将需要其他开发人员加强纪律,我不喜欢依赖于此,因为迟早会有人“快速地(添加|更改|修复)这个”。

我不确定该走哪条路。我倾向于在模型中完成这一切,因为这样写起来更快,看起来更容易维护(没有争论困惑)并且在概念上更适合我对模型的看法。 另一方面,我不确定我对模型的看法是否正确,如果我依赖其他开发人员在每次更改后始终更新文档,它是否会以困惑告终。

那么,我该怎么办呢?

最佳答案

那么,为什么您不能只接受一个(关联)数组作为模型方法中的参数,然后将整个 $_POST 数组传递给它呢?至少在我看来,它不会破坏封装。

编辑: 如果您不喜欢为此使用关联数组,您还可以使用所谓的“普通旧对象”(仅用于携带数据的对象,如C)。例如,如果这涉及保存已提交的注册表:

class UserData
{
    protected $name;
    protected $username;
    protected $password;

    public function getName() { /* <...> */ }
    public function setName() { /* <...> */ }
    /* other accessors go here */
}

class UserController extends Controller
{
    public function register()
    {
        $userData = UserData::create()
            ->setName($_POST['name'])
            ->setUsername($_POST['username'])
            ->setPassword($_POST['password']);
        Users::add($userData);
    }
}

这将允许您在 Users::add 中使用严格类型化,还可以简化文档编制过程。

关于php - 我应该访问模型中的 POST 参数还是作为方法参数从 Controller 传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1293474/

相关文章:

php - Paypal 预批

php - 组织州和城市并以某种方式显示 PHP

java - Spring Boot 可以设置从 Controller 端点下载的文件的名称吗?

backbone.js - 我何时或为什么会使用 marionette.behavior?

php - 将大量数据从 XML 存储到 MYSQL 数据库以获取 PDF

c++ - 模型/ View : Filtering data beforehand in database or at runtime in proxy model?

java - 有没有一种方法可以在没有样板代码的情况下在 Java 中实现转发对象模式?

java - 该设计在多大程度上违反了封装性

java - 混淆Java封装概念

php - 如何在 Laravel 5 (5.2) 中的另一个存储库类中注入(inject)一个存储库