Magento 2: каковы преимущества использования компонентов сетки пользовательского интерфейса по сравнению со стандартом Grid.php?
Итак, Magento 2 представил компоненты пользовательского интерфейса.
Одним из них является Сетка компонентов пользовательского интерфейса (более подробную информацию о ней вы можете найти здесь: Объяснение сетки компонентов пользовательского интерфейса в Magento 2)
При создании пользовательского модуля я придерживался старого метода Magento 1, я создал файл Grid.php
, который обрабатывает мою сетку adminhtml.
Мне интересно, в чем преимущества использования сетки компонентов пользовательского интерфейса вместо метода Grid.php
?
2 answers
Я перечислю те, которые я нашел до сих пор.
- расширяемость. Вы можете добавить новый xml-файл для добавления новых столбцов.
- конфигурация поверх кода. Меньше кода для логики, больше декларативных XML-файлов.
- меньше трафика по сети. XML преобразуется в json и отправляется в браузер. Кроме того, каждый тип поля отправляется в браузер только один раз, и генерация формы происходит на клиенте.
- новая система позволяет изменять порядок столбцов и сохранять состояние.
Не по теме: Я получил "внутреннюю информацию" о том, что планируется переместить все сетки и формы в компоненты пользовательского интерфейса. Так что вам следует начать их использовать.
@raphael-at-digital-pianism попросил меня опубликовать этот список вещей, которые, по моему мнению, неверны в XML-компоненте пользовательского интерфейса adminhtml grid, так что вот:
Что не так с XML-компонентом пользовательского интерфейса сетки adminhtml?
- Медленный цикл обратной связи во время разработки
- Трудно понять
- Трудно отлаживать, если что-то пойдет не так (в основном только по сравнению с XML в ядре)
- Раскрыто много деталей реализации
- Поощряет копирование и вставку
- XML не был предназначен для людей, чтобы читать и писать
- Трудно проверить
- Неясно, какие еще варианты доступны
- Множество шаблонов И магии (худшее из обоих миров)
- В сочетании с идеей отображения табличных данных БД
- Множество повторяющихся строк имен в файле
"Придумайте лучшее решение", вы говорите?
Ну, а я нет. Но вот примерное представление о том, как я, как разработчик, хотел бы иметь возможность создавать сетки adminhtml и формы.
- Создайте реализацию
GridDataSourceInterface
- Компонент сетки использует метод
GridDataSourceInterface::getGridItemType()
для получения имени класса или имени интерфейса - Интерфейс отражается, и все геттеры используются для определения возможных столбцов
- Типы столбцов выводятся из возвращаемых типов
- Типы, которые не могут быть автоматически определены как допустимые типы столбцов, игнорируются.
- Экземпляр реализации
GridDataSourceInterface
можно использовать для настройки видимости по умолчанию и типы столбцов, использующие хорошие описательные методы, где это необходимо.
Преимущества:
- Определение сеток (и форм) с помощью IDE с помощью метода автозаполнения
- Разумные значения по умолчанию
- Агностик реализации
- Только для простых сущностей потребуется написать очень мало кода
- По сравнению с подходом XML, без потери функций
- Расширяемость с помощью перехватчиков
- Если интерфейсы классов выполнены с определением сеток и формы также могут быть такими же декларативными, как XML (но гораздо более простыми)
- Соответствует "образу мышления" Magento 2 для классов контрактов на обслуживание
- Никаких изменений в текущем взаимодействии с кодом интерфейса не требуется (тот же трафик по проводу)
- Сортировка и настройка столбцов внешнего интерфейса могут продолжать работать так же, как и сейчас
- НЕТ МОАРА XML
Что касается первоначального вопроса, я не думаю, что использование старого стиля Magento 1 блокирует создание интерфейсов adminhtml - это правильное решение.
Я только выступаю за то, чтобы новое объявление сетки на основе XML было заменено чем-то лучшим как можно быстрее.