Покажу простой 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, ...). Все читаю, читаю, ... и не понимаю как использовать