Angular лучшее решение для отображения объектов, классов или сервисов или статических функций - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно сопоставить результат json с моим локальным объектом класса с помощью конвертера, поэтому у меня есть несколько идей для этого:

  • Создание класса "JsonResult2TableElementConverter"
  • Создание инъекционного объектасервис, который может включать в себя все конвертеры проекта
  • Создание функций 'export let function convertJson2Table ()' и т. д.

Подскажите, пожалуйста, что лучше?Может быть еще один?У вас есть подобный опыт?Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Прежде всего, лучше сделать конвертацию на серверной стороне .Сервер должен вернуть дружественный DTO для внешнего интерфейса.

@ Решение JFPicard хорошо , только если вы используете классы для моделей сущностей в Angular.Затем вы можете добавить методы в модель, как в шаблоне ActiveDirectory.

К сожалению многие люди используют интерфейсы для моделей сущностей. Этот подход имеет много преимуществ в Angular.При таком раскладе было бы лучше обернуть все внутри инъекционного сервиса.Позже вы можете макетировать эту услугу с помощью механизма Angular DI.Это:

  • более тестируемый
  • более масштабируемый
  • вы можете легко изменить поведение через DI of Angular

Переместив эту логику вРазделяемый инъекционный сервис инкапсулирует эту логику в отдельном слое.Инкапсуляция всего в вашем классе сделает этот класс толстым, и в будущем насмехаться над этой функцией будет не так просто.

PS.Использование чистых классов машинописи в Angular , которые нельзя вводить (то есть они не являются сервисами Angular), и , который содержит ЛЮБУЮ логику приложения , всегда меня пугает.Для меня это как «вспомогательные» классы в ASP.NET, созданные вне DI-контейнера, которые потом доставляют немало хлопот.

0 голосов
/ 22 октября 2018

По моему мнению, получение класса преобразования идет вразрез с принципом Single Resposability SOLID.

Я думаю, что лучше всего было бы иметь локальный объект класса, имеющий функцию или конструктор, передающий результат JSON впостроить класс.

Таким образом, ответственность за преобразование будет на классе, который использует данные.Следовательно, если вам нужно изменить какую-либо логику, вы касаетесь только соответствующего класса, а не огромного класса с большим количеством функций преобразования.

@ Karol Trybulec:

Локальный класс должен быть возвращенинъекционная услуга как:

export class TestService {

    public constructor (private http: HttpClient) {
    }

    public callHttp (url: string, parameters: any): Observable<DTOTest> {
        return this.http.get(url, {params: parameters})
        .pipe<boolean>(map((result) => {

            return of(new DTOTest(result));
        }));
    }
}
...