模块化设计

设计能力(二)

做~自己de王妃 提交于 2019-12-05 02:27:43
你如何考虑服务化 # 集中式与分布式 要谈微服务,那么必须建立在分布式的基础上,对于一个集中式系统也无需谈微服务。 # 集中式 集中式系统用一句话概括就是:一个主机带多个终端。终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行。 集中式系统的最大的特点就是部署结构非常简单,底层一般采用从IBM、HP等厂商购买到的昂贵的大型主机。因此无需考虑如何对服务进行多节点的部署,也就不用考虑各节点之间的分布式协作问题。但是,由于采用单机部署。很可能带来系统大而复杂、难于维护、发生单点故障(单个点发生故障的时候会波及到整个系统或者网络,从而导致整个系统或者网络的瘫痪)、扩展性差等问题。 # 分布式 分布式就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,CPU、内存、存储资源等也就越多,能够处理的并发访问量也就越大。 拿电商网站来说,我们一般把一个电商网站横向拆分成商品模块、订单模块、购物车模块、消息模块、支付模块等。然后我们把不同的模块部署到不同的机器上,各个模块之间通过远程服务调用( RPC )等方式进行通信。以一个分布式的系统对外提供服务。 # 服务化 提到分布式,一个不得不提的词就是服务化

es6 模块化概念

匿名 (未验证) 提交于 2019-12-03 00:36:02
import语句放在if代码块之中毫无意义,因此会报句法错误,而不是执行时错误。也就是说,import和export命令只能在模块的顶层,不能在代码块之中(比如,在if代码块之中,或在函数之中)。 这样的设计,固然有利于编译器提高效率,但也导致无法在运行时加载模块。从语法上,条件加载就不可能实现。如果import命令要取代 Node 的require方法,这就形成了一个障碍。因为require是运行时加载模块,import命令无法取代require的动态加载功能。 const myModual = require(path); 上面的语句就是动态加载,require到底加载哪一个模块,只有运行时才知道。import语句做不到这一点 因此,有一个提案,建议引入import()函数,完成动态加载 import(specifier) 上面代码中,import函数的参数specifier,指定所要加载的模块的位置。import命令能够接受什么参数,import()函数就能接受什么参数,两者区别主要是后者为动态加载。 import()返回一个 Promise 对象。下面是一个例子。 const main = document.querySelector(‘main’); import( ./section-modules/${someVariable}.js }); import(

thinkphp 模块化设计

你离开我真会死。 提交于 2019-12-02 18:33:26
一个完整的ThinkPHP应用基于 模块/控制器/操作 设计,并且,如果有需要的话,可以支持多入口文件和多级控制器。 ThinkPHP3.2采用模块化的架构设计思想,对目录结构规范做了调整,可以支持多模块应用的创建,让应用的扩展更加方便。 一个典型的URL访问规则是(我们以默认的PATHINFO模式为例说明,当然也可以支持普通的URL模式): http : //serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...] ThinkPHP3.2的应用可以支持切换到命令行访问,如果切换到命令行模式下面的访问规则是: > php . exe index . php (或其它应用入口文件) 模块/控制器/操作/[参数名/参数值...] 解释下其中的几个概念: 名称 描述 应用 基于同一个入口文件访问的项目我们称之为一个应用。 模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录。 控制器 每个模块可以包含多个控制器,一个控制器通常体现为一个控制器类。 操作 每个控制器类可以包含多个操作方法,也可能是绑定的某个操作类,每个操作是URL访问的最小单元。 模块化设计的思想下面模块是最重要的部分,模块其实是一个包含配置文件、函数文件和MVC文件(目录)的集合。 模块设计 新版采用模块化的设计架构

.Net Core与Vue.js模块化前后端分离快速开发解决方案(NetModular)

纵饮孤独 提交于 2019-11-30 20:57:24
NetModular是什么? NetModular 不仅仅是一个框架,它也是一整套的模块化与前后端分离的快速开发的解决方案,目标是致力于开箱即用,让开发人员完全专注于业务开发,不需要关心底层封装和实现。(距离目标仍任重而道远~) 项目结构 功能介绍 后端框架 00_Host:不仅可以开发Web应用,同时依赖于 Electron 可以开发跨平台客户端应用 01_Utils:提供了丰富的基础帮助类和扩展方法 02_Data:提供基于 Dapper 的轻量级ORM框架,支持 MSSQL 、 MySql 、 SQLite ,在提供各种便利功能(CRUD、多表连接、分页查询、Lamdba等)的同时,也保留了dapper的所有功能,性能与便利同在 03_Logging:集成了简单好用的结构化日志组件 Serilog ,您不需要关心是如何集成的,只需要按照 官方文档 ,注入 ILogger 对象使用即可 04_Mapper:集成了强大的对象映射组件 AutoMapper ,自动扫描映射关系配置信息并注册 05_Swagger:集成了接口文档生成组件 Swagger ,并进行了扩展,可以按照模块切换文档 06_Cache:抽象了缓存组件,可在 MemoryCache 和 Redis 之间任意切换 07_Validation:集成了强大的对象验证组件 FluentValidation 08_Auth

Vue.js-组件化前端开发新思路

廉价感情. 提交于 2019-11-30 12:49:56
Vue.js-组件化前端开发新思路 12017.04.14 18:31:25字数 6228阅读 5632 本文章是我最近在公司的一场内部分享的内容。我有个习惯就是每次分享都会先将要分享的内容写成文章。所以这个文集也是用来放这些文章的,顺便也当图床用。 1. 认识Vue.js Vue.js(读音 /vjuː/,类似于view)是一套构建用户界面的渐进式框架。 如果你有react或者Angular开发经验,你肯定不会对Vue.js感到太过陌生。Vue.js是踩在Angular和React肩膀上的后来者,它充分吸收了二者的优点,是MVVM框架的集大成者。我们只需要花10分钟写一点代码,就能大概窥见Vue的本质。 1.1 数据绑定 所有的MVVM框架要解决的第一件事都是数据绑定。首先要将Model的变化渲染到View中,当有用户输入还需要把用户的修改反映到Model中。所谓的MVVM就是这么来的。 <!DOCTYPE html> <html> <head> <title>Hello Vue</title> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> {{ message }} </div> </body> <script> var app = new Vue(

Node基础-CommonJS模块化规范

二次信任 提交于 2019-11-29 08:19:50
1.在本地项目中基于NPM/YARN安装第三方模块 第一步:在本地项目中创建一个“package.json”的文件 作用:把当前项目所有依赖的第三方模块信息(包含:模块名称以及版本号等信息)都记录下来;可以在这里配置一些可执行的命令脚本等; 基于YARN会默认生成一个“配置清单”,只是信息没有手动创建的全面 npm init -y 或者 yarn init -y 创建配置清单的时候,项目目录中不应该出现中文和特殊符号,这样有可能识别不了 第二步:安装 开发依赖:只有在项目开发阶段依赖的第三方模块 生产依赖:项目部署实施的时候,也需要依赖的第三方模块 [npm] npm install xxx --save 保存到配置清单的生产依赖中 --save-dev 保存到开发依赖中 [yarn] yarn add xxx 默认就是保存到生产依赖中 --dev / -D 保存到开发依赖中 第三步:部署的时候“跑环境” 不要自己一个个的安装,只需要执行 npm install 或者 yarn install 即可,npm会自己先检测目录中是否有package.json文件,如果有的话,会按照文件中的配置清单依次安装 =>开发一个项目,我们生成一个配置清单“package.json”,当我们安装第三方模块使用的时候,把安装的模块信息记录到配置清单中,这样以后不管是团队协作开发还是项目部署上线

理解模块化编程

痞子三分冷 提交于 2019-11-29 04:59:55
一、为什么要模块化 完成某个功能的部分就称为一个模块 二、模块一般设计要求 功能少 接口少 依赖少 内部细节不详,但是接口要少,最好是通过一个单独的Imp实现虚接口 未必要独立成DLL,但是一定要耦合度低,内部要完整 另外重用度高是模块的价值所在 三、模块是一种思想 模块完全是一个软件工程中,软件设计阶段遇到的概念,是一种思想,是一个让你把一个无法解决的大问题分成方便解决的小问题的方法。其中每一个小问题的具体解决方法就是一个模块。所谓强内聚弱耦合就是让你解决小问题的时候尽量少的去牵连其他问题。而具体的实现则可以用很多方法,类派生对象就是一种典型的模块pulic声明的成员就是和模块联系的纽带,而保护成员就是你强内聚的表现~ 模块是一种思想! 来源: https://blog.csdn.net/hanguofei/article/details/100527438

模块化设计

こ雲淡風輕ζ 提交于 2019-11-29 01:54:54
模块化设计 一个完整的ThinkPHP应用基于 模块/控制器/操作 设计,并且,如果有需要的话,可以支持多入口文件和多级控制器。 名称 描述 应用 基于同一个入口文件访问的项目我们称之为一个应用。 模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录。 控制器 每个模块可以包含多个控制器,一个控制器通常体现为一个控制器类。 操作 每个控制器类可以包含多个操作方法,也可能是绑定的某个操作类,每个操作是URL访问的最小单元。 来源: https://www.cnblogs.com/xiaozhang666/p/11438743.html

ES6之模块化导入导出

て烟熏妆下的殇ゞ 提交于 2019-11-29 00:01:36
1、概述 在js的历史上一直没有模块(module)体系,无法将一个大程序拆分成相互依赖的小文件,再用简单的方法拼装起来,这对开发大型的、复杂的项目形成了巨大障碍。 在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能, 而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。 2、ES6 模块(module)的设计思想是什么? 那就是尽量的静态化,使得编译时就能确定依赖关系 3、CommCommonJS模块 和 ES6 模块比较 看两段代码 // 导出 node 文件系统的几个方法 let {stat,exists,readFile} = require('fs');注意:这段代码实际上是加载了整个 fs 模块。这种加载方式称为“运行时加载”,因为只有运行时才能得到这个对象。导致完全没办法在编译时做“静态优化”。 // ES6 模块 import {stat,exists,readFile} from 'fs'注意:这段代码只导出了三个方法,其他的方法没有加载。这种方式称为“编译时加载”,ES6可以在编译时就完成模块加载,效率要比CommonJS模块的加载方式高。   4、模块功能命令之 export 和

【Webpack】

徘徊边缘 提交于 2019-11-28 15:53:09
目录 关于模块化编程 Webpack的工作方式 三个重要的概念 使用Webpack创建一个项目 正式使用Webpack 使用Webpack进行ES6的模块化编程 原文: http://blog.gqylpy.com/gqy/283 本质上,Webpack是一个现代JavaScript应用程序的==静态模块打包器==(module bundler). 当Webpack处理应用程序时,他会递归地创建一个==依赖关系图==(dependency graph),其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个包(bundle). ======== 安装Webpack ========= · 先创建一个文件夹(如:webpack-demo),进入文件夹后执行安装命令. 安装命令: npm install -g webpack 或者 npm install web pack --save 可简写为: npm i -g webpack · 补充:如果是Mac系统,则需要加上sudo(权限问题,包括本文中后续的所有命令),即: sudo npm install -g webpack ,回车后输入当前用户的密码即可. · 安装完成以后,我们可以看到,在package.json文件中,已经有Webpack了: 图中安装的 webpack-cli 工具可用于在命令行运行Webpack. @