Как правильно разбить на классы жестко связанные объекты?
Делаю фильтры для таблицы, остановился на такой структуре:
- class FiltersControl - состоит из контейнера, куда вставляются активные фильтры, а также содержит все инстансы фильтров в массиве ( this.children = [FilterText, FilterAucomplete, ...] )
- class Filter - интерфейс
- class FilterText extends Filter - текстовый фильтр
- и т.д
Сам фильтр должен состоять из 3 компонентов: кнопка, дропдаун и тэг ( когда фильтр активен ).
1. Выносить ли дропдаун и тэг в отдельные классы? Они жестко связаны друг с другом, например, в дропдауне есть submit, который должен вызывать добавление тега на основе инпута, который у каждого фильтра отличается. Я не совсем понимаю как именно должно происходить такое взаимодействие, учитывая, что эти 2 классы будут одинаковые, но вот контент их инстансов зависит от класса фильтра.
2. Доп вопрос: допустимо ли передавать в класс Filter весь FilterControl целиком? Т.е. так new Filter( options, this ), учитывая, что инициализация происходит в FilterControl. Это работает, конечно, но выглядит странно
aaltqna, есть хорошая практика SOLID и первая буква S в этой практике обычно означает SingleResponsibility. Это свойство класса. Поэтому тебе надо просто словами проговорить
что будет делать каждый класс. И если это выглядит как единственная ответственность - то ты сделал
дизайн классов правильно.
Про то что выглядит странно - пока не понятно. Сделай первый шаг и там посмотрим что странно а что нет.