如果 class 从数据库中读取并解释结果,它如何与应用程序松散耦合?

How can a class be loosely coupled to an application if it is reading from a database and interpreting the results?

作为一名 PHP 开发人员,我的大部分项目都是数据库驱动的。我是 OOP 的狂热爱好者,虽然是对象世界的新手,但我尝试遵循最佳实践来提高我的能力。

我的迫切问题

如果我有一个对象需要来自我的数据库的信息,那么该对象是如何松散耦合的,因为它严重依赖于数据库的返回结果?

代码示例:

<?php

class Test {

protected $repository;

public function __construct(Repository $repository)
{
    $this->repository = $repository;
}

public function process()
{
    $results = $this->repository->where('id', 1)->get();

    ( ! empty($results) ) ?: ''; // do something bad.

    foreach ($results as $result) {

        // This is my problem, my class now knows it needs an array key of name to be available.
        // Is this bad? 
        echo $result['name'];

    }
}

}

在这里,我的 class 需要名称的数组键。这对我来说感觉不对,因为现在我的 class 与结果集紧密耦合...

图层

我一直在做大量关于应用层的阅读,例如域层、服务层、事务脚本、应用层等。

即使具备这些知识,我也找不到解决问题的方法。

完成

很高兴听到您关于我是否无缘无故地把自己逼疯的想法。

如果能看到一些代码示例或进一步的阅读材料、书籍等链接,那就太好了。

我认为您对此可能过于极端了。我不会花太多时间去弄清楚 repo 是如何不知道你有一个名为 name 的密钥的。有人将不得不依赖于你代码中的某个地方,我认为你的回购 class 不是放置它的好地方。

最后,您的目标应该只是在实现新功能、业务规则或修复错误时节省您和此代码库的维护者时间。根据我的经验,您可以通过隔离您可以预见的复杂或经常变化的应用程序部分来做到这一点。

所以我不会担心存储库知道结果集中某个键的名称,除非该键需要进行大量更改,或者如果从结果集中检索数据将是一个复杂的过程。