ASP.NET Core 企业级开发架构简介及框架汇总

2023-11-06

ASP.NET Core 企业开发架构概述

企业开发框架包括垂直方向架构和水平方向架构。垂直方向架构是指一个应用程序的由下到上叠加多层的架构,同时这样的程序又叫整体式程序。水平方向架构是指将大应用分成若干小的应用实现系统功能的架构,同时这样的系统叫做分布式系统。在架构上java和.net世界都有优秀的框架支持构建垂直和水平方向架构。ASP.Net Core非常轻量且具有很高的性能,不仅适合做整体式程序,也非常适合做分布式系统。随着微服务的兴起,各种语言的混合应用是个趋势。

一、 垂直方向架构

1. 多层架构

分层架构通过程序包或者程序的隔离构建松耦合的应用。我们以最近流行的洋葱架构模型进行分析,如图

2017-09-24-17-19-34

1.1 领域模型

包括领域实体/存储接口/服务接口,是整个程序的核心。

  • 贫血模型

如果把大量的业务逻辑委托给服务接口实现者,领域模型显得很瘦小,就可以称之为贫血模型。这种模型下的领域对象仅仅表示“状态”。“行为”(也称为逻辑、过程)放在了N层结构的Logic/Service/Manager层中。优点是易于理解和实现,缺点是随着业务发展模型会难以表达业务领域。目前不少业内软件架构是这种模式。

贫血模型的简单图示:

2017-10-19-23-15-10

  • 充血模型

如果在领域模型中实现主要的业务逻辑,把不方便实现的业务(比如汇率结算,地理坐标解析等)委托给服务接口实现者,此时领域模型显得粗壮,就可以称之为充血模型。这种模型下的领域对象既表示“状态”又有”行为“,领域对象之间还通过聚合在一个根(聚合根),然后由根对象保证状态的一致性(类似于数据库表之间的约束一致性)。优点是模型易于跟进业务发展,容易通过重构表达最新的业务领域;缺点是不易掌握。

充血模型的简单图示:

2017-10-19-23-17-27

1.2 存储仓库

领域模型中的对象自从被创建出来后不会一直留在内存中活动,当它不活动时会被持久化到数据库中,然后当需要的时候就会重建该对象;重建对象就是根据数据库中已存储的对象的状态重新创建对象的过程。可见持久化和重建对象是一个和数据库打交道的过程。从更广义的角度来理解,程序会像集合一样从某个类似集合的地方根据某个条件获取一个或一些对象,往集合中添加对象或移除对象。也就是说,这就需要提供一种机制,可以提供类似集合的接口来帮助程序管理对象。仓储就是基于这样的思想被设计出来的。

贫血模型下的存储仓库:实现实体对象的CRUD.

充血模型下的存储仓库:创建聚合根对象,实体对象的创建/更新/删除的行为由聚合根完成

1.3 服务

一般有三种服务:应用服务、领域服务、基础服务。

2017-10-19-22-25-06

  • 应用服务

    调用领域服务,形成工作流程,提供事物上下文。应用服务可以直接为UI提供服务或者直接作为API暴露出去。

  • 领域服务

    在具体一个业务上下文中提供服务。比如订单生成服务提供订单的生成功能,订单的跟踪服务提供订单的执行信息。

  • 基础服务

    基础服务提供的是和业务无直接关系的工具辅助服务。比如日志,安全,通信,事件总线等等。

1.4 UI

提供应用程序界面,支持用户输入。高效的UI开发往往会依赖UI框架,比如MVC框架。

UI框架比较多,比如MFC,WinForm,Asp.net WebForm,Asp.net MVC,Structs等等。

综上:洋葱模型的各层由外到内的单向依赖,简单直接的降低了代码之间的耦合度

2. 典型框架

2.1 数据存储框架
2.1.1 数据访问辅助

这类框架往往提供了一套操作连接/命令/结果集的接口。用户先发起连接,发生sql命令,然后得到结果集以按行(又叫记录)方式进行遍历。不同的数据库需要相应的数据库驱动和实现,但对于用户来说操作数据的方式都是一样的。

优点

  1. 编写原始sql,执行效率高。
  2. 握有连接对象,可以自定义事物的发起,提交或者回滚。
  3. 可以针对不同数据存储方式定义数据访问库。
  4. 一般比较轻量,依赖少。

缺点:

  1. 编写sql容易出错,随着数据库的演变,sql的潜在错误必须依赖充分的单元测试才能消除。
  2. 数据库的演变,sql重构难度会逐渐增大。
框架 特点 开发语言
JDBC 简单易学,上手快,非常灵活构建SQL,效率高 Java
ADO.NET 接口清晰,支持离线遍历数据集,支持数据库和非数据库数据源 C#
2.1.2 对象-关系映射

对象-关系映射(Object-Relational Mapping,简称ORM),以面向对象的开发方法实现数据的增删改查。

优点

  1. 提高开发效率,降低开发成本
  2. 使开发更加对象化
  3. 可移植
  4. 可以很方便地引入数据缓存之类的附加功能

缺点

  1. 自动化进行关系数据库的映射需要消耗系统性能。其实这里的性能消耗还不大,一般来说都可以忽略之(除非在性能特别关键应用)。
  2. 在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂。

典型框架

Dapper 半自动;轻量级;自己写sql语句,可操作性强,小巧 C#
Entity Framework 全自动;较重量级;支持写linq和原生sql,功能强大 C#
Hibernate Hibernate功能强大,数据库无关性好,O/R映射能力强,需要学习HQL,精通的难度高 Java
iBATIS 更名为MyBatis,入门简单,即学即用;功能比较简陋,需要受写sql语句 Java / NET
2.2 MVC 框架
  • Model

负责提供界面绑定的数据,以及业务逻辑处理

  • View

负责提供用户和应用之间的交互界面。不同类型的应用交互界面不同,可以是桌面程序窗口和web页面。

  • Controller

负责收集用户输入事件,并分配事件给对该事件感兴趣的模型处理。对MVC的理解难点在于控制器的解读,在下面我们会用经典MVC模式后端MVC模式分析。

2.2.1 经典MVC模式

这种模式大量用在复杂交互界面的桌面应用程序,比如MFC框架;以及web富应用框架中,比如AngularJS 1(尽管有人称之为为MVVM框架)。

2017-09-24-18-37-21

控制器把输入事件通知给对该事件感兴趣的模型(步骤3),模型更新自己的状态并引起视图更新(步骤4),然后将更新事件通知控制器(步骤5),此时如果有对该更新事件感兴趣的模型会进一步进行处理(步骤6)。事实上控制器和模型之间构成了订阅/发布关系。

MVVM框架:把Controller变成了ViewModel,它与View进行双向绑定:View的变动,自动反映在 ViewModel,反之亦然。

2017-10-18-23-25-03

2.2.2 后端MVC模式

自web应用普及开来,涌现了不少后端MVC模式,比如JAVA的Structs,.NET的Asp.net MVC等。由于页面在浏览器中显示,用户输入通过http到达后端,在后端看来MVC模式默认如下图所示:

2017-09-24-18-38-04

与经典MVC模式不同,控制器直接获得输入事件(http请求),调用对应的模型,模型处理完后传递视图对象(VO)给控制器,控制器找到合适的视图并传递VO给视图,视图产生html/json/文件流等资源,应用程序根据资源类型Response结果。通常后端MVC的控制负责的处理比较简单;而复杂的用户输入可以用前端MVC框架实现(类似经典MVC模式)。

2.2.3 典型框架
框架 特点 开发语言 前后(端)
Asp.net MVC 支持WebForm和Razor C#
Nancy 轻量,支持WebForm和Razor,路由更灵活 C#
Struts2 JSP上的MVC先驱,但比较重量,封装简陋 java
SpringMVC 开发效率和性能高于Struts2,100%零配置 java
AngularJS 功能完整,支持双向绑定,开发效率高,运行效率一般,v2版本推翻v1,性能上提高,开发更组件化 js
React 思路新颖,运用Virtual Dom技术,性能高;但目标是UI组件,需配合其他库搭建完整MVC框架 js
Vue 非常小巧,核心库专注视图层。需要搭建其他组件实现完整MVC框架 js
2.2.4 MVC模式总结

模型负责提供视图数据和业务逻辑处理,视图负责提供用户交互界面,控制器将输入事件分配到对该事件感兴趣的模型。控制器居于中心位置,类似于功能胶水,但功能仅限于胶水是它不错的定位;避免写入过多业务逻辑代码使控制器变得复杂,难以维护。

MVC模式的价值在于更好的处理洋葱架构的UI层

2.3 IOC框架
2.3.1 概念

用现实生活中例子引入:由于汽车依赖轮胎,如果按照正向依赖,则汽车厂商需要根据轮胎供应商能提供的轮胎来定义自己的接口(螺丝,大小等)。但如果依赖倒置一下(让轮胎厂商依赖汽车厂商),则汽车厂商只需要定义自己的接口(螺丝,大小等)由轮胎厂商去按照这个规格规范生产,就成为现在汽车行业的例子。这种依赖倒置是一个思想概念,需要一个容器来实现,这就是IOC框架。

2017-10-23-23-57-40

  • 依赖倒置(Dependency Inversion Principle, 英文缩写为DIP)

从依赖具体类变换为依赖抽象就叫依赖倒置,这是一种设计原则。

  • 控制反转(Inversion of Control,英文缩写为IoC)

依赖倒置的一种实现方式,通常用于构建框架,比如WinForm,WebForm程序中你可以自定义具体的窗口类,然后在窗口初始化和虚函数里面写代码,框架会按照自己的一套流程运行:启动具体窗口,调用初始化方法,在不同的运行节点调用对应的虚函数。运行控制权始终在框架手中而不是我们写的代码。

  • 依赖注入(Dependency Injection,英文缩写为DI)

依赖注入也是依赖倒置的一种具体实现,是类库设计的一种常用模式。类库基于依赖模式设计:调用者依赖于接口,而不是具体的实现,调用者在运行时被注入所依赖接口的具体实现。注入方法不在此处赘述。

  • IOC框架

IOC框架包括了控制反转和依赖注入功能。以下通过QA的方式来读懂IOC框架:

Q: IOC的控制是对什么的控制?

A: 是对应用程序中对象的创建和生命周期的控制。

Q: 正向控制是什么样子?

A: 由应用程序new对象,并在合适的时候释放对象。

Q: 反转控制是什么样子?

A: 对象的创建和生命周期管理由IOC框架控制,而不是应用程序控制,这种情形与正向控制相反就叫做反转控制。

Q: 控制反转带来了什么好处?

A: 控制反转不仅减轻了应用程序的代码复杂性,更给IOC框架的扩展性带来好处,比如IOC框架可以实现对象单例模式,多例模式,引入事物管理,日志管理,安全管理等等功能,比如Spring产品家族。

Q: 依赖是什么?

A: 依赖包括:临时使用,关联,聚合,组合,依赖关系从左到右增强。可以参考UML相关概念描述。

Q: 注入的目的是什么?

A: 使得对象可以依赖抽象,而不是具体实现类。主要好处是让应用程对象之间松耦合

2.3.2 典型注入框架
Unity 包含于微软企业库中,性能稳定 C#
Autofac 轻量,性能很高 C#
Spring 重量,功能强大 java

二、 水平方向架构

多层架构适合整体式程序,即一个程序实现了系统全部功能。随着企业规模越来越大,会面对不断的新需求和需求改动,在一个程序中进行扩展变得越来越难以进行。同时面对大并发的业务请求,程序在一个进程或者多个进程中运行都难以克服一个低效运行的功能代码造成的性能瓶颈。
人们找到了解决办法:将程序功能分割成服务程序,各服务程序在水平方向上并行开发和部署,由API连接各服务,这种方式使降低服务之间的耦合,部署更加灵活,性能调优可以针对独立的服务。

1. SOA架构

面向服务的体系结构(英语:service-oriented architecture)是构造分布式计算的应用程序的一种方法。它将应用程序功能作为服务提供给最终用户或者其他服务使用。
它采用开放标准、与软件资源进行交互并采用表示的标准方式。

1.1 简洁版架构

2017-09-28-23-05-14

1.2 服务的基本要素

2017-09-28-23-05-39

  • Policy(策略)

服务提供者有时候会要求服务消费者与某种策略通信。比如要求消费者提供安全标识,才能获取某项服务。

  • Endpoint(终结点)

终结点是一个描述提供或者接受服务的方式,包括网络协议,域名或者IP,端口信息。

  • Contracts(合约)

服务合约是服务提供者(通常是远程的)和使用者(客户)之间使用合约语言(XML、JSON、Java Object等)约定数据输入和数据输出的一份协议。

  • Messages(消息)

服务提供的消息,应满足服务的合约。

1.3 服务治理

服务治理SOA最大的话题,涵盖了以下内容:

  • 服务定义(服务的范围、接口和边界)
  • 服务部署生命周期(各个生命周期阶段)
  • 服务版本治理(包括兼容性)
  • 服务迁移(启用和退役)
  • 服务注册中心(依赖关系)
  • 服务消息模型(规范数据模型)
  • 服务监视(进行问题确定)
  • 服务所有权(企业组织)
  • 服务测试(重复测试)
  • 服务安全(包括可接受的保护范围)

为了解决以上问题,最为流行的做法在SOA架构中增加ESB(Enterprise Service Bus,即企业服务总线)集成。

2. 微服务架构

微服务是SOA的进化版本,把服务做到微型化。

2.1 简洁版架构

2017-10-10-20-31-20

2.2 服务的基本要素

2017-10-11-20-48-03

微服务架构下通过REST API提供提服务,所以不强调策略和合约,只要服务提供方暴露终结点和提供消息就足够了。

2.3 服务治理

SOA会遇到的治理问题,在微服务中一样会暴露出来。由于微服务系统中服务数量更多,生产环境中出现的各种问题更加突出。一部分人觉得微服务架构应该是去中心化,不需要ESB的中介作用,事实上为微服务的网关可以具备ESB的一些功能,比如安全检查/事物管理/复杂的工作流程等功能。

3. 整体式 vs SOA架构 vs 微服务架构

框架 前期开发效率 迭代开发效率 扩展能力 维护性
整体式 中,通常越来越低
SOA架构 中,趋势比较平稳
微服务架构 高,趋势比较平稳

如果是小团队,中小项目用整体式开发更好;如果有大量或者难以重构的遗留代码建议采用SOA架构;比如是全新的项目且预计将来会快速迭代成大项目则建议用微服务架构。

4. SOA典型框架

框架 特点 是否开源
WCF 微软出品,目前仅在windows下运行。它支持HTTP、TCP、命名管道之间的单向和双向消息通信,此外,在第三方扩展的帮助下,还支持任何基于消息的传输格式。 客户端开源
Spring Integration 基于Spring的轻量级开源框架,是一个干净、简练的EAI手段,也是很好的ESB产品替代者。现在的ESB方案沉重且很难引入到一些环境中。Spring Integration则是一个功能强大、低摩擦的替代方案,它能温和地解决一些最复杂的集成问题。
Mule ESB 它不是仅仅一个集成框架,而是一个包括一些额外功能的完整ESB ,Mule的Studio提供了一个很好的和直观的可视化设计。比Spring集成它更像是一个DSL。这一点很重要,如果集成逻辑比较复杂。
Apache Camel Apache Camel几乎和Mule ESB相同。你能想到的几乎每一个技术,提供很多很多的组件(比Mule ESB甚至更多)。如果没有可用的组件,你可以很容易地创建自己的组件

5. 微服务典型框架

Dubbo Spring Cloud Surging
开发语言 Java Java C#
开发方 阿里 Spring社区 个人
维护状态 不再继续维护 活跃 一般
互联网应用案例 阿里、京东、当当等 联通 华为 东软 暂无
基于协议 可选,默认dobbo http IPC
可用的语言 Java 所有语言 C#
分布式事物
无状态部署
服务器治理 服务发现、服务路由、服务负载均衡、服务列表、服务分组、服务依赖管理、服务权重、服务授权、服务直连、上下文隐式传参、分组聚合、结果缓存 除dubbo有的外:服务网关、断路器、服务跟踪、消息总线、批量任务 提供高性能RPC远程服务调用,采用Zookeeper、Consul作为surging服务的注册中心,集成了哈希,随机,轮询作为负载均衡的算法,RPC集成采用的是netty框架,采用异步传输
分布式配置 第三方
单元测试 支持 支持 未知

微服务思想重点在服务的自治,减少依赖)和治理(一个可靠安全的网关),它鼓励混合应用顺手的编程语言、开发框架,以减少高效开发与部署系统和软硬件环境之间的摩擦,比如企业内有java和.net开发团队则可以在Spring Cloud下用Asp.net core做平台开发微服务程序。

三、 总结

对于整体式程序或者一个服务作为整体式程序开发 ,可以采用洋葱模型架构。在处理数据时采用数据存取框架,对于UI可以采用服务器端MVC和客户端MVC框架。对于具有遗留程序的系统可以采用SOA架构来整合系统功能;如果系统越来越复杂,负载压力在不同程序功能上不平衡可以采用微服务架构。在全新的即将成为大型应用的系统采用微服务架构也是不错的选择。

参考文章:

http://blog.csdn.net/sinat_34093604/article/details/53082000

http://www.jdon.com/soa/integration-framework-comparison-spring.html

http://blog.csdn.net/qiumuxia0921/article/details/52713791

http://openwares.net/java/dip_ioc_di.html

http://www.cnblogs.com/summer7310/p/6394379.html

http://www.cnblogs.com/wangpenghui522/p/5430292.html

http://blog.csdn.net/zhengzhb/article/details/7190158

http://www.cnblogs.com/fanliang11/p/7191030.html

http://blog.csdn.net/orichisonic/article/details/48546061

转载于:https://www.cnblogs.com/vipyoumay/p/7735750.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core 企业级开发架构简介及框架汇总 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • JSON和String的相互转换

    1 java转JSON JSON toJSONString 将java对象 java集合 Json对象转为jsonString JSON toJSON 将java对象 java集合转为json对象 3 JSON转Java JSON pars
  • java中如何创建一个多线程类呢?

    转自 java中如何创建一个多线程类呢 下文笔者讲述创建多线程类的方法分享 如下所示 实现思路 方式1 继承Thread类 重新Run方法 方式2 继承Runnable接口 重写Run方法 方式3 使用拉姆达表达式 例 package co
  • 陷波滤波器(Notch Filter)和峰值滤波器(Peak Filter)

    陷波滤波器 Notch Filter 陷波滤波器是带阻滤波器的一种 其阻带很窄 因此也称点阻滤波器 常常用于去除固定频率分量或阻带很窄的地方 如用于去除直流分量 去除某些特定频率分量 峰值滤波器与陷波滤波器恰好相反 峰值滤波器是带通滤波器的
  • Sublime Text 3高亮主题配置

    之前由于sublime的默认主题 灰白 比较难看 所以用得少 最近找到了一个比较漂亮的主题 再次因为sublime的轻便再次高频使用 先上图 以下是python代码的显示情况 这里使用的是theme freesia主题1 该主题下还有很多配
  • 构建模型三要素与权重初始化

    学习过程中的好文 谨防失效 转载自博客园 结合此篇看 1 模型三要素 三要素其实很简单 必须要继承nn Module这个类 要让PyTorch知道这个类是一个Module 在 init self 中设置好需要的组件 比如conv pooli
  • 操作数及寻址方式

    操作数是什么 操作数是指 指令执行的操作所需要数据的来源 操作数是汇编语言指令的一个字段 例如 Mov AX 5678H操作数 AX 5678H 在操作数这个字段中可以放操作数本身 也可以放操作地址 还可以放操作地址的计算方法 通常一条指令
  • 数据结构之链表及LinkedList源码分析

    链表 1 概念 链表 Linked list 是一种物理存储单元上非连续 非顺序的存储结构 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 链表中每一 个元素称为结点 组成 结点可以在运行时动态生成 每个结点包括两个部
  • 设置Qt窗体透明度

    第一步给窗体设置属性 setWindowFlags Qt FramelessWindowHint setAttribute Qt WA TranslucentBackground 第二部重写paintevent 方法 void Loadin
  • GPG 错误由于没有公钥,无法验证下列签名

    问题描述 输入apt get update 时 提示 没有数字签名 无法安全地用该源进行更新 所以默认禁用该源 主要原因是由于apt get update没有公钥 无法验证下列签名 错误 1 http mirrors aliyun com
  • Vuex状态管理详解

    Vuex详解 学习目录 vuex介绍 解释 Vuex是一个专门为Vue js应用程序开发的状态管理模式 它采用集中式存储管理应用的所有组件 并以相应的规则保证状态以一种可预测的方式发生变化 配套的公共数据管理工具 它可以把一些共享的数据放到
  • Styles and Themes

    http blog csdn net recordgrowth article details 52310974
  • 下载matlab内存不足怎么办,MATLAB 内存不足 "Out of memory" 解决办法

    如果你的系统是32位系统 进程最大支配2G空间 另外2G给系统进程了 在使用matlab 运行耗内存程序时候 会可能出现 out of memory 错误 这是因为matlab没有足够内存可以使用的缘故 解决的简单方法是加内存和升级为64位
  • Flash Linux to eMMC

    实验目的 从eMMC启动Linux系统 Step1 确定eMMC被挂在哪个设备 哪个设备含有boot0分区和boot1分区 就是eMMC 实验中是位于mmcblk1上 root am64xx evm ls l dev mmcblk brw
  • QT入门Input Widgets之QScrollBar

    目录 一 界面布局功能 1 界面位置介绍 2 控件界面基本属性 2 1 horizontalScrollBar界面属性 3 样式设置 此文为作者原创 创作不易 转载请标明出处 一 界面布局功能 1 界面位置介绍 QScrollBar主要分为
  • Python使用Matplotlib可视化多组并排的柱状图

    Python使用Matplotlib可视化多组并排的柱状图 Matplotlib是Python中最流行的数据可视化库之一 它可以创建各种类型的图表 包括线性图 散点图 饼图等等 在本文中 我们将重点介绍如何使用Matplotlib库创建多组
  • CyclicBarrier调试

    一CyclicBarrier 控制所有线程等待 知道达到某种条件 所有的线程才会继续走下去 是一个同步工具类 它允许一组线程互相等待 直到到达某个公共屏障点才停止等待 与CountDownLatch不同的是该barrier 屏障 在释放等待
  • 在vw中运行linux,Windows系统直接运行Linux,竟是如此简单

    要想在Windows10以前的系统上 运行Linux程序是比较复杂的 需要使用cygwin之类的工具 不仅下载慢 而且功能有限 后来出现了诸如VirtualBox VMWare Workstation和Microsoft Hyper V之类
  • 使用python随机生成IP+域名并写入excel表

    题目要求 使用python随机生成IP 随机域名 并创建excel表 将生成的随机IP与域名数据写入 代码如下 import random import socket import struct import xlwt book xlwt
  • Window 安装Hive

    基本环境资源 Hadoop 2 7 X Hive 2 1 X bin tar gz 版本 Hive 1 x src tar gz 源码版本 第一步 windows 安装Hadoop2 7 x 请参考 第二步 下载Hive tar gz 官网
  • ASP.NET Core 企业级开发架构简介及框架汇总

    ASP NET Core 企业开发架构概述 企业开发框架包括垂直方向架构和水平方向架构 垂直方向架构是指一个应用程序的由下到上叠加多层的架构 同时这样的程序又叫整体式程序 水平方向架构是指将大应用分成若干小的应用实现系统功能的架构 同时这样