文章类型

原创[MAUI] 在.NET MAUI中结合Vue实现混合开发

[MAUI] 在.NET MAUI中结合Vue实现混合开发
在MAUI微软的官方方案是使用Blazor开发,但是当前市场大多数的Web项目使用Vue,React等技术构建,如果我们没法绕过已经积累的技术,用Blazor重写整个项目并不现实。Vue是当前流行的web框架, 简单来说是一套模板引擎,利用“模板”和“绑定”两大特性实现web页面mvvm模式开发。利用.NET MAUI框架可以将Vue应用嵌入到Web容器中。可以实现跨平台的混合开发。例如我在某医疗行业项目中,已经用这个混合开发的方式生成应用,Vue代码不需要做什么改动,就能跨平台运行:如果你

原创[MAUI] 混合开发概念

[MAUI] 混合开发概念
混合开发的概念是相对与原生开发来说的:App不直接运行原生程序,而是在原生程序中运行一个Web程序,原生程序中包含Web运行时,用于承载Web页面。暂且将原生应用称之为Web容器,Web容器应该能让JavaScript代码与原生平台的代码交互,互相调用,同时为上层提供交互逻辑,例如导航,事件,Cookie,刷新等内容。之前使用Xamarin可以利用WebView控件做混合开发,但是到目前为止WebView功能还是比较孱弱。用WebView实现混合开发主要是通过重写各个平台的自定义呈现器(Renderer

原创[.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造

[.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造
为什么要独立成服务?以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与查看,患者管理等功能,传统的架构如下:随着项目规模的增长,在开发过程中会发现如下问题:各模块之间耦合严重,比如:报表模块引用了问卷,用户,随访,患者管理等几乎所有模块,难以维护 间接引用的情况过多,导致项目分层不明确,容易产生引用分歧,难以维护目前做的就是解耦各个模块之间的强关联状态,通过上一章提到的上下文边界划分方式,我们大致可以将系统的架构改造如下:通过调用者和实现者共

原创[.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC

[.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC
上一章我们完成了小项目的面向服务体系改造,你或许一直在思考一个问题。为什么要将业务独立成微服务?以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与查看,患者管理等功能,传统的架构如下:随着项目规模的增长,在开发过程中会发现如下问题:各模块之间耦合严重,比如:报表模块引用了问卷,用户,随访,患者管理等几乎所有模块,难以维护 间接引用的情况过多,导致项目分层不明确,容易产生引用分歧,难以维护目前做的就是解耦各个模块之间的强关联状态,通过第一章提到的上下文

原创[.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍

[.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍
上一章我们建立了一个典型的面向领域设计的Abp小项目,如果按照常规的开发方式,会遇到什么问题呢?先来完善一下这个小项目,在定义好各实体类后,运行Miguration并向数据库里写入一些初始数据。现在整个项目的依赖引用图如下,每一个都有独立的引用路线,互不干涉。简略图如下假设现在有一个需求,MainService业务需要用到Service1和Service2 中的数据,如何操作?在使用Abp框架时,传统开发方式是先建立领域层服务,应用层中调用领域层服务(Manager)并返回给UI

原创[.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾

[.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾
在企业中大型项目中,随着业务的不断拓展,项目发展到一定程度,需要寻求项目的各模块解耦,独立成为微服务。如何实现呢?首先我们先来简单回顾一下Abp框架怎样实现(DDD)领域驱动设计的,Abp框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目),我们知道在领域驱动设计中,我们可以将整个系统分为四个大的层次,每一个层次都有其特定的功能,所以整个项目整体结构是非常清楚的。Eric Evans在《领域驱动设计-软件核心复杂性应对之道》这本书中提出了传统的四层架构

原创[.Net]使用ABP 数据库迁移migration遇到的坑及解决方案

[.Net]使用ABP 数据库迁移migration遇到的坑及解决方案
-> 问题:在使用Update-Database时,突然出现“数据库中已存在名为 'XXX' 的对象”。检查发现__EFMigrationsHistory表中的MigrationId与项目中的EntityFrameworkCore项目中的Migrations内容有不同的地方。ABP的更新机制是对比数据库的id与Migrations各文件Id,如果数据库缺少则往下继续执行,但如果有id冲突,则会认为产生分支,从第一个开始执行了。结果造成读到的全部是CREATE TABLE 的操作,从而产生冲突。解决

原创用PyInstaller打包PyQt程序

用PyInstaller打包PyQt程序
在工程根目录下新建一个打包脚本 pyinstall-singlefile.py 在工程根目录下创建icon图标,mainIcon.ico打开pyinstall-singlefile.py

转载渲染流程(下):HTML、CSS和JavaScript是如何变成页面的

文章详细解释了网页渲染流程的后续阶段,包括分层、图层绘制、栅格化、合成和显示。首先,页面被分层,形成图层树,以支持复杂效果如3D变换、滚动和z轴排序。每个元素可能属于一个图层,或者从属于父图层。图层的创建基于元素是否具有层叠上下文属性或需要剪裁。图层绘制阶段将图层分解为小的绘制指令,形成绘制列表。合成线程将这些指令执行,将图层划分为图块进行栅格化,使用GPU加速生成位图。最后,位图由浏览器进程合成并显示在屏幕上。文章还总结了渲染流程的关键步骤,并介绍了与渲染流程相关的概念,如重排、重绘和合成,以及如何通过优化这些过程来提高Web性能。

转载渲染流程(上):HTML、CSS和JavaScript是如何变成页面的

文章详细解释了网页渲染流程的前三个阶段:构建DOM树、样式计算和布局阶段。首先,浏览器将HTML转换为DOM树,以便理解页面结构。接着,通过CSS样式表计算DOM树中每个元素的具体样式,包括继承和层叠规则的应用。最后,计算DOM元素的几何位置信息,生成布局树,使页面元素在屏幕上正确显示。文章还提到了布局阶段的优化问题,如Chrome团队正在重构布局系统以提高清晰度和效率。

转载导航流程:从输入URL到页面展示这中间发生了什么

从输入URL到页面展示的完整流程涉及浏览器、网络和渲染进程的协同工作。首先,用户在浏览器地址栏输入URL并回车,浏览器进程检查并组装完整的URL。接着,浏览器进程通过进程间通信(IPC)将URL请求发送给网络进程。网络进程检查本地缓存,若存在缓存资源则直接返回;否则,发起HTTP请求至服务器。 服务器响应请求,网络进程解析响应头,若状态码为301或302表示重定向,网络进程读取Location字段发起新请求;若状态码为200,表示请求正常,网络进程继续处理。处理过程中,网络进程根据响应头的Content-Type字段判断数据类型,如果是下载类型则提交给浏览器下载管理器,如果是HTML则通知浏览器准备渲染进程。 渲染进程准备好后,浏览器进程通过IPC向渲染进程提交文档数据。渲染进程接收文档数据,开始解析页面和加载子资源,完成页面渲染。最后,渲染进程向浏览器进程发送确认消息,浏览器更新界面状态,显示完整页面。 整个流程中,服务器的响应头对浏览器行为有重要影响,如控制重定向和数据类型。Chrome默认为每个标签页分配一个渲染进程,但若两个页面属于同一站点,则复用渲染进程。理解导航流程是掌握浏览器工作原理的关键,它连接了网络加载和页面渲染,有助于深入理解浏览器操作机制。

转载TCP协议:如何保证页面文件能被完整送达浏览器

文章解释了TCP协议在保证页面文件完整送达浏览器过程中的作用。网络中,大文件被拆分为数据包传输,数据包在传输中可能丢失或出错。TCP协议通过三次握手建立连接,确保数据包的可靠传输。它引入了重传机制和数据包排序功能,即使数据包丢失或乱序,也能保证文件完整送达。文章从数据包送达主机、主机将数据包转交给应用和数据完整送达应用程序三个角度,详细阐述了数据传输过程。通过理解TCP协议,可以更好地优化Web性能,提升用户体验。

转载HTTP请求流程:为什么很多站点第二次打开速度会很快

文章解释了HTTP请求流程,从浏览器端发起请求到服务器端处理请求的全过程。主要分为以下几个阶段: 1. **构建请求**:浏览器构建请求行信息,准备发起网络请求。 2. **查找缓存**:在发起网络请求前,浏览器会检查缓存中是否有所需资源的副本,以提高加载速度。 3. **准备IP和端口**:浏览器通过DNS获取服务器的IP地址和端口号,为建立TCP连接做准备。 4. **等待TCP队列**:浏览器等待TCP连接的建立,限制同一域名下的并发连接数量。 5. **建立TCP连接**:浏览器与服务器建立TCP连接,开始HTTP通信。 6. **发送HTTP请求**:浏览器发送请求行和请求头,告知服务器所需资源。 7. **服务器处理请求**:服务器接收请求,处理并生成响应。 8. **返回请求**:服务器返回响应行、响应头和响应体给浏览器。 9. **断开连接**:服务器关闭连接,但通过`Connection:Keep-Alive`可以保持连接,提高资源加载速度。 10. **重定向**:在某些情况下,服务器会进行重定向,浏览器根据Location字段重新导航。 文章还解释了为什么第二次打开站点速度会很快(利用缓存)和登录状态是如何保持的(通过Cookie)。通过理解这些流程,可以更好地优化网站性能和用户体验。

转载Chrome架构:仅仅打开了1个页面,为什么有4个进程

文章解释了Chrome浏览器架构的演变,从单进程到多进程架构,以及如何解决不稳定、不流畅和不安全的问题。文章详细介绍了进程和线程的概念,以及它们之间的关系。接着,文章分析了单进程浏览器的缺点,如不稳定、不流畅和不安全,并解释了多进程架构如何解决这些问题。文章还讨论了Chrome的早期多进程架构和当前架构的变化,包括浏览器进程、渲染进程、GPU进程、网络进程和插件进程的功能。文章最后介绍了Chrome未来采用的面向服务架构(SOA)思想,以及Chrome正在构建的基础服务层和弹性架构。文章总结了Chrome架构的演变过程和未来方向,强调了Chrome快速进化的特点。