Будучи разработчиком 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'];
}
}
}
Здесь мой класс ожидает ключ массива имени. Это просто кажется мне неправильным, потому что теперь мой класс тесно связан с набором результатов …
Я много читал на прикладных уровнях, таких как уровень домена, уровень обслуживания, сценарии транзакций, уровень приложения и т. Д.
Даже обладая этими знаниями, я не вижу решения своей проблемы.
Было бы здорово услышать ваши мысли о том, схожу ли я с ума без причины.
Также было бы здорово увидеть некоторые примеры кода или дополнительные материалы для чтения, книги и т. Д. Ссылки.
Я думаю, что вы можете быть слишком экстремальным с этим. Я бы не стал тратить слишком много времени, пытаясь выяснить, как репо может не знать, что у вас есть ключ с именем name. Кто-то должен будет зависеть от этого где-то в вашем коде, и я не думаю, что ваш репозиторий — плохое место для этого.
В конце концов, ваша цель должна заключаться в том, чтобы просто сэкономить вам и сопровождающим это время при создании новых функций, бизнес-правил или исправлении ошибок. По моему опыту, вы можете сделать это, изолировав части своего приложения, которые вы можете предвидеть как сложные или сильно изменяющиеся.
Поэтому я не буду беспокоиться о том, что хранилище знает имя ключа в наборе результатов, если только этот ключ не нужно сильно менять или если извлечение данных из набора результатов будет сложным процессом.
Других решений пока нет …