前端的架构设计

前端的架构是什么?

https://www.zhihu.com/question/26646855/answer/68503768

前端项目大概会经历以下这些阶段:

  1. 整体渲染

  2. 结构行为表现分离

  3. 隔离逻辑单元

  4. 插件

  5. 模块

  6. 前端MVC/MVVM

  7. 组件

先进的想法并不会区分前后端,而是被用到了所有适用的地方。

一个软件项目,随着待解决业务问题的发展,和问题复杂度的不同,会存在以下几个阶段,

  1. 具体解决方案

  2. 共用代码

  3. 功能独立的工具

  4. 架构模式

5. 领域特定语言(DSL)

常用软件架构

常用的软件架构主要有:

  • **MVC (Model-View-Controller)**: Model-View-Controller 架构模式用来构建 Web 应用。 该架构有三个部分: 模型(Model)、视图(View) 和控制器(Controller)。
  • **MVVM (Model-View-View Model)**: MVVM 架构是一种简化 MVC 架构的一种模式。 它使用同样的三个部分: 模型(Model)、视图(View)和 View Model。
  • **REST (Representational State Transfer)**: Representational State Transfer(REST)是一套架构设计原则,它可以用来构建 web 上的应用程序。 REST是基于 HTTP 协议的,并定义一系列规则,用来处理客户端和服务器之间的交互。
  • Event-Driven Architecture: Event-Driven Architecture是一种面向事件的架构,可以将特定的操作流程表示出来。 这是一种较新的软件架构,可以用来跟踪数据并处理事件。

前端架构类型

我们的3D框架用到的架构:

OOP:封装、继承、多态,因为场景中有不同的节点类型,每个类型的表现会不一样;OOP中业务问题被抽象成类,接口模板,数据和行为被统一封装在对象内部,作为程序的基本组成单元,但是我们目前没封装好,数据和行为在外部也会被操控和修改。

基于消息驱动的状态切换

图元抽象

基于消息驱动的UI/3D主体通信

响应式编程(store)

事件驱动:Flux

消息驱动:

基于状态机:Redux

数据流:React

编程范式/编程模型

方案设计时,就应该包含编程范式的选型这一步。

命令式编程/过程式编程

C语言

面向对象编程

声明式编程

Spring Boot基于注解的方式就是声明式编程

Spring框架依赖AOP和IoC编程思想降低了开发者对底层逻辑业务细节的了解程度。例如在Spring Boot中,通过@Transactional注解可以声明一个方法具备事务性的操作,当异常发生时,事务会自动回滚,保证业务逻辑的正常和数据一致性。发生在@Transactional注解背后的实现细节,开发者可以不去关心。

Vue组件?

很多标记性语言,如HTML、XML、XSLT,就遵循声明式编程范式

函数式编程

响应式编程

响应式编程(Reactive Programming):React

包括:面向对象的响应式编程(OORP),函数响应式编程(FRP)等

函数式编程:

设计思路

https://www.zhihu.com/question/587090539/answer/2920684245

面向对象的理解≈组合和继承的理解≈业务拆分和转发

把所有的流程都用对象描述出来,然后画一个有向无环图。接着就是对象分层和细化。把不变的和变的分开

当然,箭头的图标分可视化时段和非可视化时段,那么可视化时段可以理解为上台时段,非可视化则分上台前和下台后。台上时段,就相当于一个传送带,传送带还分多个区块,区块还会附加控制器,输入判断控制器就是一种控制器。。。

场景论

这个似乎是SceneGraph?

时间线理论

生命周期?

传送带理论

柯里化?流程管理?

分形(Fractal)

自相似性

ECharts的Element + Group的设计就是分形的应用。

面向对象的实体设计,也是分形思想的一种应用。分形分得多细,决定了你的对象设计粒度有多细。

3D中,是通过矩阵来解决分形后子组件的坐标描述问题的。

这在我们的组件开发中也适用:用父状态描述/管理子组件的状态(递归计算出子组件的状态)。

组件的设计,是一棵倒置的树。

参考资料

什么是响应式编程?

In computing, reactive programming is a programming paradigm oriented around data flows and the propagation of change.

事件驱动机制跟消息驱动机制相比,有哪些优劣的地方?

事件模式耦合高,同模块内好用;消息模式耦合低,跨模块好用。事件模式集成其它语言比较繁琐,消息模式集成其他语言比较轻松。事件是侵入式设计,霸占你的主循环;消息是非侵入式设计,将主循环该怎样设计的自由留给用户。如果你在设计一个东西举棋不定,那么你可以参考win32的GetMessage,本身就是一个藕合度极低的接口,又足够自由,接口任何语言都很方便,具体应用场景再在其基础上封装成事件并不是难事,接口耦合较低,即便哪天事件框架调整,修改外层即可,不会伤经动骨。而如果直接实现成事件,那就完全反过来了。

作者:韦易笑
链接:https://www.zhihu.com/question/30393750/answer/48037230
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考资料

响应式编程介绍:

https://zhuanlan.zhihu.com/p/561109741?utm_id=0

(精)前端架构是什么:

https://www.zhihu.com/question/26646855

阮一峰:MVC,MVP 和 MVVM 的图示:

http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html

MVC, MVP, MVVM比较以及区别:

https://www.cnblogs.com/JustRun1983/p/3679827.html

游戏开发中的常见软件架构模式:

https://zhuanlan.zhihu.com/p/29266814

基于TypeScript的通用游戏客户端框架开发:

https://www.zhihu.com/column/c_1316497826038800384

《Software Architecture Patterns》:

在我本地:book-程序设计-5种常用的软件架构模式

(精)业务抽象:

https://www.zhihu.com/question/587090539/answer/2920684245