Как класс может быть слабо связан с приложением, если он читает данные из базы данных и интерпретирует результаты?

Как разработчик PHP, большинство моих проектов основаны на базе данных. Я большой любитель ООП, и хотя я новичок в мире объектов, я стараюсь следовать лучшим практикам, чтобы улучшить свои способности.

мой животрепещущий вопрос

Если у меня есть объект, которому требуется информация из моей базы данных, как этот объект слабо связан, поскольку он сильно зависит от результатов, возвращаемых базой данных?

Пример кода:

<?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'];

    }
}

}

Здесь мой класс ожидает ключ имени массива. Это просто кажется мне неправильным, потому что теперь мой класс тесно связан с набором результатов...

Слои

Я много читал о прикладных уровнях, таких как уровень предметной области, сервисный уровень, сценарии транзакций, прикладной уровень и т. д.

Даже обладая этим знанием, я не вижу решения своей проблемы.

Завершить

Было бы здорово услышать ваши мысли о том, не схожу ли я с ума без всякой причины.

Также было бы здорово увидеть некоторые примеры кода или дополнительные материалы для чтения, книги и т. д. ссылки.


person jakehallas    schedule 24.05.2016    source источник


Ответы (1)


Я думаю, что вы можете быть слишком экстремальным с этим. Я бы не стал тратить слишком много времени, пытаясь понять, как репо может не знать, что у вас есть ключ с именем name. Кто-то должен будет зависеть от этого где-то в вашем коде, и я не думаю, что ваш класс репо - плохое место для этого.

В конце концов, ваша цель должна заключаться в том, чтобы сэкономить время вам и тем, кто сопровождает эту кодовую базу, при внедрении новых функций, бизнес-правил или исправлении ошибок. И по моему опыту, вы можете сделать это, изолировав части вашего приложения, которые, как вы можете предвидеть, будут сложными или сильно изменяющимися.

Поэтому я бы не беспокоился о том, что репо знает имя ключа в результирующем наборе, если только этот ключ не нужно сильно менять или если извлечение данных из результирующего набора будет сложным процессом.

person arjabbar    schedule 24.05.2016
comment
Я медленно сходил с ума от собственного мыслительного процесса. Это как глоток свежего воздуха услышать это! Спасибо. - person jakehallas; 24.05.2016