Автор оригинала: Jesse Langford.
Я использовал антикоррупционные слои в моем реакцию + приложения Redux сейчас. Это полезный рисунок дизайна, когда асинхронные данные ваши получателя трудно работать или нуждаются в некоторых санитарии, прежде чем выпустить его в состояние вашего приложения.
Что такое антикоррупционный слой?
Антикоррупционный слой представляет собой слой между различными подсистемами, которые не делятся одной и той же семантикой.
Для меня эти слои – это функции, которые усиливают или преобразуют данные, прежде чем он вступает в мое глобальное состояние, или сразу после того, как он уходит.
Я буду продемонстрировать несколько простых примеров того, как я использовал антикоррупционные слои, чтобы сделать глобальное государственное управление немного легче на себе.
Улучшение данных
Допустим, вы ожидаете получить запись пользователя структурированной, как это
пример
И вам нужно построить страницу, которая выглядит так
Мне нравятся мои компоненты, чтобы сделать как можно меньше работать, поэтому я создам новый интерфейс с некоторыми переменными помощника, которые расширяют мой оригинальный пользователь. Я сохраню расширенную версию к моему состоянию приложения.
Я добавлю три новых значения, чтобы сделать рендуринг UI проще.
пример
Теперь мне нужно добавить две функции, которые берет IUSER и возвращает мою IUSTERSTATE.
пример
Другой берет IUSTERSTATE и возвращает Iuser.
пример
Я буду использовать эти две функции непосредственно перед тем, как пользователь вступает в мое приложение, и незадолго до его отправки на мой бэкэнд.
пример
Теперь у меня есть антикоррупционный слой для ELP, облегчит создание моего интерфейса.
Преобразование данных
Для одного объекта распространена в многочисленных компонентах.
В пользовательском объекте, определенном ранее, есть дополнительное поле, называемое billinginfo. В большинстве случаев я бы разделите информацию о выставлении выплаты пользователя в другой компонент. В этом случае я назначу выставляя свой собственный кусок в моем состоянии.
На этот раз я сделаю две функции, которые разделяют BillingInfo от пользователя, а другой, который добавляет его обратно.
Это модели, с которыми я буду работать с:
пример
Мне нужны две функции для преобразования
пример
И, наконец, мы добавляем функции в том же месте, что и раньше
пример
С этим на месте мое состояние более близко напоминает вид на пользовательские интерфейсы, которые я строю.