摘要:
一、为什么需要声明式开发 .NET的MVVM,始于WPF,很古典,它甚至可能是现代前端框架“声明式开发”的鼻祖。声明式开发,之所以出现,是因为命令式开发在UI层和代码层上无法解耦的问题。如下图所示: 1、命令式开发:后台代码需要调用UI层的控件(label.Text),如果更新UI层,则后台代码也要 阅读全文
摘要:
当绑定目标和绑定源的数据类型不一致,且无法进行隐式转换时,可以通过转换器Converter进行数据类型的转换。转换器是一个实现IValueConverter接口的类,实现Convert和ConvertBack两个方法,其中Convert方法,传入绑定源数据,返回转换后的数据给绑定目标;ConverB 阅读全文
摘要:
本节内容,部分为补充内容,部分涉及到9.3.10-9.3.12(P335-342)。主要NuGet包: RabbitMQ.Client 微服务间,跨进程的事件发布和订阅,需要借助第三方服务器作为事件总线,目前常用的有Redis、RabbitMQ、Kafka等,本章节介绍RabbitMQ。 一、基本过 阅读全文
摘要:
本章节内容较多,目录如下: 基本概念 数据绑定的五种实现方式 绑定路径Path 绑定模式BindingMode 绑定数据源的字符串格式化StringFormat 绑定源设置为自身或上级RelativeSource 绑定源不存在链接属性的回退值或链接属性值为Null时的替换值 编译绑定 一、基本概念 阅读全文
摘要:
本节内容,部分为补充内容,部分涉及到9.3.8-9.3.9(P327-334)。主要NuGet包: MediatR.Extensions.Microsoft.DependencyInjection 领域事件可以切断领域模型之间的强依赖关系,但如果使用传递的事件机制,要求将事件的处理者显式的注册到事件 阅读全文
摘要:
本节内容,部分为补充内容,部分涉及到9.3(P321-326)。主要NuGet包:无 一、使用值对象的两种情形及其EFCore映射配置 1、没有标识符的从属实体类 如商店的地理位置,包含经度和纬度,可以定义一个包含Longitude(经度)和Latitude(纬度)两个属性的Geo类型。 如商品的质 阅读全文
摘要:
本节内容,部分为补充内容,部分涉及到99.3(P311-320)。主要NuGet包:无 领域建模有两种方式,一是贫血模式,二是充血模型。EFCore对充血模型,已经有了非常好的支持,我们应该通过充血模型的方式来设计实体,将有关个体的业务逻辑封装在实体内。 一、贫血模型:又叫POCO类,类中只有属性或 阅读全文
摘要:
本节内容,部分为补充内容,部分涉及到9.1-9.2(P299-311,326-327)。主要NuGet包:无 一、DDD领域驱动设计 1、DDD是一种设计思想,领域即业务,业务驱动设计,直接将业务映射到代码中。 2、DDD的设计始于领域的划分,一个项目可以划分为多个子域,并可以按功能划分为核心域、非 阅读全文
摘要:
PS1:点击查看Blazor中C#和JS互操作 PS2:Vue中,可以直接使用LocalStorage和IndexedDB对象,本章节案例主要以Blazor的使用为主 一、Storage对象 1、浏览器内置的键值对存储。locallStorage理论上永久保存在浏览器中(除非主动清除),而Sessi 阅读全文
摘要:
一、什么是Markup语法 XAML可以使用等效的C#后台代码,即可以用C#写UI。但是,C#代码还稍显繁琐,所以在C#代码基础上,由CommutityToolkit提供了Markup扩展包,可以使用更加流畅的C#语法来写UI。通过如下案例来对比一下三者差异: <!--XAML--> <Conten 阅读全文