Разработка компонентов интерфейса
С ростом популярности сред и библиотек MVVM разработка компонентов должна была стать основной идеей разработки интерфейса, особенно Vue, React и Angular уже имеют относительно зрелые модели разработки, сообщества и библиотеки компонентов пользовательского интерфейса.
В текущем интерфейсе страница разработки содержит слишком много кода и логики, и один и тот же функциональный компонент может повторно использоваться на нескольких страницах. Появление этих фреймворков или библиотек эффективно разделило функции страницы и инкапсулировало компоненты, а универсальность компонентов значительно повысила удобство сопровождения. В то же время однофункциональный компонент также значительно разъединяет функциональную связь между системами, что значительно снижает сложность разработки и обслуживания интерфейсной разработки и повышает эффективность разработки.
Front-end разработка на моем предприятии
Я занимался разработкой многих типов интерфейсных проектов, включая стартовые продукты с четкими функциями, зрелые продукты с четкими функциями и некоторые продукты с неясными функциями для предприятий или подразделений. Ниже приведены характеристики продуктов, с которыми я столкнулся.
Начальные функции определяют характеристики продукта
- Характеристики продукта фиксированы
- Требует нерегулярного обслуживания и обновлений
- Часто появляются новые функции, которые необходимо запустить
Зрелый продукт с четкими функциями
- Характеристики продукта фиксированы
- Требует регулярного обслуживания и обновлений
- Новые функции запускаются регулярно
- Существует более 2-х подобных систем, в которых повторно используется большинство функций
- Разработка онлайн не влияет на другие функции
- Функции сложны, а полноценный регрессионный тест занимает много времени.
Некоторые продукты с непонятными функциями для предприятий или подразделений
- Продукты должны разрабатываться по индивидуальному заказу и развертываться в разных местах.
- Продукт имеет большую часть функции такой же или аналогичной
- Необходимость постобслуживания
Как решить проблему повторного использования кода, быстрой разработки
Как «зрелые продукты с четкими функциями», так и «продукты с неясными функциями для предприятий или подразделений» имеют некоторые общие характеристики.
- Большинство логических функций одинаковы, и их можно использовать во многих системах.
- Эти функции необходимо поддерживать, и невозможно поддерживать функцию для ее изменения в N системах.
- Изменение определенной части функции не повлияет на другие функции, и она может быть запущена в любое время.Стоимость возврата на весь сайт слишком высока.
И моя общая идея заключается в прогрессивной инкапсуляции визуального развития.
- Создайте внутреннюю библиотеку компонентов пользовательского интерфейса (небольшая степень детализации инкапсуляции)
- Создайте библиотеку бизнес-компонентов на основе библиотеки компонентов пользовательского интерфейса (общая гранулярность инкапсуляции с некоторой функциональной логикой)
- Создайте библиотеку подключаемых модулей на основе библиотеки компонентов пользовательского интерфейса и библиотеки бизнес-компонентов (большая степень детализации инкапсуляции, включая полную бизнес-логику).
- * Компилировать и генерировать код страницы на основе шаблона, разработанного плагином
- * Платформа разработки с низким кодом, основанная на визуальной конфигурации платформы + компиляция шаблона
Что такое разработка плагинов
Заимствуя идею ядра + разработка прикладного ПО, во-первых, есть ядро для планирования плагинов. При поддержке этого ядра можно разрабатывать приложения, поддерживающие это ядро. Я называю эти приложения «плагинами». ", а плагин - это полная логика. Приложение, которое не зависит ни от каких других плагинов, нужно только полагаться на ядро, чтобы работать независимо в системе.
основной контент
- Плагин планирования
- Базовый компонент (самостоятельные или сторонние ссылки)
- Основные услуги
- http сервис
- преобразование формата данных
- преобразование времени и т. д.
- автобус событий
- разное
- Автоматически загружать файлы плагинов (асинхронно)
Ядро системы подключаемых модулей, как зависимость подключаемого модуля от среды, обеспечивает базовые службы, планирование подключаемых модулей, события и другие основные функции для подключаемого модуля.Взаимные вызовы между плагинами могут проходить через ядро плагина, и этот вызов является развязанным и не влияет на внутреннюю логику плагина. Базовые компоненты и бизнес-компоненты, предоставляемые ядром подключаемого модуля, исходят из внешних зависимостей, поэтому ядро подключаемого модуля представляет собой относительно упрощенное ядро, к которому можно получить доступ через внешние зависимости.расширятьОсновной функционал плагина.
Ядро плагина я опубликовал в NPM, и его можно установить напрямую через NPM.
Разработка плагина DEMO
Я также сделал DEMO для разработки плагинов, и заинтересованные студенты могут попробовать его.
как использовать
В настоящее время выпущена только DEMO React, а DEMO Vue будет разработана позже.
Шаг 1: Установите ядро плагина в проект
npm i react-plugin-system
Шаг второй: добавьте плагин в WebPack.config.js псевдоним, укажите каталог плагинов
// webpack.config.js
{ alias: { "@plugins": path.resolve("./src/plugins"), }}
Шаг 3: Зарегистрируйте плагин в файле ввода
// src/index.jsimport { register } from "react-plugin-system";
let pages = require.context("@plugins", true, /\/.*config\.js$/);
pages.keys().map(key => {
let config = pages(key).default;
// reigster plugins
register(config);
return config;
});
Шаг 4: Напишите плагин. Плагин содержит файлы конфигурации и файлы кода. Файл конфигурации используется для указания уникального идентификатора плагина и определить файл входа. Ядро можно найти Конкретное расположение плагина через файл конфигурации. Файл кода плагина используется для записи конкретного бизнеса плагина.
// src/plugins/add/config.js
export default {
id: "add",
index: "add/index.js"
};
// scr/plugins/add/index.js
import { message } from "antd";
export default function(config = {}) {
const { calllBack = () => {} } = config;
message.success("Add success!");
calllBack();
}
Шаг 5: Используйте плагин
// src/pages/*/*.jsx
import React from "react";
import { callPlugin, Plugin } from "react-plugin-system";
export defalut class ButtonBox extends React.Component {
constructor(props) {
super(props);
this.state = {};
}
/**
* add
*/
addHandle = async () => {
// callPlugin
const path = (callPlugin('add'));
const plugin = await import("@plugins/" + path);
(plugin.default)({ a: 1 });
}
/**
* infoClose
*/
infoCloseHandel = (data) => {
console.log(data)
}
render() {
const path = (callPlugin('info'));
return <div>
<Button icon="plus" onClick={this.addHandle}>ADD</Button>
<Plugin importComponent={() => { return import("@plugins/" + path) }} onClose={this.infoCloseHandel} />
</div>
}
}
Он включает в себя два метода вызова: метод компонента и метод функции.
Позднее планирование
Открытый исходный код все еще находится в зачаточном состоянии. С точки зрения структуры, VUE будет поддерживаться на более позднем этапе; с точки зрения сообщества будет создан рынок подключаемых модулей для публикации разработанных подключаемых модулей на платформе, а также можно будет выполнять поиск и предварительный просмотр подключаемых модулей. на платформе; с точки зрения инструментов будет разработан интерфейс командной строки, который может быстро инициализировать стандартную среду разработки плагинов, которая может быстро преобразовывать обычный код в плагины и быстро устанавливать плагины, выпущенные платформой; На более глубоком уровне будет разработана платформа визуализации на основе компиляции ejs, и онлайн-конфигурация будет выполняться через визуальную платформу, а также скомпилирована и сгенерирована вторичная разработка на основе подключаемых модулей.Платформа разработки с низким кодом.
Проект чисто личных предпочтений, заинтересованные студенты, возможно, пожелают выдвинуть свои взгляды или вовлечены в проект завершен, проект, если они чувствуют себя немного означают, добро пожаловать в мою домашнюю звезду, о, о.