class Article {
private UUID id;
private CommentsRepository comments;
...
public void function addComment(commentData: commentData) {
this.coments.add(new Comment(this.id, commentData));
}
}
Есть функция проверки пароля и логина, она берет информацию из env. Может это вообще model ? Она применяется в двух контроллерах.
protected onSomethingHappened()
) и статических вызовов Utils сложновато проследить поток выполнения. (Utils выпилить).class UserData {
/**
* @readonly
* @var string
*/
public $source;
public function __construct(string $source)
{
$this->source = $source;
}
}
class NoSupportingSenderFound extends \Exception {}
class AnswerTransportError extends \Exception {}
interface AnswerSender {
public function supportSource(string $source): bool;
/**
* @throws AnswerTransportError
*/
public function sendAnswer(string $answer): void;
}
class AnswerSenderFacade
{
/**
* @var AnswerSender[]
*/
private $senders = [];
public function __construct(AnswerSender ... $answerSenders)
{
$this->senders = $answerSenders;
}
/**
* @throws AnswerTransportError
* @throws NoSupportingSenderFound
*/
public function sendAnswer(UserData $userData, string $answer)
{
foreach ($this->senders as $sender) {
if($sender->supportSource($userData->source)) {
$sender->sendAnswer($answer);
return;
}
}
throw new NoSupportingSenderFound("...");
}
}
3) Сделать новый класс AdvancedBalance унаследовать от Balance и переопределить метод getBalance
4) Сделать новый класс AdvancedBalance унаследовать от Balance и создать новый метод getAdvancedBalance,
молится что ничего не сломалось
хоть тесты и есть
с принципом открытости закрытости, который рекомендует расширять классы для добавления новой функциональности.
При подключении модуля ему передается Экземпляр класса UnitOfWork и , соответственно, модуль может пользоваться всеми полями (репозиториями таблиц) и обращаться к их свойствам.
То есть, если модулю необходимо создать свою таблицу или использовать дополнительный функционал - то он не может это сделать, потому что в экземпляре UnitOfWork нет свойств и определенных методов.
Как правильно поступить, чтобы Ядро не подстраивалось под модули, а модули подстраивались под ядро. И именно модули использовали средства ядра для комфортной работы с базой.
Один из слоев - "Data Access Layer", сокращенно DAL, который позволяет получить доступ к базе данных. Главная задача данного слоя - абстрагироваться от источника данных, так как мне нужно поддерживать и mysql и postgresql
Как избежать дублирования кода в микросервисной архитектуре?
Простой пример 2 сервиса используют одну базу и одну таблицу
модель орм на 1 экран кода, и как мне поступить без копипасты чтобы она была и так и там
Не проверять же перед добавлением нового свойства/метода нет ли с таким же именем в родительских классах?