- 博客(217)
- 资源 (3)
- 收藏
- 关注
原创 IOC容器和依赖注入
1 依赖倒置依赖倒置的核心价值:如果没有依赖倒置,全部都是依赖细节,如果分层架构是 A层---B层--C层---D层---E层---F层,下层的修改,可能会导致上层随之改变,F层如果改变,E层要改,D层要改,C层要改......影响很大,成水波式向上影响,架构就的极度不稳定。如果都是依赖于抽象的,抽象即接口或抽象类。 抽象是相对稳定的,修改下层不会影响上层。因为上层不是依赖于具体的,这让...
2024-08-16 17:04:00 557
原创 ASP.NET Core Blazor 5:Blazor表单和数据
本章将描述 Blazor 为处理 HTML 表单提供的特性,包括对数据验证的支持。1 准备工作 继续使用上一章项目。 创建 Blazor/Forms 文件夹并添加一个名为 EmptyLayout.razor 的 Razor 组件。本章使用这个组件作为主要的布局。@inherits LayoutComponentBase<div class="m-2"> @...
2024-07-03 20:54:00 583
原创 ASP.NET Core Blazor 4:高级Blazor特性
本章解释 Blazor 如何支持 URL 路由,以便通过一个请求显示多个组件。展示如何设置路由系统、如何定义路由以及如何在布局中创建公共内容。 本章还介绍了组件的生命周期,它允许组件积极地参与 Blazor 环境,这在开始使用 URL 路由特性时尤为重要。最后,本章解释了组件在前面章节描述的父!子关系之外的不同交互方式。 路由特性允许组件响应 URL 中的更改,而不需要新的 HTTP...
2024-06-29 09:07:00 510
原创 ASP.NET Core Blazor 3:使用 Blazor Server (2)
1 准备工作 继续使用上一章项目。 本章展示如何组合Razor组件来创建更复杂的特性。展示如何创建组件之间的父子关系,如何利用属性配置组件,以及如何创建自定义事件,以在发生重要更改时发出信号。还展示了组件如何从父组件接收内容,以及如何使用模板组件一致地生成内容,模板组件可以用一个或多个泛型类型参数定义。在本章结束时,演示了 Blazor应用程序如何对连接和应用程序错误做出反应。2 结合...
2024-06-26 14:17:00 863
原创 ASP.NET Core Blazor 2:使用 Blazor Server (1)
Blazor 是 ASP.NET Core 新添加的一个功能,它向 Web 应用程序添加客户端交互性。Blazor 有两个变种,本章将重点介绍 Blazor Server,另一种是 Blazor WebAssembly。解释它解决的问题和它是如何工作的。展示如何配置 ASP.NET Core应用程序来使用 Blazor Server,并描述使用 Razor 组件时可用的基本特性,这是 Bla...
2024-06-24 13:52:00 890
原创 ASP.NET Core Blazor 1:创建准备项目
本章将创建贯穿这一部分的示例项目。1 创建项目dotnet new globaljson --sdk-version 3.1.101 --output MyAdvanceddotnet new web --no-https --output MyAdvanced --framework netcoreapp3.1dotnet new sln -o MyAdvanceddotnet ...
2024-06-22 17:45:00 974
原创 ASP.NET Core应用程序14:创建表单应用程序
前几章集中讨论了处理 HTML 表单一个方面的单个特性,有时很难看到它们如何组合在一起执行常见的任务。本章将介绍创建控制器、视图和 Razor Pages 的过程,这些页面支持具有创建,读取、更新和删除(CRUD)功能的应用程序。本章不介绍新的功能,目标是演示如何将标签助手模型绑定和模型验证等功能与 Entity Framework Core 结合使用。1 准备工作 本章继续使用上章项...
2024-06-21 14:34:00 325
原创 ASP.NET Core应用程序13:使用过滤器
过滤器将额外的逻辑注入请求处理。过滤器类似于应用于单个端点的中间件,可以是操作或页面处理程序方法,它们提供了一种管理特定请求集的优雅方法。 本章描述 ASP.NET Core 过滤器特性,并解释如何使用它来更改特定端点的请求和结果,描述不同类型的过滤器,演示了如何创建和应用每种过滤器。还展示了如何管理过滤器的生命周期并控制它们的执行顺序。1 准备工作 本章使用了上章项目。 删除...
2024-06-19 17:19:00 366
原创 ASP.NET Core应用程序12:使用模型验证
模型验证是确保请求中提供的数据是有效的。 本章描述 ASP.NET Core 数据验证功能。解释了如何显式地执行验证,如何使用属性来播述验证约束,以及如何验证单个属性和整个对象。演示了如何向用户显示验证消息,以及如何通过客户端和远程验证改进用户的验证体验。1 准备工作 继续使用上一章项目。 修改 Views/Form 文件夹的 Form.cshtml。@model Produ...
2024-06-16 16:47:00 484
原创 ASP.NET Core应用程序11:使用模型绑定
模型绑定是使用从 HTTP 请求获得的数据值,创建操作方法和页面处理程序所需的对象的过程。本章描述模型绑定系统的工作方式;显示它如何绑定简单类型、复杂类型和集合;并演示如何控制流程,以指定请求的哪一部分提供应用程序所需的数据值。 本章介绍了模型绑定特性,展示了如何使用带有参数和属性的模型绑定,如何绑定简单和复杂类型,以及绑定到数组和集合所需的约定。还解释了如何控制请求的哪一部分用于模型绑...
2024-06-15 15:53:00 350
原创 ASP.NET Core应用程序10:使用表单标签助手
本章描述用于创建 HTML 表单的内置标签助手。这些标签助手确保表单提交到正确的操作或页面处理程序方法,并确保元素准确地表示特定的模型属性。 本章解释 ASP.NET Core 提供的创建 HTML 表单的功能。展示如何使用标签助手来选择表单目标和关联的 imput、textarea 和 select 元素。1 准备工作 本章使用了前一章中的项目。 为准备这一章,替换 View...
2024-06-13 19:43:00 748
原创 ASP.NET Core应用程序9:使用内置的标签助手
ASP.NET Core 提供了一组内置的标签助手,可以应用最常用的元素转换。使用了内置的标签助手,就不必像前一章一样自己创建自定义标签助手。 本章描述了基本的内置标签助手,并解释了它们是如何用于转换锚、链接、脚本和图像元素的。还解释了如何缓存内容部分以及如何根据应用程序的环境呈现内容。1 准备工作 本章继续使用前一章中的项目。 注释Startup.cs中注释掉前一章标签组件助...
2024-06-05 15:42:00 334
原创 MySQL进阶之索引
1 索引概述 索引(index)是帮助MySOL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 索引的优缺点优势劣势提高数据检索的效率,降低数据库的IO成本索引列也是要占用空间的通过索引列对数据进行排序,降低数...
2024-06-02 22:22:00 316
原创 SQL Server报错:数据库"YourDatabaseName"的事务日志已满,原因为"LOG_BACKUP"
通过以下代码可以收缩日志,执行完后就不报错了。--设置简单模式 USE[master] GO ALTER DATABASE YourDatabaseName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE YourDatabaseName SET RECOVERY SIMPLE GO --设置压缩后的日志...
2024-05-30 16:30:00 827
原创 ASP.NET Core应用程序8:标签助手
1 准备工作 继续使用上一章项目代码,修改Startup.cs。public void ConfigureServices(IServiceCollection services) { services.AddDbContext<DataContext>(opts => { opts.UseSqlServer(Configuration[ ...
2024-05-29 19:30:00 636
原创 MySql报错:Lock wait timeout exceeded: try restadina transaction
这次是在Navicat上复制了一个表结构和数据准备备份一下,然后要用语句批量处理数据,结果导致项目上的更新操作报这个错误。 原因是因为表中的数据量太大,复制表一时半会卡到那了。 于是我在网上搜索了如下办法。尝试在数据库中杀死线程来终止复制表的操作。SELECT * FROM information_schema.INNODB_TRXSELECT * FROM informat...
2024-05-21 19:59:00 268
原创 ASP.NET Core应用程序7:使用视图组件
视图组件是类,为支持分部视图或者在父视图中注入少量Html或Json数据提供了应用程序逻辑。1 准备工作 Models文件夹中添加City.cs类和CitiesData类,为CitiesData添加服务。public class City { public string Name { get; set; } public string Coun...
2024-05-19 11:43:00 427
原创 ASP.NET Core应用程序6:Razor Pages
Razor Pages是生成Html响应的一种简化方式。它的简单性,意味着能够比MVC框架更快获得结果。它将单个视图与一个类关联起来,由该类为视图提供功能,并使用基于文件的路由系统来匹配URL。它的灵活性不如MVC,所以不适合复杂的应用程序。1 准备工作2 理解Razor Pages Razor Pages和MVC并不是二选一的情况,是可以共存的,Razor Pages以牺牲灵活性来...
2024-05-11 09:49:00 569
原创 SQL Server存储过程使用游标
ALTER PROCEDURE [dbo].[B_OF_DATA_PLA]ASBEGIN -- 声明变量 DECLARE @Value1 nvarchar(100),@Value2 datetime,@Value3 datetime -- 定义游标 DECLARE cE_OF CURSOR FOR SELECT E_NOF,E_OF_DATE_DEB_PLA,E_OF_DATE_...
2024-05-10 16:50:00 339
原创 vue学习--模板语法(五、选项卡案例)
案例:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="ht...
2024-05-09 23:18:00 246
原创 vue学习--模板语法(四、属性样式绑定&流程语句)
3.5 属性绑定1.Vue如何动态处理属性?v-bind 指令用法<a v-bind:href='url'>跳转</a>缩写形式<a :href='url'>跳转</a>2.v-model的底层实现原理分析<input v-bind:value="msg" v-on:input = "mag=$event.target....
2024-05-09 23:08:00 395
原创 ASP.NET Core应用程序5:控制器和视图(二)
1 准备工作在Startup中启用会话配置。services.AddDistributedMemoryCache();services.AddSession(options =>{ options.Cookie.IsEssential = true;});app.UseSession();2 使用ViewBag操作方法使用视图模型提供数据,但有时还需额外信息。可以使...
2024-04-24 10:47:00 349
原创 ASP.NET Core应用程序4:控制器和视图(一)
1 准备工作添加包:dotnet add package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation --version 3.1.12 开始使用视图2.1 配置应用程序HTML响应是使用视图创建的,视图则是混合了HTML元素和C#表达式的文件。配置Startup来启用HTML响应。services.AddControllers...
2024-04-24 10:42:00 522
原创 ASP.NET Core应用程序3:高级Web服务特性
1 准备工作添加SuppliersController控制器。[ApiController] [Route("api/[controller]")] public class SuppliersController:ControllerBase { private DataContext _context; public Supplie...
2024-04-24 09:24:00 429
原创 ASP.NET Core应用程序2:创建RESTful Web服务
1 准备工作2 理解RESTful Web服务Web服务最常见的方法是采用具象状态传输(Representational State Transfer,REST)模式。REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或者设计就是RESTful,核心就是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST的核心前提是Web...
2024-04-23 10:33:00 393
原创 ASP.NET Core应用程序1:创建示例项目
1 创建项目创建一个MyWebApp的空项目。也可以用一下命令行创建。dotnet new globaljson --sdk-version 3.1 --output MyWebApp已成功创建模板“global.json file”。dotnet new web --no-https --output MyWebApp --framework netcoreapp3.1已成功创建模板...
2024-04-01 10:45:00 332
原创 MySQL学习之触发器
介绍触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特 性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。INSERT 型触发器:...
2024-02-21 16:52:00 323
原创 MySQL学习之存储过程
存储过程 - 介绍介绍存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库SQL 语言层面的代码封装与重用。特点封装、复用可以接收参数,也可以返回数据减少网络交互,效率提升存储过程 - 基本语法创建CREATE PRO...
2024-02-19 16:16:00 273
原创 中介者模式
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。如图所示:Mediater是抽象中介者,定义了同事对象到中介者对象的接口,ConcreteMediater是具体中介者对象,实现抽象类的方法,它需要知道所有具体同事类,并从具体同事类接收消息,向具体同事对象发出命令。Colleague...
2022-10-18 10:46:00 16
原创 C#:插入排序
对于给定的一组记录,初始时假设第一个记录自成一个有序序列,其余的记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止。以数组{38,65,97,76,13,27,49}为例,直接插入排序具体步骤如下所示。第一步插入38以后:[38] 65 97 76 13 27 49第二步插入65以后:[38 65] 97 ...
2022-10-17 17:27:00 28
原创 MediatR:EF Core中发布领域事件
领域事件大部分发生在领域模型的业务逻辑方法上或者领域服务上,我们可以在一个领域事件发生的时候立即调用IMediator的Publish方法来发布领域事件。我们一般在聚合根的实体类对象的ChangeName、构造方法等方法中发布领域事件,因为无论是应用服务还是领域服务,最终都要调用聚合根中的方法来操作聚合,我们这样做可以确保领域事件不会被漏掉。但是在实体类的业务方法中立即进行领域事件的发布可能会...
2022-10-14 16:27:00 48
原创 C#:选择排序
介绍选择排序是一种简单直观的排序算法,它的基本原理如下:对于给定的一组记录,经过第一轮比较后得到最小记录,然后将该记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小记录并与第二个记录进行位置交换;重复该过程,直到进行比较的记录只有一个时为止。排序过程以数组{ 5, 4, 9, 8, 7, 6, 0, 1, 3, 2}为例,具体步骤如下:5...
2022-10-10 17:32:00 21
原创 MediatR:实现领域事件
领域事件可以切断领域模型之间的强依赖关系,事件发布完成后,由事件的处理者决定如何响应事件,这样我们可以实现事件发布和事件处理之间的解耦。在.NET中实现领域事件的时候,我们可以使用C#的事件语法,但是事件语法要求事件的处理者被显式地注册到事件的发布者对象中,耦合性很强,所以我们使用MediatR实现领域事件。MediatR是一个在.NET中实现进程内事件传递的开源库,它可以实现事件的发布和事...
2022-10-08 16:56:00 41
原创 C#:快速排序
1. 介绍快速排序是一种非常高效的排序算法,它采用“分而治之”的思想,把大的拆分为小的,小的再拆分为更小的。其原理如下:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止。具体而言,算法步骤如下:分解:将输入的序列array[m..n]划分成两个非...
2022-10-02 19:49:00 21
原创 SignalR:针对部分客户端的消息推送
上节我们使用Clients.All.SendAsync向连接到当前集线器的所有客户端推送消息,而在很多业务场景中,我们一般都只是向部分客户端推送消息。在我们进行客户端筛选的时候,有3个筛选参数:ConnectionId、组和用户ID。ConnectionId是SignalR为每个连接分配的唯一标识,我们可以通过集线器的Context属性中的ConnectionId属性获取当前连接的Connec...
2022-09-29 21:13:00 50
原创 SignalR:身份认证
集线器允许任意客户端连接的话会有安全问题,所以应该对连接进行验证,只有通过验证的用户才能连接集线器。SignalR支持验证和授权机制,我们同样可以用Cookie、JWT等方式进行身份信息的传递。由于JWT更符合项目的要求,因此这里讲解SignalR与JWT验证方式的使用。第1步:先在配置系统中配置一个名字为JWT的节点,然后在JWT节点下创建SigningKey、ExpireSeconds两...
2022-09-28 21:35:00 99
原创 SignalR:分布式部署
在多台服务器组成的分布式环境中,我们可以采用黏性会话或者禁用协商的方式来保证来自同一个客户端的请求被同一台服务器处理,但是在分布式环境中,还有其他问题需要解决。假设聊天室程序被部署在两台服务器上,客户端1、2连接到了服务器A上的ChatRoomHub,而客户端3、4连接到了服务器B上的ChatRoomHub,那么在客户端1发送群聊消息的时候,只有客户端1、2能够收到,而客户端3、4收不到;在客...
2022-09-28 15:53:00 48
原创 SignalR:协议协商
1.推送方式SignalR其实并不只是对WebSocket的封装,它支持多种服务器推送的实现方式,包括WebSocket、服务器发送事件(server-sent events)和长轮询。SignalR的JavaScript客户端会先尝试用WebSocket连接服务器;如果失败了,它再用服务器发送事件方式连接服务器;如果又失败了,它再用长轮询方式连接服务器。因此SignalR会自适应复杂的客户...
2022-09-28 11:55:00 27
原创 SignalR:基本使用
SignalR的介绍WebSocket在传统的HTTP中,只能客户端主动向服务器端发起请求,服务器端无法主动向客户端发送消息。有的业务场景下,我们需要服务器端主动向客户端发送消息,比如Web聊天室、OA系统、站内消息等。为了实现服务器端向客户端推送消息,在2008年诞生了WebSocket协议,并且该协议在2011年成为国际标准。目前所有的主流浏览器都已经支持WebSocket协议。Web...
2022-09-27 21:25:00 18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人