模块化设计

asp.net core 3.x 模块化开发之HostingStartup

拥有回忆 提交于 2020-01-12 19:27:03
我们希望将一个项目(dll)看做一个模块/插件,一个模块往往需要在应用启动时做一些初始化工作,比如向IOC容器添加一些服务,为应用配置对象添加自己的数据源;也希望在应用关闭时做一些收尾工作,asp.net core为我们提供了这种机制,先来看看如何使用,再讲讲原理。 如何使用? 1、创建asp.net core 3.1的web应用程序,WebApplication6 2、创建我们的模块/插件项目,一个Standard2.1项目叫ClassLibrary2 3、在插件项目ClassLibrary2中定义实现IHostingStartup的类 1 public class HostingStartup : IHostingStartup 2 { 3 public void Configure(IWebHostBuilder builder) 4 { 5 //向IOC容器添加或替换各种服务 6 builder.ConfigureServices((c,b)=> { 7 b.AddSingleton<Class1>(); 8 }); 9 //为应用配置对象添加更多数据源 10 builder.ConfigureAppConfiguration(c => { 11 c.AddInMemoryCollection(new Dictionary<string, string> { {"a",

前端模块化设计思路

北慕城南 提交于 2020-01-11 16:03:21
模块化概念 模块化就是为了减少循环依赖,减少耦合,提高设计的效率。为了做到这一点,我们需要有一个设计规则,所有的模块都在这个规则下进行设计。良好的 设计规则,会把耦合密集的设计参数进行归类作为一个模块,并以此划分工作任务。而模块之间彼此通过一个固定的接口(所谓的可见参数)进行交互,除此之外的 内部实现(所谓的隐参数)则由模块的开发团队进行自由发挥。 程序模块化的目的: 减少循环依赖 减少耦合 提高设计效率 程序模块化的实施: 把耦合密集的归为一个模块 模块间通过固定的接口交互 模块内部实现自由发挥 HTML CSS Images的模块化设计 页面模块化的实施,这里指的是针对除去JavaScript部分的页面代码进行模块化实施。通过html css 图片进行模块化。 页面模块化的实施思路是高度耦合的页面片段封装,模块布局作为公开接口,高度耦合的页面进行封装,使用独立的css文件,高度耦合的图片进行封 装,给某类相关性强的图片建立文件夹。 页面模块化的目的是,实现多人协同开发页面,提高页面研发速度和降低维护难度。研发速度的提升体现在多人协同并行开发, 维护难度体现在减少版本的混乱,根据模块区分版本降低版本间代码冲突和文件错误覆盖。 拆分页面模块,从小到大的分解 1. 拆分页面模块 一个页面有很多个小单元模块组成,他来自有原始需求文档,比如logo,导航,内容1,内容2,内容3,内容4

Protel技巧之设计原理图模块化

最后都变了- 提交于 2020-01-09 11:16:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 设计大系统的原理图的时候,通常元器件很多,而且连线错综复杂,很容易搞错,看起来也不舒服,如果大家设计的时候,把各个模块系统化,对不同功能的部分进行分类,然后用不同颜色的虚线框围起来,再用不同颜色的总线进行连接.这样既美观,又看的舒服,而且节省许多设计时间. 下边介绍一下如何设计. 举个简单的原理图见说明: 1.电源模块 2.RS232模块 3.CAN总线模块 4.MCU模块 5.MCU外围晶振、复位、下载模块 把这些不同功能的模块分离开来,然后用PolyLine虚线圈起来,这样做的目的有两个: 1.把一个模块跟其他模块独立开来; 2.以后设计的时候,只要沿着虚线部分选取模块,然后copy到新的设计原理图上就可以了. 把各个部分拼装组合,象搭积木一样,要什么copy什么,然后加上网络号,连上总线,一张漂亮美观的原理图出来了. 来源: oschina 链接: https://my.oschina.net/u/4228486/blog/3155210

模块化服务器

微笑、不失礼 提交于 2020-01-05 08:47:44
模块化服务器通俗意义上来看就是将服务器、网络设备 、存储设备、 管理设备等集成到一个“盒子”中,高度整合以及强大的管理功能使得中小企业 或者分支机构可以在一个平台完全管理整个公司的业务,对于资金和技术有限的企业来说,确实是一个非常超值的解决方案。 从结构上讲,整个模块化服务器有以下几个子系统组成:计算子系统、存储 子系统、交换子系统、 供电子系统、 管理子系统 和制冷子系统,所有子系统通过中板和 交换机 的连接及机箱的固定形成一个有机整体。 英特尔模块化服务器设计的初衷就是为了可以为 中小企业 提供简化的、统一的管理,通过独立的管理模块以及功能强大的管理软件,可以将 管理员 从环境恶劣的机房中解放出来。 来源: https://www.cnblogs.com/hi-stevenge/p/3449631.html

前端工程化

馋奶兔 提交于 2020-01-04 00:25:23
前端架构: 1.前端工程化 web应用复杂度的增加,特别是单页面应用的风靡。组件化,工程化,自动化成了前端发展的趋势。或者说一线的互联网公司就是这么做的。 每个前端团队都在打造自己的前端开发体系,这通常是一个东拼西凑,逐渐磨合的过程,在技术发展日新月异的今天,这样的过程真的是不可抽象和复制的么?本文希望能够通过系统的拆解前端开发体系为大家提供体系设计思路参考。 前端工程的3个阶段 第一阶段: 库/框架选型 Animate.css jQuery vue.js underscore.js React.js Backbone.js Bootstarp zepto.js jade normalize.css compass Angular.js 解决开发效率 第二阶段: 简单构建优化 选择构建工具,对代码进行压缩,校验,之后再以页面为单位进行简单的资源合并。 第三阶段: JS/CSS模块化开发 解决维护效率 js的模块化方案 ADM/CDM/UMD/ES6 Module css的模块化:less,sass。 第四阶段: 前端是一个技术问题较少,工程问题较多的开发领域 当我们要开发一款完整的Web应用时,前端将面临更多的工程问题,比如: - 大体量:多功能、多页面、多状态、多系统; - 大规模:多人甚至多团队合作开发; - 高性能:CDN部署、缓存控制、文件指纹、缓存复用、请求合并、按需加载

ASP.NETCORE MVC模块化

≡放荡痞女 提交于 2020-01-02 02:35:15
ASP.NETCORE MVC模块化编程 前言 记得上一篇博客中跟大家分享的是基于ASP.NETMVC5,实际也就是基于NETFRAMEWORK平台实现的这么一个轻量级插件式框架。那么今天我主要分享的是自己工作中参考三方主流开源WEB框架OrchardCore、NopCore等,实现的另外一个轻量级模块化WEB框架,当然这个框架就是基于当下微软力推和开源社区比较火爆的基础平台ASPNETCORE。 进入正题之前,我觉得先有必要简单介绍一下ASPNETCORE这个平台大家比较关心的几个指标。 其一性能,话不多说直接看个人觉得比较权威的性能测试网站 https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=fortune ,微软官方给出的数据性能是ASPNET的23倍。 其二生态,从NETCORE2.0开始,国内越来越多的大型互联网公司开始支持,比如百度云SDK、腾讯云SDK、腾讯的Tars 微服务平台、携程、阿里云等等。我们可以看看相关的issue,以百度云为例 https://github.com/Baidu-AIP/dotnet-sdk/issues/3。 其三迁移,自NETCORE2.0开始,有越来越多的三方nuget包支持。 其四开源,使用的是MIT和Apache 2开源协议,文档协议遵循CC-BY

ES6之模块化导入导出

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

Node基础-CommonJS模块化规范

五迷三道 提交于 2019-12-21 09:07:54
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”,当我们安装第三方模块使用的时候,把安装的模块信息记录到配置清单中,这样以后不管是团队协作开发还是项目部署上线

BeeHive logoiOS 模块化编程框架 BeeHive

六眼飞鱼酱① 提交于 2019-12-10 05:45:36
BeeHive是用于ios的app模块化编程的框架实现方案,吸收了Spring框架service的理念来实现模块间的API耦合。基本原理如下: 实现以下特性 插件化的模块开发运行框架 模块具体实现与接口调用分离 模块生命周期管理,扩展了应用的系统事件 因为基于Spring的Service理念,虽然可以使模块间的具体实现与接口解耦,但无法避免对接口类的依赖关系。 为什么不使用invoke以及动态链接库技术实现对接口实现的解耦,类似Apache的DSO的方式。 主要是考虑学习成本难度以及动态调用实现无法在编译检查阶段检测接口参数变更等问题,动态技术需要更高的编程门槛要求 BeeHive灵感来源于蜂窝。蜂窝是世界上高度模块化的工程结构,六边形的设计能带来无限扩张的可能。所以我们用了BeeHive来做为这个项目的命名。 生命周期的变化 事件 BeeHive会给每个模块提供生命周期事件,用于与BeeHive宿主环境进行必要信息交互 事件分为三种类型: 系统事件 通用事件 业务自定义事件 系统事件 系统事件通常是Application生命周期事件,例如DidBecomeActive、WillEnterBackground等 系统事件基本工作流如下: 通用事件 在系统事件的基础之上,扩展了应用的通用事件,例如modSetup、modInit等,可以用于编码实现各插件模块的设置与初始化

JavaSript模块规范

牧云@^-^@ 提交于 2019-12-06 16:12:00
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式。可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在。对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得“有理可循”。 还有一些对于模块化一些专业的定义为:模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可。 首先,既然是模块化设计,那么作为一个模块化系统所必须的能力: 1. 定义封装的模块。 2. 定义新模块对其他模块的依赖。 3. 可对其他模块的引入支持。 好了,思想有了,那么总要有点什么来建立一个模块化的规范制度吧,不然各式各样的模块加载方式只会将局搅得更为混乱。那么在JavaScript中出现了一些非传统模块开发方式的规范 CommonJS的模块规范,AMD(Asynchronous Module Definition),CMD(Common Module Definition)等