Рубрики
1. Single responsibility principle SOLID

SOLID «EXAMPLE» класс выполняет http

класс DataFetcher имеет набор методов
для выполнения каких-то http запросов

class DataFetcher {
 get() {}
 post() {}
 put() {}
 delete() {}
}

реализуй метод для получения пользователя по http
добавляем в класс DataFetcher этот метод getUser и используем внутри метод get
вроде все хорошо, читабельно нормальная!

class DataFetcher {
 get() {}
 post() {}
 put() {}
 delete() {}

 getUser(id: number) {
  this.get('http://localhost:5000/' + id);
 }
}
  • сделай метод для получения реквизитов
  • сделай метод для получения списка клиентов

класс постепенно у нас разрастается!!!

class DataFetcher {
 get() {}
 post() {}
 put() {}
 delete() {}

 getUser(id: number) {
  this.get('http://localhost:5000/' + id);
 }

 getRequisites(id:number){
  this.get('http://localhost:5000/requisites' + id);
 }
 getClients(id:number){
  this.get('http://localhost:5000/clients' + id);
 }
}

Мы немного улучшаем код
мы выносим методы get,post,put,delete в отдельный класс HttpClient

class HttpClient{
 get(url: string) {}
 post() {}
 put() {}
 delete() {}
}
class DataFetcher{
 client: HttpClient;
 constructor(client){
   this.client = client;
 }

 getUser(id: number) {
  this.get('http://localhost:5000/' + id);
 }

 getRequisites(id:number){
  this.get('http://localhost:5000/requisites' + id);
 }
 getClients(id:number){
  this.get('http://localhost:5000/clients' + id);
 }
}

обобщенный DataFetcher мы разбиваем на два класса

  • UserService
    отвечает за логику с пользователем
    получение, создание, удаление,
  • RequisiteService
    отвечает за логику с реквизитами

не стоит пересоздавать лишние классы
все должно быть в меру

  • не стоит создавать save_user_service
  • не стоит создавать get_user_service

теперь каждый класс отвечает за одну зону ответственности

class HttpClient{
 get(url: string) {}
 post() {}
 put() {}
 delete() {}
}

class UserService{
 client: HttpClient;
 constructor(client){
   this.client = client;
 }

 getOneUser(id: number) {}
 getAllUser() {}
}

class RequisitesService {
 createRequisites() {}
 getRequisites() {}
 updateRequisites() {}
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *