@systemaworking

Как менять код соблюдая второй принцип SOLID?

Покажу простой rest api псевдо код:

class UserController:
    public function all(): array
        return $this->userService->all()->toArray();
       
    public function single($id): array
        return $this->userService->single($id)->toArray();
        
        
class UserService:
    public function all(): UserServiceDTOCollection
        $users = $this->repo->all();
        # convert UserRepositoryDTOCollection -> UserServiceDTOCollection
        $users->convert(UserServiceDTOCollection::class);
        
        return $users;
        
    public function single($id): UserServiceDTO
        $user = $this->repo->single($id);
       # convert UserRepositoryDTO-> UserServiceDTO
        $user->convert(UserServiceDTO::class);
        
        return $user
        
        
class UserRepository:
    public function all(): UserRepositoryDTOCollection
        ...
        
    public function single($id): UserRepositoryDTO
       ...


Вот мой код, если кратно тут 3 слоя: UserController, UserService, UserRepository, все отделены DTO'шками.

1. Как по принципам солид добавлять/удалять/менять контроллеры?

Как вижу я:

Добавлять/изменять - UserController2 extends UserController и DI:container(UserControllerInterface::class, new UserController2)

Удалять - тут уже в route.php просто удалять путь

2. Если поступила задача юзеру добавить новое поле, например Avatar, то как это сделать?

Как я вижу:

1. UserResitoryWithAvatar extends UserRepository
2. UserRepositoryAvatarDTO extends UserRepositoryDTO
3. UserRepositoryAvatarDTOCollection extends UserRepositoryDTOCollection,
4. UserService доваляют новый метод allWithAvatar():UserServiceWithAvatarDTOCollection
5. UserService доваляют новый метод singleWithAvatar():UserServiceWithAvatarDTO
6. DI:container(UserRepositoryWithAvatarInterface::class, new UserRepositoryWithAvatar)

Ни как не могу понять как все это менять, если есть кто толковый был бы рад списаться и обсудить в каком то чате (whatsapp, discord, ...). Все читаю, читаю, ... и не понимаю как использовать
  • Вопрос задан
  • 612 просмотров
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
для начала научись грамотно формулировать мысли и приводить работоспособные примеры
1. все строится на интерфейсах которые у тебя нихрена не описаны - откуда-то появляется UserControllerInterface
2. для проброса объектов использовать либо контейнеры, либо фабрики
3. не стоит пытаться создать holy controller подходящий для решения все задач
4. к OCP твой вопрос никак не относится - суть данного принципа в том, что свойства классов приватные, а геттеры/сеттеры - публичные, это позволит расширять класс при этом не модифицируя напрямую родителя
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 20:22
20000 руб./за проект
27 апр. 2024, в 19:58
2500 руб./в час
27 апр. 2024, в 19:48
10000 руб./за проект