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

Будучи разработчиком 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'];

}
}

}

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

Слои

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

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

Завершить

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

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

1

Решение

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]