中小型项目前端架构

合集下载

微前端架构的优势与实现方式

微前端架构的优势与实现方式

微前端架构的优势与实现方式随着Web应用程序的不断发展和复杂化,传统的单体应用架构在维护和扩展方面面临着越来越多的挑战。

为了解决这些挑战,微前端架构逐渐成为了业界的热门话题。

本文将介绍微前端架构的优势以及一些常见的实现方式。

一、微前端架构的优势微前端架构是一种将前端应用程序划分为更小、更可管理的部分的方法。

它以模块化的思想将应用程序拆分成独立的子系统,每个子系统都有自己的开发和部署周期。

下面是微前端架构的几个优势:1. 技术栈无关性:微前端架构允许每个子系统使用不同的技术栈进行开发,这使得团队可以根据自己的需求选择合适的技术,并且可以逐步升级或更换技术栈,而不会影响整体的开发进程。

2. 独立部署与扩展:由于每个子系统都是独立的,所以可以独立进行部署和扩展。

这意味着开发团队可以更快地将新功能发布到生产环境,而不需要等待整个应用程序的重新部署。

3. 更好的可维护性:微前端架构使得应用程序的维护更加容易。

由于每个子系统都可以独立开发和部署,所以开发团队可以更集中地关注自己负责的部分,从而降低了代码冲突和合并的风险。

二、实现方式实现微前端架构的方式有很多种,下面介绍几种常见的实现方式。

1. 基于路由的实现方式:这是一种简单且常见的实现方式。

每个子系统都有自己的路由,可以根据需要进行配置。

主应用程序可以根据不同的路由加载不同的子系统,实现模块的按需加载和统一路由管理。

2. 基于Web Component的实现方式:Web Component是一种用于构建可重用的组件的Web平台标准。

在微前端架构中,每个子系统可以打包为一个独立的Web Component,并通过自定义元素的方式进行使用和组合。

这种方式实现了子系统之间的隔离性,同时也提供了更好的可组合性和可重用性。

3. 基于IFrame的实现方式:使用IFrame将每个子系统嵌入到主应用程序中,每个IFrame作为一个独立的容器运行。

主应用程序可以通过postMessage等方式与子系统进行通信,实现跨域的交互和通信。

微前端架构的设计与实现

微前端架构的设计与实现

微前端架构的设计与实现随着Web应用的复杂性不断增加,传统的单体式前端开发模式逐渐暴露出了一些问题。

为了应对这些问题,微前端架构作为一种解决方案开始受到关注。

本文将探讨微前端架构的设计思路以及实现方式。

一、微前端架构概述微前端架构是一种将前端应用拆分为多个小型、独立的子应用的架构模式。

每个子应用可以独立开发、独立部署、独立运行,通过合理的通信机制实现各子应用之间的协同工作。

微前端架构旨在实现前端的可扩展性、独立性和敏捷性。

二、微前端架构的设计原则1. 单一职责:每个子应用只关注自身的业务逻辑,不与其他子应用产生耦合。

2. 独立部署:每个子应用都可以独立部署,使得前端开发团队可以更加灵活地进行持续交付。

3. 增量升级:每个子应用的升级不会影响其他子应用,降低了系统整体升级的风险。

4. 界面一致性:通过设计统一的UI风格和交互规范,保证整个应用的用户体验一致性。

三、微前端架构的实现方式1. 基于Web Components的实现方式:Web Components是一种基于浏览器原生支持的组件化技术,可以将UI组件进行封装,实现组件的独立复用。

在微前端架构中,可以使用Web Components将不同的子应用封装成独立的组件,通过自定义事件进行通信。

2. 基于iframe的实现方式:每个子应用都运行在独立的iframe中,通过iframe之间的消息传递实现通信。

这种方式相对简单,但需要处理跨域的问题,并且在性能方面可能存在一定的开销。

3. 基于客户端路由的实现方式:将前端路由交由各个子应用自己管理,通过统一的入口应用进行路由的分发。

这种方式可以实现子应用之间的无缝切换,并且可以更好地控制子应用之间的依赖关系。

四、微前端架构的实践经验1. 组件库的设计和管理:在微前端架构中,组件的重用和管理非常重要。

可以通过建立组件库并使用版本控制来管理公共组件的开发和更新。

2. 服务化的思想:将一些通用的功能抽象为服务,并通过微服务的方式提供给各个子应用使用。

10个适合后端程序员的前端框架 -回复

10个适合后端程序员的前端框架 -回复

10个适合后端程序员的前端框架-回复前端框架在现代Web开发中扮演着至关重要的角色,它们为后端程序员提供了一种快速、高效地构建优质用户界面的方法。

然而,对于后端程序员来说,选择正确的前端框架可能是一项挑战。

在本文中,我们将介绍10个适合后端程序员的前端框架,并详细回答一些关键问题,帮助后端程序员更好地理解它们的功能和优势。

1. AngularJS:- AngularJS是一种由Google开发的JavaScript框架,适用于构建单页应用程序(SPA)。

它采用模块化的方法,并提供了一种声明式的方式来构建用户界面。

- AngularJS提供了一系列强大的功能,如数据绑定、依赖注入、路由等,使得后端程序员可以更加容易地构建复杂的Web应用程序。

2. React:- React是由Facebook开发的JavaScript库,用于构建用户界面。

它采用了组件化的开发方式,使得开发人员可以将界面拆分成独立的、可重用的组件。

- React使用虚拟DOM(Virtual DOM)的概念,以提高渲染性能。

后端程序员可以利用其简洁的API和优秀的生态系统来构建交互性强的用户界面。

3. Vue.js:- Vue.js是一种轻量级的JavaScript框架,可用于构建交互式用户界面。

它具有类似于AngularJS和React的功能,但语法更加简洁易懂。

- Vue.js的核心库相对较小,可以轻松地与现有的项目集成。

后端程序员可以快速上手,并在短时间内构建出高质量的用户界面。

4. Ember.js:- Ember.js是一种开发Web应用程序的JavaScript框架,它具有强大的和约定俗成的架构设计。

它提供了一系列高级功能,如数据绑定、模板引擎、路由等。

- Ember.js的约定俗成的设计和丰富的生态系统,使后端程序员能够快速地构建可维护和可扩展的Web应用程序。

5. Backbone.js:- Backbone.js是一种轻量级的JavaScript框架,适用于构建单页应用程序。

选择合适的开发框架与工具

选择合适的开发框架与工具

选择合适的开发框架与工具在选择开发框架和工具时,我们需要考虑多个因素,包括项目需求、技术要求、生态环境等。

下面将介绍一些常用的开发框架和工具,并讨论如何选择合适的框架和工具。

一、框架的选择1.前端框架:前端框架用于开发用户界面,常用的框架有React、Angular和Vue.js等。

选择框架时,需要考虑项目规模、开发团队的技术栈以及框架的性能和功能。

如果项目规模大且需要高度可定制的界面,可以选择React;如果项目需要高度集成和易用性,可以选择Angular;如果项目需要快速开发和轻量级框架,可以选择Vue.js。

2.后端框架:后端框架用于开发服务器端应用程序,常用的框架有Spring、Django和Express等。

选择框架时,需要考虑项目需求、开发语言和生态环境。

如果项目需要大量的企业级功能和对接各类企业系统,可以选择Spring;如果项目需要快速开发和强大的管理后台功能,可以选择Django;如果项目需要高性能和灵活性,可以选择Express。

3.移动端框架:移动端框架用于开发移动应用程序,常用的框架有Flutter、React Native和Ionic等。

选择框架时,需要考虑项目需求、开发技术和性能要求。

如果项目需要同时支持iOS和Android平台,并且开发团队熟悉Dart语言,可以选择Flutter;如果项目需要高度定制化和性能优化,可以选择React Native;如果项目需要快速开发和跨平台功能,可以选择Ionic。

二、工具的选择1.版本控制工具:版本控制工具用于管理代码的版本,常用的工具有Git和SVN等。

选择工具时,需要考虑开发团队的规模、分布和开发流程。

如果开发团队分布广泛或经常需要协作,可以选择Git;如果开发团队较小或需要集中管理代码,可以选择SVN。

2.集成开发环境(IDE):IDE用于开发和调试代码,常用的工具有Visual Studio Code、IntelliJ IDEA和Eclipse等。

JavaScript中的前端服务化和微前端架构设计

JavaScript中的前端服务化和微前端架构设计

JavaScript中的前端服务化和微前端架构设计随着互联网和移动互联网技术的迅猛发展,前端开发在软件开发中的地位越来越重要。

为了提高前端开发的效率和灵活性,前端服务化和微前端架构成为了当前比较热门的话题。

本文将从前端服务化和微前端架构的概念、优势和设计原则等方面进行详细介绍。

一、前端服务化的概念前端服务化是指将前端开发过程中的一些通用服务和功能进行服务化设计,以便实现复用和标准化。

前端服务化通常包括页面布局服务、数据接口服务、权限管理服务、日志记录服务等。

通过前端服务化,开发人员可以将精力集中在业务功能的开发上,避免重复造轮子,提高开发效率和代码质量。

前端服务化的主要目标是:降低前端开发的技术复杂度,提高开发效率;提高前端代码的复用性,降低维护成本;规范前端开发流程,促进团队协作。

二、前端服务化的优势1.提高开发效率前端服务化可以将一些通用的服务和功能抽离出来,形成独立的服务模块。

开发人员在开发业务功能时可以直接调用这些服务模块,避免重复开发和相互依赖的问题,从而提高开发效率。

2.降低维护成本前端服务化可以实现代码复用,降低了项目中重复代码的数量,减少了维护成本。

同时,独立的服务模块可以更好地进行版本管理和更新,避免整体迭代带来的风险和不确定性。

3.规范开发流程通过前端服务化,可以将一些通用的规范和约定进行统一管理,包括代码风格、接口规范、组件规范等,进一步规范了前端开发流程,促进团队协作。

三、前端服务化的设计原则1.单一职责原则前端服务化的设计应该遵循单一职责原则,即每个服务模块只负责一项功能。

这样可以避免服务模块的功能过于复杂,提高代码的可维护性和可读性。

2.松耦合原则前端服务化的设计应该遵循松耦合原则,即服务模块之间尽量减少相互依赖,通过接口进行通信。

这样可以提高服务模块的独立性,降低维护成本。

3.统一规范前端服务化的设计应该遵循统一规范,包括接口规范、命名规范、代码风格规范等。

这样可以提高服务模块的可替代性,降低开发和维护成本。

前端架构方案

前端架构方案

前端架构方案随着互联网的快速发展,前端开发在Web应用程序中的重要性日益凸显。

一个优秀的前端架构方案能够提高开发效率、提升用户体验、提供良好的可维护性和可扩展性。

本文将介绍一种前端架构方案,旨在帮助开发团队构建出高效、可靠的前端系统。

一、整体架构设计在设计前端架构方案时,首先需要明确整体架构的设计思路。

一个完善的前端架构应该具备以下几个关键要素:1. 分层架构:将前端系统分解为不同的层次,每一层都有特定的职责和功能。

常见的前端分层包括展示层(UI)、业务逻辑层、数据层等。

分层架构可以提高代码的复用性和可维护性。

2. 模块化开发:将前端功能按照模块进行划分,每个模块负责一个独立的功能。

模块化开发有助于团队协作、提升开发效率和可维护性。

3. 组件化开发:将页面中的各个独立部分划分为组件,通过组件的拼装来构建页面。

组件化开发可以提高开发效率、复用性和可维护性。

4. 前后端分离:通过前后端分离的架构,前端开发团队可以独立开发、维护和部署前端代码,实现前后端职责的清晰分离。

二、技术选型与工具链选择适合的技术栈和工具链是一个重要的环节。

以下是一些常见的前端技术和工具,供参考:1. 前端框架:如React、Vue.js等,可根据项目需求选择适合的框架。

框架提供了丰富的功能和工具,有助于提高开发效率和代码质量。

2. 状态管理:选择适合的状态管理库,如Redux、MobX等,用于管理应用的状态和数据流。

3. 构建工具:如Webpack、Gulp等,用于自动化构建、打包和部署前端代码。

4. 组件库:如Ant Design、Element UI等,提供了丰富的UI组件和样式,方便快速搭建页面。

5. 集成测试:选择适合的测试框架和工具,如Jest、Selenium等,用于保证代码的质量和稳定性。

三、项目结构与模块划分一个合理的项目结构有助于团队协作和代码的组织。

以下是一个常见的前端项目结构示例:```- src- assets // 存放静态资源,如图片、字体等- components // 存放可复用的组件- pages // 存放页面级组件- styles // 存放样式文件- utils // 存放工具函数- services // 存放与后端API交互的服务- store // 存放状态管理相关文件- App.js // 应用入口组件- index.js // 项目入口文件```根据项目需求,将功能按照模块划分,并组织在对应的目录下。

如何架构一个中后台项目的前端部分?

如何架构⼀个中后台项⽬的前端部分?前⾔最近我正在公司做⼀个中后台管理系统的前端框架搭建⼯作,虽然说公司已经有现成的中后台框架可供选择,但是并不特别适合我们部门的项⽬,因此在借鉴原有框架的基础上融⼊了我的⼀些个⼈想法和思考在⾥⾯。

这篇⽂章便主要来谈谈在架构⼀个中后台系统的前端部分上我的实践点。

技术选型不管是前端抑或后端,从零开始做⼀个新项⽬避免不了技术选型这⼀块,其应该也是最先需要考虑的内容,之后的⼀切都会建⽴在这之上。

1. js 框架考虑到公司和部门的主流技术栈及组员的技术能⼒,我们选择的主要前端技术栈是 vue。

这⼀选择其实不难,接下来需要考虑的便是围绕这⼀技术栈,选出⼦技术栈。

既然⽤到 vue,那么为了快速构建项⽬,我们必然会选择使⽤其脚⼿架⼯具(最新版本是 Vue CLI 3)来构建基础的⼯程。

另外不可或缺的还有 Vue 的路由库 Vue Router 和状态管理⼯具 Vuex,这在 Vue 项⽬中基本都会⽤到。

此外,考虑到项⽬会做国际化功能,我们还加⼊了 vue-i18n 这⼀官⽅库做国际化配置。

2. UI 框架由于我们所要架构的是⼀个中后台系统,因此采⽤⼀套 UI 框架来负责我们视图层⾯的开发是必不可少的。

把⽐较⼩众的排除在外,⽬前在PC 端主流的 Vue UI 框架莫过于 Element UI 和 iView 做的⽐较好。

⽽公司现有框架采⽤的是 Element UI,为了体现不同之处,我们选择了iView(毕竟其也有 iView-admin 这样的中后台框架)。

3. Node 框架考虑到前端后端分离后,前端需要启⽤⾃⼰的服务来跑打包后的资源,因此虽然我们本地可以使⽤ webpack 的 devServer 来实现,但是发布到 node 服务器上则需要有⼀个脚本来启动服务,这⾥我们选择⼩巧可配置的 Koa2 框架来实现(后期会逐渐拓展,实现 node 中间层)。

4. 其他js 框架、UI 框架及服务端框架选型都落实之后,我们还需要考虑除框架本⾝外的其他技术,⽐如我们选择了 axios 来实现接⼝的请求,使⽤less 来预处理 css 样式,使⽤ mockjs 来实现接⼝的数据模拟等。

微前端框架哪个好?QianKun还是MicroApp

微前端框架哪个好?QianKun还是MicroApp在当前云原⽣微服务、业务中台、低代码平台等IT架构下,不再是传统的烟囱式应⽤系统建设,⽽是打破企业业务部门竖井,建⽴企业级的信息化平台(数据中台、业务中台),那么对业务开发的解耦和聚合将成为关键技术,⽬前对于系统后端已有成熟的微服务架构,基于SpringBoot开发微服务,通过SpringCloud或istio进⾏微服务治理。

前端也同样有类似的需求,如何⽀持不同的前端团队开发各⾃业务的UI页⾯,运⾏时通过统⼀的框架集成整合起来,这就是微前端框架出现的主要诉求。

⼀、什么是微前端2016年底,“Micro frontend”⼀词⾸次出现在ThoughtWorks Technology Radar上。

它将微服务的概念扩展到前端世界。

当前的趋势是构建⼀个功能丰富、功能强⼤的浏览器应⽤程序,也就是单页应⽤程序,它位于微服务架构之上。

随着时间的推移,前端层(通常由⼀个独⽴的团队开发)不断增长,并且越来越难以维护。

这就是我们所说的前端巨⽯()。

Micro frontend背后的理念是将⽹站或⽹页应⽤视为独⽴团队所拥有的功能的组合。

每个团队都有⾃⼰关⼼和擅长的独特业务或任务领域。

团队是跨功能的,开发从数据库到⽤户界⾯的端到端特性。

微前端是⼀种类似于微服务的架构,它将微服务的理念应⽤于浏览器端,即将 Web 应⽤由单⼀的单体应⽤转变为多个⼩型前端应⽤聚合为⼀的应⽤。

各个前端应⽤还可以独⽴运⾏、独⽴开发、独⽴部署。

⼆、微前端有什么优势1、复杂度可控: 每⼀个UI业务模块由独⽴的前端团队开发,避免代码巨⽆霸,保持开发时的⾼速编译,保持较低的复杂度,便于维护与开发效率。

2、独⽴部署: 每⼀个模块可单独部署,颗粒度可⼩到单个组件的UI独⽴部署,不对其他模块有任何影响。

3、技术选型灵活: 也是最具吸引⼒的,在同⼀项⽬下可以使⽤如今市⾯上所有前端技术栈vue react angular, 也包括未来的前端技术栈。

了解微前端架构的特点与应用场景

了解微前端架构的特点与应用场景随着互联网的快速发展,前端开发变得越来越复杂。

针对单体应用的维护和扩展难度,微前端架构应运而生。

微前端架构通过将前端应用拆分成更小的、可独立开发、交付和部署的子应用,从而提高了开发效率、降低了系统复杂性。

本文将详细介绍微前端架构的特点以及适用的应用场景。

一、微前端架构的特点1. 模块化开发:微前端架构将前端应用拆分成小的子模块,每个子模块可独立开发、测试和部署。

这种模块化的开发方式提高了团队的协作效率,使得开发任务更加可控和可维护。

2. 独立运行时:每个子应用都有自己的独立运行时环境,可以使用不同的技术栈和版本。

这意味着在微前端架构下,开发团队可以根据具体需求选择最适合的技术,而不受其他子应用的限制。

3. 松耦合通信:在微前端架构中,不同的子应用之间通过定义好的接口和消息总线进行通信。

这种松耦合的通信方式使得子应用之间能够独立开发和演化,降低了子应用之间的依赖程度。

4. 独立部署:每个子应用都可以独立部署,不需要整个系统重新部署。

这样可以减少系统的停机时间,并且便于灰度发布和快速回滚。

5. 自治团队:每个子应用都由独立的团队负责开发和运维,拥有完全的自治权。

这种团队自治的方式能够提高团队的创造性和独立性。

二、微前端架构的应用场景1. 大型复杂应用:对于大型复杂应用,微前端架构能够将系统拆分成小的子应用,每个子应用都可以由不同的团队负责开发和修改。

这样能够提高开发效率,降低维护成本。

2. 跨团队协作:在多个团队共同开发一个项目时,微前端架构可以将不同团队负责的功能模块拆分成子应用。

每个团队可以独立开发和部署自己负责的子应用,通过定义好的接口和消息总线进行通信,从而实现跨团队的协作。

3. 技术栈升级:在一个系统中,不同的模块可能使用不同的技术栈和版本。

微前端架构可以将每个模块拆分成子应用,使得每个子应用可以使用最适合的技术栈和版本。

这样可以避免因为技术栈升级而影响到其他模块的问题。

前端项目开发流程及架构

前端项目开发流程及架构1. 概述前端项目开发是指将设计师提供的设计稿转化为可交互的网页应用程序的过程。

本文将详细描述前端项目开发的流程和架构,并介绍每个步骤中需要注意的关键点。

2. 开发流程前端项目开发的一般流程如下:2.1 需求分析在开始项目之前,首先需要与产品经理和设计师一起进行需求分析。

了解项目的目标、功能和用户需求,确保开发人员对项目有全面的理解。

2.2 技术选型根据项目需求和团队成员技术背景,选择合适的技术栈和框架。

选择Vue.js或React作为前端框架,使用Webpack作为打包工具。

2.3 页面规划根据设计稿,将页面划分为不同的模块,并确定页面之间的导航关系。

可以使用工具如Axure或Sketch进行页面原型设计。

2.4 UI设计根据设计稿,将UI元素转化为可交互的网页界面。

这个过程中需要注意保持设计风格一致,并考虑响应式布局以适应不同设备。

2.5 前端开发前端开发是整个流程的核心部分。

根据UI设计和页面规划,使用HTML、CSS和JavaScript等技术进行页面开发。

可以采用组件化开发的方式,将页面拆分为多个可复用的组件。

2.6 接口对接如果项目需要与后端进行数据交互,前端开发人员需要与后端开发人员进行接口对接。

确定接口文档和数据格式,并进行联调测试。

2.7 测试与调试在开发过程中,及时进行测试和调试,确保功能的正确性和稳定性。

可以使用工具如Jest或Mocha进行单元测试,并使用Chrome DevTools等工具进行调试。

2.8 上线发布在项目开发完成后,进行上线发布。

将前端代码部署到服务器上,并配置域名和CDN等相关设置。

确保网站的访问速度和稳定性。

3. 架构设计前端项目架构设计是指如何组织和管理前端代码,以提高可维护性、可扩展性和可重用性。

下面介绍一种常见的前端项目架构设计模式:MVC(Model-View-Controller)。

3.1 ModelModel层负责处理数据相关的逻辑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中小型项目前端架构一、为什么要有一个好的架构首先明确一点,架构是为需求服务的。

前端架构存在的目的,就我个人理解来说,有以下几点:1. 提高代码的可读性一个好的架构,代码的可读性一定是很强的。

简单来说,假如有一个新人加入团队,那么他接手这个项目,一定是容易上手的,能简单轻松的了解整个前端部分的相互关系,从而找到自己需要重点关注的点。

而不是需要花很多时间去熟悉这个项目的很多细节,才能开始上手做东西。

就文件来说,可以从文件名上,分清哪些是页面、哪些是逻辑、哪些是样式、哪些是可以复用的组件、哪些是图标组、又有哪些是移动端或是PC端专享的样式/逻辑等。

就代码来说,包括统一的命名风格,封装在同一个文件里的代码的相关性足够强等。

2. 提高代码的可维护性一个好的架构,一定是易于维护的,例如在新增需求、更改需求、修正bug,都不会造成意料之外的变化,比如说修改了一个页面组件的内容,却导致另外一个页面组件发生变化(这也太坑了)。

因此,要低耦合,高内聚,以及输入和输出是可预期的。

3. 提高代码的可扩展性一个好的架构,一定扩展性要强,不能写死。

需求变更太TM正常了,新增需求也太TM正常了。

因此好的架构,必须要考虑到这些情况的发生,因为这些是一定会发生的。

所以,一定要避免把代码写死。

比如页面组件A里需要有一个日历组件,而这个日历组件引用的是别人的(比如从github上找的)。

那么尽量不要直接在页面组件A里面直接引用这个日历组件,而是将写一个日历组件B,在这个日历组件B里封装你引用的日历组件C,然后通过这个日历组件B来进行操作。

原因很简单,假如某天产品经理说,这个日历组件太丑了,我们换一个吧。

如果你直接在页面组件A里内嵌这个引用的日历组件C,你很可能就要改很多代码(因为不同日历组件的使用方法和暴露的接口可能不同)。

假如你还在其他多个地方引用了这个日历组件,那就更糟糕了!每个地方都要改。

而若是将引用的日历组件C封装到自己写的日历组件B之中,那么你只需要改日历组件B里的相应代码即可,而因为日历组件B暴露的接口是不变的,那么自然不用修改页面中的代码了。

附图,以日历组件为例,是否考虑到扩展性的结果▪未考虑到扩展性:▪考虑到扩展性:4. 便于协同包括前端和后端的协同,前端和前端之间的协同。

具体来说,前后端的协同通常是以ajax为交互,那么应至少有一个用于专门封装了所有ajax请求的文件,所有ajax请求都封装在这里。

在开发时,这里封装的方法应该可以模拟发送和接收约定好的交互内容,方便开发联调。

而前端和前端的协同,主要体现在同时在更改代码时,不会影响对方代码的正常运行。

因此要求封装、解耦以及低干扰度是必须的。

5. 自动化自动打包,压缩,混淆,如果有必要,再加上自动单元测试。

总结:总结来说,一个好的架构的目的是,让前端写代码写的舒服,让后端联调的舒服,让产品经理改需求改的舒服。

二、我如何设计架构我不敢说自己的架构是好的架构(显然不是啦),只能分享自己最近做的一个项目,它的架构的如何做的。

首先,确定需求:1、一个中小型网站,同时面向移动端和PC端(单端大概15个页面,算上弹窗大约20个);2、预算有限(给的钱少),开发时间有限(一个月);3、可能存在一定程度上的需求变更(比如增加页面或修改某些页面内容);4、客户可能不太在乎优化(但是我自己在乎啊);5、要求兼容IE9以上。

其次开始决定:1、兼容IE9以上说明可以使用主流框架,而无需必须使用jQuery。

因此我采用了vue,版本是2.0;2、预算有限,时间有限,因此PC端和移动端共html和js,独立css;3、页面有限,因此无需将架构层级划分的比较细,只需要按其类型划分即可;4、根据原型图来看,页面复杂程度有限,复用部分不是很多,因此可以确定哪些东西需要封装复用,哪些比较复杂需要独立封装,哪些比较简单为了简化开发难度可以直接耦合;5、自己比较熟练单页面网站,因此采用以单页面为主,异步加载其他页面的形式。

于是使用相关配套的东西,比如webpack,vue-router等,另外为了开发和生产的方便性,采用以下模式进行开发。

第三,划分功能:首先有一个根html,用户需要通过访问它来加载我们的js逻辑,因此js逻辑的代码被写在main.js之中。

在main.js之下,我们的前端代码可以被划分为三部分:•组件树•功能模块•各种资源如下图:功能划分好之后,相同功能的放在同一个文件夹下,命名风格应该类似。

具体来说,组件树相关的东西,通常是以.vue结尾,放置在components文件夹下;资源,有图片或者国际化资源等,以.png或者.js或.json结尾,放置在resources文件夹下;而功能插件、服务等,因为可能被多处引用,因此为了方便引用,放在src文件夹下,并且该文件夹是components文件夹和resources文件夹的上级文件夹。

第四,细化功能模块:功能、组件树以及资源,我们已经明确了有哪些东西,那么接下来,我们要明确这些东西该如何以文件的形式来划分。

如下图:1. 项目构建相关•因为要使用vue.js,也要使用es6语法,因此babel是必须的;•又因为要自动化混淆打包,因此webpack也是必须的;•最后因为要方便多人协同,因此npm的package.json的配置,方便不同人可以快速自动化通过npm install来安装依赖,也是必须的。

2. CDN相关而又因为我们要采用外部字体(需求要求引入非常见字体),因此CDN加速是必须的,该字体文件放在html 中来配置引用即可。

3. 配置和插件•我们需要直接引入一些插件和配置文件;•为了使用vue,我们需要一个根组件,那么就是App.vue;•使用vue-router,我们需要配置路由文件,因此router-config.js这个路由配置也是必须的;•然后我们还需要以插件形式引入一些功能和服务,因此有了Plugin-开头的若干个vue插件,这些都是根据需要封装好的低耦合高内聚方法;4. 需要的npm依赖当然,要使用vue肯定要引入vue.js,类似的还有vue-router.js和各种兼容性polyfill和全局插件。

5. 抽离出的功能模块•除了直接引用的这些插件,我们还有一些和项目高度耦合的功能服务,我认为不能作为插件,但依然需要抽离出来封装好,方便使用和修改;•如封装ajax请求的ajax.js,所有的ajax请求都放置其中,只对外暴露接口,方便管理和使用;•又如实时国际化功能的组件LanguageManager.js,他需要引入国际化资源和管理国际化资源的加载;•又例如实现跨组件通信的event-bus.js;•又比如管理用户信息的user.js。

总结:而这些划分,都体现在上图之中。

这就是src目录下的功能模块文件,我们需要的绝大多数功能都可以包括在其中,我们只需要按照实际开发中的需要,将对应的功能写入在这些文件中并引用即可。

第五,组件树:之前谈了功能模块的划分,接下来是组件树。

因为是中小型页面,因此组件树的层级无需太深,但该抽离出来的依然还是要抽离,尽量保证抽离出来的组件解耦以及一个页面组件的逻辑不要太多。

如下图:0. 根组件所有组件最终往上找,都会找到共同的根组件App.vue,根组件只负责管理他的直接子组件。

每个组件都只负责管理自己的直接子组件,不跨级管理,并且不依赖于自己的子组件(否则可能因为子组件的未加载或错误而导致父组件错误),做到解耦和内聚。

1. 弹窗dialog和弹窗tips因为弹窗dialog和弹窗提示tips可能同时存在,因此将其划分为2个组件,方便管理。

2. 未登录页面和登录页面因为页面存在登录和未登录状态,而为了加载速度考虑,当未登录时,不加载已登录页面,因此需要划分出来,并进行异步加载处理。

3. 未登录页面未登录页面又分为三种情况:•初始页面:毫无疑问要直接加载•登录弹窗:点击登录时加载(异步)•注册弹窗:点击注册时加载(异步)之所以分拆开,是因为根据需求,已登录用户刷新页面,可以直接进入登录后页面,因此无需登录和注册,这种处理可以减少流量消耗,提升加载页面加载速度(特别是注册弹窗需要加载的内容还比较多)。

4. 已登录页面已登录页面有较多页面,采用默认加载初始页,然后异步加载其他页面(访问时)。

5. 弹窗dialog由于逻辑较少,代码量不多,因此为了方便管理,统一将其合并在一个vue文件中,共同相同的打开逻辑,根据传递的key决定打开哪一个。

这样在新增弹窗时,无需再去写弹窗的打开、关闭逻辑。

假如有较复杂的弹窗,可以以子组件的形式引入到当前vue文件中,如此也方便管理;6. 国际化管理和页面高耦合,负责加载对应的国际化资源,并进行切换管理。

7. 页面组件可能有子页面和复用的组件,按照正常方式引用即可。

8. 样式文件可以独立写为.css文件,但因为我的公共样式文件比较少,因此我还是将其放在一个.vue文件中,并在App.vue 里来引用。

9. 页面组件起名•通常以.vue为结尾,除了国际化LanguageManager.js因为高耦合度,因此以.js结尾并是一个单独的vue 实例,表示他更像是一个功能模块,而不是一个vue的页面组件;•基础页面,如登录和未登录页面,公共组件(并且是header和footer这种),以base-开头;•弹窗统一以box-为开头;•可复用的组件以extend-开头;•引入的外部组件以import-开头;•普通页面组件以page-开头(这些页面往往是一个独立的页面,并且挂靠在登录或未登录页面下);•注册弹窗因为逻辑比较复杂,并且同类较多,因此以register-为开头。

通过以文件名来划分,不同的页面组件之间的区分可以说是一目了然,同时也方便管理。

相关文档
最新文档