小编Ive*_*tev的帖子

Blazor 连接已断开

我有一个 Web 应用程序,其客户端在 Blazor 服务器上运行。我已设置自定义 Blazor 重新连接模式 ( <div id="components-reconnect-modal"...),如文档所述 - Microsoft Docs

我还对 SignalR 和 Blazor 电路进行了这些设置:

    services.AddServerSideBlazor
        (options =>
        {
            options.DisconnectedCircuitMaxRetained = 100;
            options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(5);
            options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(1);
            options.MaxBufferedUnacknowledgedRenderBatches = 10;
        })
        .AddHubOptions(options =>
        {
            options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
            options.EnableDetailedErrors = false;
            options.HandshakeTimeout = TimeSpan.FromSeconds(15);
            options.KeepAliveInterval = TimeSpan.FromSeconds(15);
            options.MaximumReceiveMessageSize = 32 * 1024;
            options.StreamBufferCapacity = 10;
        });
Run Code Online (Sandbox Code Playgroud)

但我有一个恼人的问题 - 每当应用程序在浏览器选项卡中打开并保持静止而没有人使用它时,它就会断开连接。它的发生非常不一致,我无法找到这些自定义时间段的配置,但我需要放大它们。例子:

  1. 最初于上午 11:34:24 加载应用程序
  2. 保持这样一段时间
  3. 在控制台中:“信息:连接已断开。” 上午 11:55:48,我的重新连接模式出现。

如何延长连接的生命周期,使其始终大于会话超时。我检查了我的应用程序池的私人内存限制,但它是无限的。它的发生确实与重现的相同步骤不一致。测试 1 - 16 分 20 秒;测试 2 - 21 …

signalr .net-core blazor blazor-server-side

9
推荐指数
1
解决办法
6728
查看次数

Observable 类型的 Angular @Input

将组件的 @Input 传入 observable 是不好的做法吗?

例如:父级的模板将有

<profile-edit [items$]="profileFacade.items$">
Run Code Online (Sandbox Code Playgroud)

并且 ProfileEditComponent 将有一个像这样的变量:

@Input items$: Observable<ProfileItem[]>
Run Code Online (Sandbox Code Playgroud)

并使用 | 异步管道解开 ProfileEditComponent 模板中可观察值的值

observable typescript angular

6
推荐指数
1
解决办法
3594
查看次数

DDD,事件存储,UI

我有一个项目,其设计或至少应根据众所周知的DDD原则.

  1. 返回 - DDD + CQRS +事件存储

  2. UI - ngrx/store

我有很多问题要问,但现在我会坚持这两个:

  1. 在执行单个命令/操作后,应如何更新UI存储?

a)订阅response.ok

b)听域名活动

c)触发持有创建/更新/删除对象的通用事件?

  1. 在每个命令/事件中将整个聚合根dto与其所有实体一起传输是一个好主意,还是最好有更细粒度的命令/事件,例如:只有一个属性?

c# domain-driven-design cqrs event-store

4
推荐指数
2
解决办法
594
查看次数

DDD,聚合根和实体

根据 DDD 原则,所有处理与特定聚合根对象相关的实体的 CRUD 操作都应该由聚合根进行。

但是我们如何从 aggr 根中仅更改实体的单个属性?我们应该在实体中有 setter 方法吗?这些方法应该有哪些访问器?

或者可能所有实体都应该有一个指向它们聚合根的引用?

或者我们永远不会只改变一个属性,而是用一个全新的实体代替当前的实体状态?

c# domain-driven-design aggregateroot

4
推荐指数
1
解决办法
1674
查看次数

EventSourcing 和 DDD 实体事件

我有一个使用 EventSourcing 的 DDD 项目。目前有许多聚合根,其中许多都有实体的集合。甚至更多 - 一些实体具有其他实体的集合。

问题:出于审计目的读取 EventSourcing 事件日志。

问题:当实体被更新/创建/删除时,在 EventStore 中保存事件的最佳方法是什么,记住所有这些事情:它们必须易于阅读,版本,可能不适合这种情况,但通常粒度事件更可取,可能域事件将用于跨域通信。

  1. 我是否应该在根流中将整个根以及其中的所有实体集合保存为 RootChangedEvent ?

  2. 我是否应该只将根流中已更新/创建/删除的实体保存为 EntityChangedEvent/EntityCreatedEvent/EntityRemovedEvent

  3. 我应该在根流中保存两个事件 - 一个用于根 - RootChangedEvent 只有版本属性 + 第二个用于实体,如果在 EntityChangedEvent 或整个实体中更改,则只有一个属性,如果 EntityCreatedEvent 或只有 id 如果 EntityRemovedEvent (如何处理实体的实体是否创建/更新/删除?)

这是我项目中的一个例子:

根 - 管道。

public class Pipeline : AggregateRoot<IPipelineState>
Run Code Online (Sandbox Code Playgroud)

它有实体集合 - public IList<Status> Statuses.

每个状态都有实体的集合 - public IList<Logic> Logics

所有集合都可以存储很多实体。现在我会引发诸如 PipelineCreatedEvent、PipelineChangedEvent 之类的事件(不仅在 Pipeline 更改时,甚至在添加、更新、删除状态或逻辑时)和 PipelineRemovedEvent。

events domain-driven-design cross-domain event-sourcing

4
推荐指数
1
解决办法
1167
查看次数

DDD - 虚构聚合根

有时候,当我有一堆实体域模型时,我会遇到这种情况,这些模型应该是事务性持久化的,但是没有逻辑域模型可以成为所有这些实体域模型聚合根.

在这些情况下,有一个虚构的聚合根域模型是一个好主意,它将没有类比数据库实体,并且不会持久存储在数据库中,但只存储事务持久化实体域模型的逻辑?

PS我想到了这一点,因为拥有一个只存储一列聚合根id的数据库表似乎对我不利.

domain-driven-design aggregateroot

2
推荐指数
1
解决办法
257
查看次数