<> preface

The previous article explained logic and Runtime&DSL, Also mentioned the logic arrangement three board axe : element + Choreographer +
Runtime, In this article, I will mainly talk about component design and YOHO Platformization of .

<> element

Components in our design , It is divided into basic components and business components , The business component is the warehouse we need to create , Write source code , Submit published components , It is an entity of a logical fragment ; All but it are basic components , We're in the process of designing an arrangement for Hollywood . Base component has only start component and end component , Just to reduce the use cost of non R & D personnel , As few components as possible .

Although it is divided into basic components and business components , But the business component is essentially a special type of basic component , Their relationship is similar to that of trees and graphs , Tree is also a kind of graph , But books are often divided into separate chapters , Because the tree system is big enough . Business components are also , It is the
Custom element , But its proportion in the component system is large enough , So we also take it out as a big category .

Component language

Several important attributes of business components are as follows :

After initializing the service element , The file structure we defined :
. |-- schema | |-- input.json | |-- output.json | `-- branch.json |-- index.js
|-- package.json
index.js: Component entry file , The source code is written in it , The source code in the file will be used as code Field to store

package.json: Component dependency Is to read from inside , Store as a dependency of a component , and code Field

input.json: To render attribute forms when configuring component orchestration JSON Schema, As a component input Field to store

output.json: Return value used to describe the component , Also JSON Schema, As a component output Field to store

branch.json: Description component has several branches , And what is the Chinese definition of each value

We have made a specification for the code of branch judgment in components , coordination branch.json
, Minimize the use cost of this branch business component , The complexity of use is transferred to the constraints of development . take 《 Determine whether to log in 》 Component example , It has two branches , Logged in And
Not logged in , The branch judgment of the code must be written in the following format :
function foo() { if (isLogined) { return { branch: 0, data: { key: value } } }
else { return { branch: 1, data: { key: value } } } }
If logged in , return branch Value is 0 , If you are not logged in , return branch Value is 1. So the corresponding branch.json Must be so defined :
[' Logged in ', ' Not logged in ']
Returned in component branch Value of , Will act as branch.json Index in , The actual judgment criteria for branches in components shall be the same as branch.json The arrays in are one-to-one on , such
runtime Will execute the logic according to the correct direction .

Component overall design

Foundation tool side , We provide the ability of template initialization , Provide corresponding component development scaffold , Ensure basic development capability of components , Under construction VSCode Plug ins are used to enhance the R & D experience , Component based
OpenApi Provided element SDK Can help components enter the component Market , At present, it only serves local R & D ,4 Monthly meeting to supplement the capability of online component development . Form configuration items for components
form-render Realize visual form construction , Very easy to use , give the thumbs-up .

Based on infrastructure , The upper layer realizes a unified component Market , According to the application , Labels, etc , Components of all services converge in the component Market , It is convenient to be unified into Youku material center in the future .

Lifetime of components

A component from being produced to being arranged , Last run on page , Through the whole process of logical arrangement , Also “ Logic is the core ” Argument of , Let's take a look at what has happened in the whole logic arrangement process from the perspective of components .

After the component is published , Enter the component Market , In the editing interface , Drag to generate component instance , Build complete business logic . In canvas ,branch.json Used to explain the various branches ,input.json
Medium json schema adopt form-render
Render as a configurable form . After the orchestration instance is created , And UI Orchestration for Association , stay UI Set up the pit created in the platform , The return value rendering after component execution is required UI,UI Building the platform will resolve the components
output.json , Tile all data . After the business module is set up , Follow the page to launch ,runtime after start-up --> DSL analysis --> Component loading & register
--> Component inspection --> Component execution Link execution service related actions , stay Component execution This step ,runtime Will proceed helper and payload
injection , Provides help functions and configuration data .

Two questions

Here are two issues that we debated during the landing , I also hope you can put forward your own opinions .

* First, business components still End component ?
* Component JSON Schema Can it be modified ?
<> Logical arrangement of front-end features

Currently, there are more service arrangements and business arrangements in the group , There are also logical arrangements on the server side , The logic arrangement on the front side is rare . If you're right about logic , Business arrangement , The service layout is not very clear , Recommend this article
—— 《 Business arrangement , Service Orchestration , Differences in logical arrangement 》. In the process of building the visual system on the ground , In combination with the construction technology, we have done a bit of front-end qualitative implementation .

Our module building system , Each module generates a corresponding CDN resources , When the page is assembled , The module resources used in the page will be spliced at the server —— JS
Combo. In the process of logic arrangement , We don't want to invade existing build services , Increase development adaptation , Second, I don't want the logical layout to increase the page size JS Bundle. So in runtime
of dslWillInterpret In the life cycle , We dynamically load the resources of logical elements on demand . The components are very small , Corresponding to a complete process JS Only a few resources
KB, This loading time can be ignored temporarily . Matching on loaded components JS Resources for cache reuse , The volume of resources to be loaded will be further reduced .

This solution helped us solve another problem , In the same business module , I will create multiple orchestration instances , Two orchestration instances may have different versions of the same component during maintenance , In this scenario , If we do not load dynamically on demand , Of the page
JS Bundle May expand uncontrollably . Look back now , Dynamically load logic elements on demand , Help us change the logic of the page from JS Bundle And pulled out , Replaced by a simple
DSL, Of the page JS Bundle And smaller , The performance can be improved .

<>YOHO platform

YOHO The structure of the platform is as follows .

On the far right of the graph , Yes, we do YOHO Positioning of , It is a platform . We don't want to be a completely centralized platform , We just want to bind the agreement , standard , Based on this arrangement protocol node
service , External provision
OpenApi; On the front interaction side , Do not expect a set of interactions to meet all businesses , The outer frame of the choreographer only implements the adapters of each plate based on the choreography protocol , You can choose to use or not use the panel or canvas provided by us , Or optional , The choreographer will also implement automatic checking based on this protocol , Ability to arrange snapshots .

Seeking common ground while reserving differences is our choice .

<> Future planning

FBP, The last kilometer of business logic arrangement

It needs to be mentioned that we did YOHO platform , The vision of building a platform for service marketing . Arrange business modules from easy to difficult , front 75% Modules of will be covered by logical orchestration . The rest 25% It contains our playing methods or highly customized modules , Their common features require high logic , Multiple internal states , Want to support , Can also support , But component commissioning release , It is very troublesome to arrange, debug and release , In our expectation , This part of complex modules is undertaken by R & D .

Is there any solution for the last kilometer of logic arrangement in visual construction ? Is solvable , Expand based on existing capabilities FBP ability , Enable R & D to program based on flow , Write online --> Online test -->
Process error correction , You can not only develop faster , And your code will be more secure .

<> summary

The value of logical arrangement :

visualization : Simplifies production of business logic

UI And logic decoupling : Improve maintainability of business modules

Logical reuse : Logic can produce different behaviors by connecting in many different ways , Better code reusability

Natural span , Cross container : Because it's pure JS implement , Natural fit at each end , In each container . Its more profound significance is , If UI + Logic can cover all module development , about rax0.6 rise
1.0,Weex cut Kraken This scenario , Migration costs can be reduced 90+%

Online test , Automatic error correction : Make your code more secure

YOHO Value of :

Unified logic layout specification constraints within a large team

Convenient tools / The library facilitates the implementation of logical arrangement in business