【发布时间】:2015-08-20 21:38:45
【问题描述】:
我有一个使用实体框架与数据库交互的典型 Web 应用程序。这是应用程序的细分。
- Demo.Core [包含日志记录(nlog 内容)、助手类、系统 宽常量等]
- Demo.Entities [包含 Entity 框架实体或 edmx 文件 only - 没有上下文]
- Demo.Business [ 包含数据管理器、EF 上下文、业务 使用 NRules、验证和其他东西的规则]
- Demo.Web [包含作为前端的 MVC 应用]
现在我想在这个应用程序中使用 Akka.NET。我创建了一个封装 Akka System actor 的 Engine 类并创建了一个日志 actor (Demo.Core)。我认为引擎是一个类,它有一个可以在系统范围内使用的发送函数,该函数决定哪个参与者最适合处理消息。
但是,我无法决定如何根据 akka 管理数据上下文和实体类。
- 我应该有单独的 Actor 来检索每种类型的实体吗?或者 一个 Actor 用于检索所有实体?
- 我是否应该有多个具有不同上下文的演员来执行不同的操作? 角色,例如 DBReaderActor 和 DBWriterActor 或单个演员 有数据库的上下文吗?
- 是否可以拥有一个具有单一发送功能的引擎作为 上面提到的或者每个类都应该调用适当的actor 本身?
- 一个系统的参与者可以在多个程序集中吗?像 Demo.Core & Demo.Business?
-
如果我运行 Demo.Web 的两个实例,一个在 IIS 上,一个在 WebDev 上 他们会有 2 个独立的参与者系统还是一个单一的参与者系统 (他们都使用相同的代码库)?
我是 Akka.NET 的新手,所以在回答时请不要假设任何事情
【问题讨论】:
-
这里是新手。我这样做的方式(目前正在这样做)是为 dbWrite、dbRead、Webserver、记录器、缓存和其他服务设置单独的参与者。您可以在不同的上下文中使用它们,但请确保将它们的 actorSelections 传递给相互通信的 actor。否则,您会以某种方式“失去”解决透明度的问题。我边走边学。前一年我尝试过 erlang,所以我有点“明白”这个演员的想法。只需要了解内部机制。我建议你从 erlang book 开始
-
那么在 Akka.NET 世界中没有数据管理器的概念吗? IO 意味着通常我有不同的实体。要获得任何实体,我必须为每个实体创建一个演员?大约有 25 个实体……!这确实是一种不同的编程方式。
标签: c# model-view-controller architecture akka.net