Posts

状态模式

状态模式

DbContext 应该被当成一次性、串行使用的工作单元,而不是可共享的并发容器。只要一段业务里存在并行执行,就要拆成多个 DbContext 实例,不要试图让同一个实例同时跑多个 EF Core 操作。

IDisposable

IDisposable 的价值不在于“手动管理内存”,而在于为垃圾回收器看不见的资源定义一个明确的释放边界;实际使用时,优先把释放动作交给 using。

LINQ 是否保持流式执行,关键不在查询写了几层,而在中间步骤有没有主动把序列物化成集合。只要你在自定义扩展或查询链里插入 .ToList() 这类操作,后续流程就会从“边枚举边产生结果”变成“先把上游全部拉进内存,再继续处理”。

https://learn.microsoft.com/en-us/dotnet/standard/linq/chain-queries-example

索引不是“加上就会更快”的通用优化开关,它本质上是额外维护的一份有序数据结构:查询受益,写入和存储付费。

大多数产品的规模永远不会触及需要专用数据库的瓶颈,先从简单方案出发,等真正遇到功能需求时再升级。

自定义组件

UserControl:适合组合已有组件,在应用内部使用;

Include

设置导航属性不意味着一定要使用 Include 的方式加载数据。

Step 1. Project Setup

event

是一种类型,表示方法签名(可指向一个或多个方法)。

你承接了从需求到具体代码实现之间的设计,你完全了解代码的结构,异常的边界,你指导 AI 去实现具体的代码编写,从而为自己节省时间和精力。

在 Windows 上意外递归创建了很深层的文件目录,占用倒是不大,但是直接删除删除不掉,文件管理器报错。

private static async void FireAndForgetMethod()

https://github.com/dotnet/wpf/blob/main/Documentation/developer-guide.md

从思路上来说 CancellationToken 是 .NET 提供的一种类型,这种类型的变量被用来从一个任务的外部终止任务。

Prism的导航

从 DI 容器中获得实例的时候,需要泛型或者 Type 实例,如果直接通过类型或者 typeof 关键字获取,都会使得当前项目依赖于所需要导航到的视图所属的项目(同一个项目内是无所谓,但一旦开始模块化这就会造成耦合)。

用于 CommunityToolkit.Mvvm 的 partial property Code Snippet。

https://learn.microsoft.com/en-us/dotnet/desktop/wpf/events/object-lifetime-events

await

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/await

double.ToString

private const double doubleVal = 10.789738975897389458937485738947857349;

// Source - https://stackoverflow.com/a/57430389

官方的 demo 中使用的是控制台程序,并通过 Console.ReadKey 来避免程序结束。

有限状态机

状态(State):系统在某一时刻所处的稳定情形

简单导航1

依赖于 CommunityToolkit.Mvvm 的简单导航。

简单导航2

不借用字符串去定位 ContentControl;

1. 创建一个 Window

1. 在应用所需显示 snackbar 的位置放置一个 ContentControl 控件作为容器(在 WPF-UI 中,这个容器是 SnackbarPresenter);

一般都会从主分支拉自己的分支,然后进行修改。