我有一个 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 - 16 分 20 秒;测试 2 - 21 …
将组件的 @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 模板中可观察值的值
我有一个项目,其设计或至少应根据众所周知的DDD原则.
返回 - DDD + CQRS +事件存储
UI - ngrx/store
我有很多问题要问,但现在我会坚持这两个:
a)订阅response.ok
b)听域名活动
c)触发持有创建/更新/删除对象的通用事件?
根据 DDD 原则,所有处理与特定聚合根对象相关的实体的 CRUD 操作都应该由聚合根进行。
但是我们如何从 aggr 根中仅更改实体的单个属性?我们应该在实体中有 setter 方法吗?这些方法应该有哪些访问器?
或者可能所有实体都应该有一个指向它们聚合根的引用?
或者我们永远不会只改变一个属性,而是用一个全新的实体代替当前的实体状态?
我有一个使用 EventSourcing 的 DDD 项目。目前有许多聚合根,其中许多都有实体的集合。甚至更多 - 一些实体具有其他实体的集合。
问题:出于审计目的读取 EventSourcing 事件日志。
问题:当实体被更新/创建/删除时,在 EventStore 中保存事件的最佳方法是什么,记住所有这些事情:它们必须易于阅读,版本,可能不适合这种情况,但通常粒度事件更可取,可能域事件将用于跨域通信。
我是否应该在根流中将整个根以及其中的所有实体集合保存为 RootChangedEvent ?
我是否应该只将根流中已更新/创建/删除的实体保存为 EntityChangedEvent/EntityCreatedEvent/EntityRemovedEvent
我应该在根流中保存两个事件 - 一个用于根 - 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。
有时候,当我有一堆实体域模型时,我会遇到这种情况,这些模型应该是事务性持久化的,但是没有逻辑域模型可以成为所有这些实体域模型的聚合根.
在这些情况下,有一个虚构的聚合根域模型是一个好主意,它将没有类比数据库实体,并且不会持久存储在数据库中,但只存储事务持久化实体域模型的逻辑?
PS我想到了这一点,因为拥有一个只存储一列聚合根id的数据库表似乎对我不利.
c# ×2
.net-core ×1
angular ×1
blazor ×1
cqrs ×1
cross-domain ×1
event-store ×1
events ×1
observable ×1
signalr ×1
typescript ×1