Круговые зависимости по сравнению с DRY

Компоненты высшего порядка - это функции, которые «улучшают» компоненты, передаваемые в качестве параметра. Чтобы понять, откуда берутся реквизиты, давайте посмотрим, как будет выглядеть такой компонент.

Вот наш основной компонент, который будет передан в HoC:

function TodoList(props) {
  return (
    <div>We have {props.todos.length} tasks to do!</div>
  );
}

И теперь мы можем использовать наш HoC для создания нового «расширенного» компонента, который предотвращает отображение этого сообщения, когда нет Никаких оставленных задач:

const EnhancedTodoList = withTodosNull(TodoList);

Затем мы можем использовать этот новый компонент для рендеринга сообщения (или нет, если задач нет):

<EnhancedTodoList todos={someTodos} />

Как Вы можете видеть, EnhancedTodoList является первым компонентом, который получает todos. Затем он решает, следует ли передавать реквизиты в TodoList или возвращать null, когда нет никаких задач.

Тоды явно передаются из компонента, который представляет HoC. EnhancedTodoList действует как фильтр для TodoList.

6
задан Ash 8 March 2009 в 03:59
поделиться

4 ответа

Согласитесь с Ножами. Проспект depedencies является запахом дизайна. Осуществите рефакторинг его Беспощадно!

Это может быть сложно в случае, где бизнес-объекты сильно связываются. В большинстве случаев это может быть решено посредством внедрения зависимости.

Псевдо пример C++:

class Employee {
    Company company;
};

class Company {
    vector<Employee> employees;
};

Хитрый? Не neccesarily:

template<class CompanyT>
class Employee {
    CompanyT company;
};

class Company {
    vector<Employee<Company> > employees;
};

Более типы примитивов, которые должны зависеть от более высокого уровня, могут быть абстрагированы для работы с любым видом другого типа, пока он выполняет свои контракты.

6
ответ дан 8 December 2019 в 16:10
поделиться

Кажется, что Вам нужен третий блок...

3
ответ дан 8 December 2019 в 16:10
поделиться

Если Вашей библиотеке String действительно нужна Ваша библиотека XML, это - вероятно, признак, что Ваша библиотека String должна быть пересмотрена в определение типа данных низшего уровня и "базовые утилиты" (никакие внешние зависимости, если возможный), и другая высокоуровневая библиотека, которая может ввести XML, SQL, регулярные выражения, или независимо от того, что Вы находите полезными на прикладном уровне.

3
ответ дан 8 December 2019 в 16:10
поделиться

Сделайте это дополнительным методом, который определяется в xml блоке (на основе Вашего комментария "метод преобразования, который принимает XML и преобразовывает в основанный на строке формат"). Это имеет дело с xml. Точно так же, как Linq делает для IEnumerable.

3
ответ дан 8 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: