前端模型系统建模分析

前端模型系统建模分析

前言:

接触Angular技术也有一年多了,来Newegg也刚好一年了,在这一年里,学到了不少关于前端技术的精髓,但是让我最兴奋的,莫过于发现了模型系统,之所以认为它神奇,是因为一切复杂问题其实都可以通过模型系统来很好的进行抽象建模,使得你的工作可是事半功倍。

一、首先我想谈一下对angular的认识:

1)、AngularJs通过数据双向绑定使得view层和Controller进行很方便的数据操作,并带来很好的用户体验。

2)、AngularJs使用指令directive、服务service等进行更好的模块化管理,使得代码组件化管理,做到了更好的复用。

3)、AngularJs里内置的很多服务能够简化开发成本,如http服务等。

但是,超爽的开发体验必然会有一些难以启齿的痛点,我记得我当年一开始做一个邮件模板管理系统时,其中有一个页面是关于新建邮件模板的业务逻辑,这个页面是相当复杂的,其中一个页面就包括模板新建、模板测试、模板copy、以及预览模板等功能,前端部分我只做了一小部分,可是这部分在之前的controller中新加业务,导致controller中的代码达到一个爆炸式的增长,这个JS居然高达1000多行,对后续维护造成非常大的不便,这些痛点在我心里非常之痛。

之后我终于明白,原来我在整超神的controller (Gode Like!)

二、什么是超神的controller (God like!)?

1)、前台HTML代码和后端view的JS代码进行绑定。

2)、controller中做数据初始化。

3)、controller和service层做数据交互。

4)、controller层对页面控制展示等做控制。

5)、controller中包含页面表单的相关验证以及对service层提交数据。

6)、controller层对业务逻辑的封装。

以上几点,相信大家在开发Angular的时候,都深有体会,因为angular你在网上找的demo他就是快,直接在view层绑定一个model的变量,然后在controller中即可进行双向绑定了,那么随着需求不断迭代,我想几个月后,你自己都不愿意看自己的代码了,God like自然也就来了。

在这里,自然会想到我们的设计原则:单一职责原则!切记,模块的职责要单一,一个类只干一件事,会让代码更清晰!

想要解决这个超神的Controller,我想和大家来首先先聊一下,前端程序的本质是什么:

三、前端程序的本质:

前端系统的本质:业务模块 + 页面 + 组件 + 功能点。

组件又分为:

1)、公共UI组件,例如外观上长什么样子,行为上他能干什么。

2)、业务组件,外观是业务内容,行为是业务是什么,在什么特定场景下能干什么。

对于UI组件,我们可能会想到有表单验证、用户控件、以及一些第三方组件等,这些可能有架构师或者你自己来封装,这里我要重点强调下业务组件,如何将如何将业务模块化、服务化、一旦做到这两点,那以后的开发可谓势如破竹。

三、例子分析

我们来分析下如下这个例子:

上面这个页面是我们再熟悉的不过的登录页面,复用度不用多说,经常在不同的系统中会见到这个模块,然而我们每次开发这个页面的时候都要去手写HTML然后创建后台controller代码吗?显然这样做你就OUT了,我们何不将他封装成一个directive,这样每次只需要引入这个directive之后即可,而对应的login 向服务器发请求等只需要做成配置,将用户名和密码发送到服务器端就可以了,这样岂不是以后再做另一个系统的时候直接拿directive的JS引过来就可以了,是不是很屌呢?

说道这里我想说我们的另一个原则

知道最少原则,即,依赖自制,模块间要做到高内聚,模块外做到低耦合,只需向模块外暴露对应的数据接口就可以了,避免看复杂的逻辑导致开发效率变低。

有了以上的认识,你是否发现,在我们的日常开发中,如果能多引入模块化,服务化的开发思想,是否会让你觉得人生豁然开朗了呢?那么模块化更高境界是什么?

 答案就是:系统建模!

四、前端系统建模

我相信所有的同学都知道,下面这两点:

但是我要说,这一切其实都是在建模!

那么系统建模包括哪些呢?

那么模型系统中,哪些可以进行模型化呢?

1)、数据模型化,通过Json schema将前端数据和后端数据进行通信,实现数据建模。

2)、业务模型化,将业务逻辑封装成模块,之后只需使用依赖注入原则引入即可使用。

3)、表单模型化,将表单做成公共组件,方便调用。

4)、列表模型化,列表进行公共组件封装。

5)、桥梁指令模型化,链接业务模型,数据模型和视图模型,模块间的交互使用标准接口,实现组件的模型化管理。

五、前端模型系统架构猜想

那么更具体的前端系统建模是怎么看呢,下面为大家隆重介绍具体的模型系统!

上述图是我在一位高人的指点下分析出来的前端模型系统构架猜想,这其中的好处就在于:

1)、实现了前端用户视图层、业务逻辑层、数据层、后端服务层的解耦,使得系统耦合性更低,更具有弹性。

2)、前端页面将常用组件进行封装,如列表、表单、下拉菜单、等的封装,以后直接用即可。

3)、使用桥梁指令,将一些控件的行为进行指令化得管理,例如一个editor中的基本验证,使用指令来完成,以后类似editor直接调用指令即可,省去重写验证的逻辑。

4)、业务逻辑服务化管理,不在针对某个单一的业务进行编程,而是将业务归类,做成配置项等,以后只需调用公共业务组件即可。

5)、前后端使用Json schema进行数据通信,后端使用什么语言不再重要,只需做成service API 服务即可。

6)、后端模型黑盒化管理,前端程序员不需要知道后端代码,只需通过request向后端发请求拿到response做出处理即可。

其实这一切的一切都离不开两个字:抽象!

记得大家说烂了的道理:一切事物接对象,但在我看来,终生万物皆抽象!

开发程序本是照本宣科,BSD说什么我们做什么,但是优秀的程序员总会看到众生万物背后的道,从而做出松耦合、更具弹性的设计。

六、生活感悟

这一年里,我没请过假,没迟过到、没早过退、Bug数也急剧降低,人生那么短暂,最痛苦的事莫过于不进步、不学习、不努力、不思考、

贺炜的一句话惊醒了我,人的一辈子除去睡觉也就那么一万多天,区别就在于你真正是活了一万多天,还是一件事重复了一万多次,人生如白驹过隙,以后的日子要倍加珍惜,相信下一年里一定更有收获!

时间: 2024-12-29 11:38:50

前端模型系统建模分析的相关文章

电商系统中的商品模型的分析与设计—续

前言     在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介绍. 从SPU.SKU开始     首先我们需要澄清上篇中的这两个概念,在上篇文章中"货品"是指一种概念物品,这种物品并不是一个具体的实物,当它具备具体的属性.价格时,才是一种实物,也就是商品."商品"就是库存中一个具体的实物.例如:iphone6,就是一种货品,但用户

几种经典的网络服务器架构模型的分析与比较

原文出处:http://blog.csdn.net/lmh12506/article/details/7753978 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用:事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序.ftp 服务器程序等.相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率. 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,

Windows五种IO模型性能分析和Linux五种IO模型性能分析

Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blog.csdn.net/jay900323/article/details/18140847 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数.当使用重叠I/O模型时,可以选择使用不同的完成通知方式. 采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWa

TT和chrome执行模型对比分析

老大让写一篇高大上的博文,那么如何才能高大上呢?从某种角度讲只要迎合老大的口味给他一篇重口味的岛国动作片剖析就能轻松过关: 从程序员角度讲,能写出高大上的范围有很多,如程序架构,算法分析.编程语言理解.操作系统理解.知名开源程序的原创分析.优秀博文的翻译等都能吸引许多同学的兴趣.今天我再教一招让博文高大上有营养的捷径就是攀高枝,用你现有的程序框架和知名的开源架构做比较剖析.今天我选择走捷径,为同学们来分析下我最近在负责的一款im客户端产品--TeamTalk(简称TT)和chorme执行模型的区

信用评级模型实例分析(以消费金融为例)-中

信用评级模型实例分析(以消费金融为例)-中 原创 2016-10-13 单良 亚联大数据 点击"亚联大数据"可关注我们! 第五章 自变量的初步分析与处理 模型变量有两种类型,分别是连续型变量 .连续型变数系指该变数为观察数据所得的实际数值,并没有经过群组处理 .间断型变数则系指质性变量或类别型变量 . 两种变数类型都适用于评分模型,但建议变量使用间断型态进行开发评分模型,主要原因如下: 1. 间断型变量有助于处理极端值或是样本数量较少的变量. 2. 非线性的因变量 (dependenc

第一次作业:关于Linux进程模型的分析

1.前言 本文主要基于Linux Kernel 2.6.32 的源码,对Linux的进程模型进行分析,大致可以概括为如下内容: 1.前言 2.进程介绍 3.操作系统如何组织进程 4.进程状态的转化 5.进程的调度 6.参考资料 2.进程介绍 2.1 进程的概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器

IO模型比较分析

IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了.现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪.先回答最简单的这个:blocking vs non-blocking.前面的介绍中其实已经很明确的说明了这两者的区别.调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回. 再说明s

{python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块

阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchronous I/O) 六 IO模型比较分析 七 selectors模块 一 IO模型介绍 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能

网络编程之IO模型——IO模型比较分析

网络编程之IO模型--IO模型比较分析 IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了.现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪. 先回答最简单的这个:blocking vs non-blocking.前面的介绍中其实已经很明确的说明了这两者的区别.调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kerne