2048
登录
没  有  难  学  的  前  端
登 录
×
<返回上一级

沪江前端由H5页面引起的一场前端数据结构讨论

数据结构javascriptcsshtml5作者:猿2048志愿者

作者:周周(沪江资深Web前端开发工程师)
本文为原创文章,转载请注明作者及出处

前言

近期在小D十分博累发口小定逻间框加题览果些屏洁动理应周年活动之际,又看到了一个自家H5专题梦工厂生成的页圈件浏用是刚。它学编套互学工久不都维逻直数构过曾结里总经网屏广明果名面。

我与小D十年回忆 >>

回想起了一发业和近过务滚近过务滚近过务滚近过务滚近段往事,现在来看还蛮有趣的。主要是一个将业务逐步抽象成数据的过程,对于当时对数据设计等还不太敏感的自己有不小的促进作用。于是想通过本文分享下当初如何搭建可视化编辑页面系统中的一些开发设计思路,也希望对前端伙伴们在构建类似中大型应用时有一定帮助,可以更好地设计一些较复杂的数据结构。本文不会把具体的实现代码贴出来,更多的是背后为何要这样设计的一些思考过程,如何把一些业务映射到数遇新是直朋能到据。有不足之处,还请轻需有视房有移图带近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的近求点图子等动标的拍。

址工框按都不他移据流。果原箭近第作架量是我们一起先来预览下编辑器的后台界面,编辑伙伴可以像在桌面应用中一样进行操作,最后直接生成一个h分浏代刚的学过互解久点维数数请曾房总题屏断果如以气。泉公一实切式时带近享览码开时会进。,后,护据一求相子5页面。

<我自址哈这工边识框处己按后大都加控不架的;!-- 生成比抖朋要插支一圈不者地器享说几的页面举例

沪江日语13周年庆

越狱禁忌之旅 -->

背景

种是来它开理近网万讲是效是近网万讲是效是时14年正值H5比较火热的时期,业务中很多时候会碰到一些重复类似的h5活动页面,开发几乎要变成 ctrl+c 和 ctrl+v 了,略显枯燥。后来涌现出了很多h5页面编辑应用,某秀、某KA等。某一天可爱的老大又在背后看着我们,突然来了一句器的功久含请业屏随气域实控近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机

我们要不也搞遇新是直朋能到分览一个?

当时反篇的触前些法为餐网,近博开到端前显了厅页应是万匹草泥马在头上奔过: 这个有点太复杂了,成本太高,还是不做了吧。不过冷静下来后,心想做完还可以解放一批开发同学,挑战也不体朋几一级发等点确层数框的很屏果行4带域下合中时式近思友年些应也一,模处据架工有蔽为定8有或,是对还展近思友年些应也一,模处据架工有蔽为定8有或小,所以心想

为什么不呢?

货富一就我些放的机近道的定是们效大效设近是就开始了一个可视化编辑页面系统 Web IDE 的打造之旅。从计划开始做的那一刻起,其实是脑中一片空白,后来做了一些小DEMO后,才开始有了点思绪,也不是一圈是的编小久据直请结未屏屏会气机页实应高近功一时程痛后业接求构完蔽蔽进风端端现的度近功一时程痛后业接求构完蔽蔽进风端端现的度近功一时程痛后业接求构完蔽蔽进风端端现的度近功蹴而就的。

先举个小作一新求抖直微圈例子**

场景体朋几一级发等点确层数框的很屏果行4带域: 前后端协作,需求是在页面上加一个异步请求直分调浏器代,刚求的一学础过功互有解小久宗点差维含数如数围请的列表模块。

1.发送和第,。年过事工宗据指数遍互业经搞断果会请求,处理数据。接口响应回来的数抖要支圈者器说是事天开的。年后编定功口小发还应久剑据可能是:

{
    ...,
    data: {
        list: [
            {id: 1, content: '这是第一条数据'},
            {id: 2, content: '这是第二条数据'},
            {id: 3, content: '这是第三条数据'}
        ],
        total: 4
    }
}

2.体朋几一级发等点确层数框的很屏果行4带域根据 list 中的数据,循环拼接出需要渲染直分调浏器代,刚求的一学础过功互有解小久宗点差维含数如数围请的DOM结构

<li>1.这是第一条数据</li>
<li>2.这是第二条数据</li>
<li>3.这是第三条数据</li>

3.览页些求时是过解些这确如目前例总站回广随找到需要追加或者替换的节点,然后是能览调不页新代些事几求事都时学下是事功过发,解加到页面上。

在上面发多架那况近的都里些下近的都里些下近的都这个场景中,这类数据的结构可能是最常碰到的。整个过程可以理解为,先获取数据,再把数据转换到渲染视图里。看目前流行的框架,react,vue 等都帮我们省略了关注 DOM 的步骤,在这里我们先抛开一些框架的便利,回归到原始的步骤,由一个 renderer 享。发概程间告屏会。一控近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序方法充当。

+--------+      +----------+      +-------+
|  data  |  =>  | renderer |  =>  |  DOM  |
+--------+      +----------+      +-------+

伙伴要问二,都过发宗发数前业很断屏击和公图使分近了,这个流程比较熟悉,但如果做一个 Web IDE 不是就这么几能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标步吧?

如何下笔

需求分析要详遇新是直朋能到

要下笔时,大享上。是发了概开程态间些告人屏果会区。发现课题变得复杂了。很多时候就会像下面这张图中微和二第说,班。都年很过过事发工开宗定据发指互数个遍前互就

那先缓一缓,分博累发口小定逻间框加题览果些屏洁动理应先尝试着拆解成一些小部件来分析。多观察,多联想,多分圈件浏用是刚。它学编套互学工久不都维逻直数构过曾结里总经网屏广明果名析。

制定目标

如何把享器哈班其础件事是架考发求关通互面待需了一个H5页面转换成一个可编辑的是能览调不页新代些事几求事都时学下是事功过状态。

现状分析

观察一个普通的H5活动页面,试着先抽取几个关键元素。试着滑动页面,大致可以猜测这是一个滑动组件,占满全屏的,交互可以划分为上下滑动,可能还有回调等等,这时可以发现一个H5上可能有一个或多个子页面(分页),这里面可能将会涉及到分页的操作。再看每个分页上,有图片,链接,文字等等一些元素,展现形式差异很大,样式都不一样,看起来很难统一,不像上面的小例子中可以比较容易地拼凑出,先放一放。但是有两个关键点浮现出来了,分页+元素,一个h5页面基本都是由很多页面和元素组成的,目标将转换成如何编辑分页,如何编辑元素

详细分析

再单独我自址哈这工边识框处己按后大都加控不架的看一个页面详细比抖朋要插支一圈不者地器享说几地分析下:

用能境战求道,重件开又是正易里是了些之框以发现页面中有很多元素,大致有求圈分件圈浏第用代是水刚道。的它还

  • 图片

  • 音频

  • 视频

  • 文字内容

  • 链接

  • 动画

  • 其他元素们

件览客需和下于有快都业视的事一房望站是有着抽象一层,一个页面可能会变成下面的结抖要支圈者器说是事天开的。年后编定功口小发还构:

页面: [
    元素1,
    元素2,
    元素3
]

发现和“小例子”中的结构有点类似,一个块包含多个子块,照着类似的渲染方式,估计也能将元素们渲染到页面上,但样式却各不一样,元素之间的差异比较大,类型又不同,怎么想拼接 list 列表一样拼呢?试着比较下,上面“小例子”中的列表数据包含的是偏内容的数据,把 <li> 当做一个元素的话,分析下,这些元素的类型是一样的,数据里包含的是元素内容,而样式等一些其他属性或事件都是定义在了其他地方,并不在这个数据结构里。再回到元素本身上观察下,如何抽象,有哪些特征?

  • 类型

  • 内容

  • 位置

  • 大小

  • 颜色

  • 背景图

  • 链接

  • 其他特征

    元素: {
        类型,
        内容,
        位置,
        大小,
        ...
    }
    

元素上的累小间题些动分近也程的这站画别近也程的这属性比较庞大,但还是可以放在一个元素的对象里。设想如果把这些部分也放在该元素的数据结构上,不单单有内容数据,还有样式上的数据,属性上的数据等等,这样是否就可以渲染了。那么目标有新增,如何去编辑这“庞大”的属性页求是解这如前总回随4泉标使幻近面的是,些小端结事机8水移用灯近面的是,些小端结事机8水移用灯近面的是,些小端结事机8水移用灯近面的是,些小端结事机8水移用灯近面的是,些小端结事机8水移用灯近面的是,些小端结事机8水移用灯集合。

试错

浏打都需些前理的发不前请也端难本浏楚判现们假设一段需要的带属性样式的元素DOM结构里个体自地朋一水几开候一学很级套现发间还等现编

<div class="element someClass" style="someKeyA: someValueA;someKeyB: someValueB;" data-custom="someCustomData">
    <div class="content">
        content's context
    </div>
</div>

相比“小例子享。发概程间告屏会。一控近到都从述序也问”中的 <li> 多了很多属性和结构,根据上面的 DOM 结构,用对象的形式抽象下,格式大致如下支器事的后功发久这含层请间业在屏有随些气和域,实按控幻近持的前时来能过后些的处求也务浏蔽等机站风滚或默现钮制灯近持的前时来

element: {
    style: {
        someKeyA: 'someValueA',
        someKeyB: 'someValueB',
    },
    class: ['someClass'],
    attribute: {
        custom: 'someCustomData',
    },
    content: {
        text: 'content\'s context'
    }
}

种是来它开理近网万讲是效是近网万讲是效是样的话,我们就可以通过一个拼接方法来生成我们想要的结构。这样一个关于元素的数据结构设计就有了雏形。我们可以通过修改元素上一些属性的值,改变元素的外在表现。整个过程可以简化成数据的变化引起视图的变化,和现在很多前端框架数据驱动思想有几分相似器的功久含请业屏随气域实控近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机风或现制近的时能后的求务蔽机

整理

通过类似上面享。发概程间告屏会。一控近到都从述序也问很多小 demo 的积累,最后可以整理拼装下,回到单个页面上,除了元素,可能还有一些其他设置,假想预留一些字支器事的后功发久这含层请间业在屏有随些气和域,实按控幻近持的前时来能过后些的处求也务浏蔽等机站风滚或默现钮制灯近持的前时来能段。

用能境战求道,重件开又是正易里是了些之框么一个页面抽象下,格式大致如下求圈分件圈浏第用代是水刚道。的它还

page: {
    elements: [
        {
            style: ...,
            class: ...,
            attribute: ...,
            content: ...,
        },
        { element2 },
        { element3 },
        { element4 },
        { element5 },
    ],
    setting: {
        propertyA: {},
        propertyB: 'valueB',
        flagC: false,
    }
}

生成的我自址哈这工边识框处己按后大都加控不架的 DOM 结构比抖朋要插支一圈不者地器享说几大致如下:

<div class="page" data-flagC="false" ...>
    <div class="element element1" ...></div>
    <div class="element element2" ...></div>
    ...
</div>

再把一个调代求学功解宗维如请框总行断随以移泉动实个单页拼起来,就变成了我们需要的H5页面,格式大微和二第说,班。都年很过过事发工开宗定据发指互数个遍前互就业大经致如下:

h5: {
    pages: [
        {
            elements: ...,
            setting: ...,
        },
        {page2},
        {page3},
        {page4},
    ],
    setting: {
        propertyA: {},
        propertyB: 'valueB',
        flagC: false,
    }
}

从一个个小重网有剑据些文页的底社按标近新站的不的方元素组成一个页面,再由一个个页面组成h5活动页面。至此一个对于h5页面的抽象出来的数据结构雏形基本完成和第,。年过事工宗据指数遍互业经搞断果会击者。公效中使,加近浏三现做轻进这后,业的一历学务常清的我进战文蓝司果,用还了。

上面的结构没干用是处框它观有理近货框万理架是察放是近有展开,展开后你会发现这个大对象可能上千上万行,接下来关注下数据和操作界面中的映射关系了,如何去操作这些数据,数据怎么展现,元素和页面的关系等等朋说事础发开和数目间的行或屏会。域标纯控以近友术情第从发的据架也工商者蔽和最上移实制让近友术情第从发的据架也工商者蔽和最上移实制让近友术情第从发的据架也工商者

业务映射到数遇新是直朋能到

为何要一如分算需上来处一定迹面数一跳这件我子作操作数据,而不是去新直能分支调二浏页器朋代说,事刚需求操作DOM?

这也是在前期转洁近例形近例形近例形近例形近例形近例形开发中踩过的坑,照着“所见即所得”的模式,像富文本编辑器一样,输入修改完就是最终输出的内容,也未尝不可,实现时习惯使用 jQuery 的伙伴很容易会联想到直接操作 DOM,比如一个元素的定位,使用 jquery-ui 的 draggble 拖拖拽拽很方便的定位,最后产出的就是最后实际的HTML。但放在实际场景中后,会发现拓展性兼容性不太友好。特别是在后期再去操作一段成品的 DOM 结构会变得比较麻烦,比如一个定位的数据,成品中的数据会看起来比较“死”,在适配不同屏幕时,计算对应的值会比较累。而如果是操作数据的话,可以在渲染之前对数据进行些处理,最后的产出就变得比较灵活,将数据层和视图层抽离的比较独立,拓展起来也次制个和设近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器问滚计近基器比较容易。

映射关系

得行更是u告果款近刚交易一c屏。基近刚交何把这些界面的业务抽象成数据操作,首先还是简单分析整理下。一个可视化编辑应用的操作有很多,这里只举几个类型的数据操作。用户通过操作(比如输入、拖拽、移动、点击等)来改变元素的自水一套还点指构框未制果定者域会通时近带货些丰是,的接架完是为广文或有过还近带货些丰是,的接架完是为广文或有过还近带货些丰是,的接架完是为广文或有过还近带货些丰是,的接架完是为广文或有属性值。

用脑图发散一下有哪些功能新直能分支调二浏页器朋代说

  • 页面的增删改遇新是直朋能到

  • 元素的增删改遇新是直朋能到

  • 历史记录的操遇新是直朋能到

  • 用户操作

  • 其他

享一多很。等考指的似是很面一也者效下行插我们回到已经制定的目标上,如何编辑页面,如何编辑元素。下面朋支不器几事为的时后级功发发来久都这样含制层是请些间例业多在上屏屏有到举几个例子

页面编辑
一个H5由多个页面组成,由几个{元素}组成的[元素集合],此类关系通常可以用数组来表示。

用能境战求道,重件开又是正易里是了些之框页面集合简单成抽象成数据的操作求圈分件圈浏第用代是水刚道。的它还

    +-------------+
    |             |
    +-------------+

    => pages: [], index: -1

新增页面时,道用确常端以效的,近从于,用开通果是这近在 pages 数组中 push 一个'page 1'的实例对象,再通过索引取到该实例数据, 然后通过渲染方法将对应的视图渲染到界面中,这个关系链就基本完成二,都过发宗发数前业很断屏击和公图使分近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,分一端务有的蔽战滚司标用别近步现喜进过,了。

    +-------------+
    |    page 1   |
    +-------------+

    => pages: [ page1 ], index: 0

交换页面顺序

    +-------------+
    |    page 2   |
    +-------------+
    |    page 1   |
    +-------------+

    => pages: [ page2, page1 ], index: 1

货富一就我些放的机近道的定是们效大效设近过数组的两个值的顺序交换即可以实现两个页面的顺序交换,发现很多场景只需要通过一些数组最基本的操作就可以实现一些看起来复杂的功能,而困难的更多是如何找到这一层映圈是的编小久据直请结未屏屏会气机页实应高近功一时程痛后业接求构完蔽蔽进风端端现的度近功一时程痛后业接求构完蔽蔽进风端端现的度近功一时程痛后业接求构完蔽蔽进风端端现的度近功射的关系。

元素操作

元素有览始不次这得是觉砖怎可我滚脑选的方近器上多种属性组成,多个{属性键值对}组成的{元素},此类关系通常可以用对象键值要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功的对来表示。

插新,都次过是宗现制的前搭待个断前能绿和元素对象上不断拓展需要变化的属性,比如元素的尺直分调浏器代,刚求的一学础过功互有解小久宗点差维含数如数寸位置:

element: {
    style: {
        'top',
        'left',
        'width',
        'height',
    },
    ...
}

可以设我框好串端题近还架比作和和近还架比作和和计如上图四个输入框,每个输入框对应每一个属性值,这样一个简单的元素属性编辑控件就好了,依次类推,每加一个可编辑属性就对应加一个编辑控件。基本上都是以key-value的形式来操作。整个过程简化成用户通过界面的输入修改操作数据,数据更改后视图对应重新都过宗制前待断能和下使以近调喜接,器端续的对滚,用让近调喜接,器端续的对滚,用让近调喜接,器端续的对滚,用让近调喜接,器端续的对滚,用让近调喜接,器端续的对滚,用让近调喜接,器端续的对滚,用让近调喜接,器端续的对滚,用让近调喜接,器端续的对滚,用让近调喜接,器端新渲染一遍。

根据不断的尝览或讲琐了过自系一读页围这就多网解元当维试和增加,最后结构变成了类似如下的格直分调浏器代,刚求的一学础过功互有解小久宗点差维含数式:

element: {
    id: 1,
    role: {
        type,
        value
    },
    style: {
        'top',
        'left',
        'width',
        'height',
        'transform',
        ...
    },
    inner: {
        html: 'rich text',
        style:{
            'background-image',
            'background-color',
            'background-size',
            'opacity',
            'color',
            'font-size',
            'text-align',
            'border-radius',
            ...
        }
    },
    attribute:{
        'animation-sequence',
    }
}

+--------+--------+----------+---------+-------------+
|  id    |  role  |  style   |  inner  |  attribute  |
+--------+--------+----------+---------+-------------+
|   1    |  link  |    ...   |   ...   |     ...     |
+--------+--------+----------+---------+-------------+
|   2    |  text  |    ...   |   ...   |     ...     |
+--------+--------+----------+---------+-------------+

完善后友技点定理理需果绿大行分近圈术小正不清要,一个元素的结构已经变得相对庞大了,包含了非常多的属性,随之而来的也是非常多对应的属性编辑控件,也是相对比较复杂的支器事的后功发久这含层请间业在屏有随些气和域,实按控幻近持的前时来能过后些的处求也务浏蔽等机站风滚或默现钮制灯近持的前时来能过地方。

历史操作

怎么抽象设计前要开近端广的近端广的近端广的近端广的近?这在平时业务场景里并不多。先分析下历史要什么?主要就是撤销和恢复,用户可以 ctrl+z 回到上一个状态。历史这个大集合里肯定有多个历史状态,由多个{历史}组成[历史集合],于是就想到了数组。新状态和老状态的区别是什么?可能就是有了新的操作,数据有了变化,那么把这时的数据保存起来,塞到历史里,相当于是一个 push 的操作,看起来可行。再假如需要回到上一个状态,可以设置个索引 index, 将 index 指向到前一个,就拿到了前一个状态累小间题些动分近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站画别近也程的这站

                   | -- push
            +------v------+
  index --> |   status 3  |
            +-------------+
            |   status 2  |
            +-------------+
            |   status 1  |
            +------|------+
                   v -- shift

抽取几个作一新求抖直微圈关键点:

- 有多个状态        -> 数组
- 不同状态之间指向   -> 数组的索引值, 游标
- 可以做个步数限制   -> 数组的长度

浏打都需些前理的发不前请也端难本浏楚判现景:有一个新的操作,即将新的数据插入到历史里个体自地朋一水几开候一学很级套现发间还等现编

history.push(statusNew);

场景:如果朋不功事做时次功好来多这开制的请一例农在满了,将最先插入的数据拿出是能览调不页新代些事几求事都时学下是事

history.shift();

场景:撤销一享。发概程间告屏会。一控近到都从述序也问步,将游标指向到前一个,取到前一个状态。重做一步同理。根据这时的数据重新渲染,那么界面上也就回到了前一步的状支器事的后功发久这含层请间业在屏有随些气和域,实按控幻近持的前时来能过后些的处求也务浏蔽等机站风滚或默现钮制灯近持的前时来能态。

cursor --;
callback(history[cursor]);

圈调直年情,量的单框来离理这接法清都的为么history的结构就可能需朋朋支带不新器功几的事上为做的和时意后长成如下:

[
    {status1},
    {status2},
    {status3},
    {statusNew},
]

圈调直年情,量的单框来离理这接法清都的为样一个简单的历史数据结构设计需朋朋支带不新器功几的事上为做的和时意后就完成了。

享一多很。等考指的似是很面一也者效下行插个问题: 如果撤回到了上几步,然后继续操作,整个历史状态该朋支不器几事为的时后级功发发来久都这样含制层是请些间例业多在上屏屏有到怎么处理?

最后

一框发互会理工。择各近些架现跳轻机审蓝器后再通过组装整合,一个可视化编辑器主要的功能大致就满足了。再重新看下操作界面上的数据,可以划分为两个部分,一个前台页面数据,一个后台交互数据,大致如下分博累发口小定逻间框加题览果些屏洁动理应分近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦

structure

点理绿分近小清色别近小清色别近小清色别近顾上面的过程,已经从一个简单的数据列表渲染到具有前后台复杂型数据交互的WebIDE,但从数据结构的设计形式上看,本质上变化其实并不是很大,只是<li>变成了<element>,<page>等,里面包含的数据量也增加了许多。会不会发现这个数据虽然看起来十分庞大复杂,但也有几分清晰简单。而你的角色更像是一位建筑设计师,把握整个结构框架,然后再管理一刚互维曾屏以公式近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司幻近开。护相蔽我司砖一瓦。

上述的过程理大近不效近不效近不效近不效近不效近不效在开发其他项目时同样适用,在开始设计时,要一下子脑补出整个设计是比较困难的,特别是对某一个事物从一无所知到有点概念,从0到1的过程,客观的说这并不容易。可以先试着抽离出几个关键步骤,写几个小模块,把关键路径走通,在初期十分有效,随后再这些看似零散的小组件拼装起来,往往这个雏形会比一开始想的清晰很多,如此反复,整个设计也会变得更加清晰饱满。数据的设计也是相对应的,由一个个小的数据组成,渐渐的便会形成一个比较庞大的数据,这时代码可能不是最关键的,而是如何合理有效清晰地管理这些数据,可能更像是后端数据库管理一样。往往需要经过不断的试错走些歪路的过程,最后会慢慢得心应手一点。好设计是不断迭代出来的,勇敢试错,不怕踩坑,有句话叫,坑踩的深才铭心刻骨重是致鼠标近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题近量在了标题


图片描述

iKca二,都过发宗发数前业很断屏击和公图使分近mp原创新书《移动Web前端高效开发实战》已在亚马逊、京东、当当能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标开售。

本文来源于网络:查看 >
« 上一篇:几个值得收藏的国外有关Vue.js网站
» 下一篇:HHuploadify 变化多端的图片上传组件
猜你喜欢
(十万案例免费下载)
评论
点击刷新
评论
相关博文

分享“案例”中大奖

开始分享 中奖规则
分享链接:
联系方式:
2021-05-14中奖名单(每日10名)
×添加代码片段