【问题标题】:Domain Driven Design Windows Azure Web Job领域驱动设计 Windows Azure Web 作业
【发布时间】:2015-11-29 22:02:33
【问题描述】:

我的域模型的某些行为有资格委托给 Azure WebJob。如果我继续在网站和网络作业中使用相同的域模型类, 这似乎违反了关注点分离。两个不同的进程之间会有紧密的耦合。

后台进程(在这种情况下为 Web 作业)是否应该始终具有其专用的域模型和由此暴露的行为应仅由一个进程使用?

【问题讨论】:

  • 如果我理解正确,那么您基本上是在将您的网络角色解耦并引入一个网络作业以进行某种背景/重复处理。这似乎并没有违反 SoC。实际上,将它们分开是一种很好的做法,以便应用程序在组件之间拆分工作。

标签: c# azure domain-driven-design


【解决方案1】:

如果您的域模型对环境没有任何依赖项(应该如此),那么我认为这没有问题。

相反:在有界上下文中使用相同的域模型更可取,因为您可以在一个地方捕获业务规则。这样,您确定您不会运行两个模型之间的阻抗不匹配问题。

如果您使用域事件,则您已经有了与 Web 作业进行通信的基础。这正是我们一年多来一直在做的事情,而且效果很好:

  • Web 应用将域事件发布到 Azure 存储队列
  • Web 作业接收它们并在同一模型上执行后台处理

所以您需要做的就是创建两个单独的应用程序/服务层(一个用于 Web 应用程序,一个用于后台工作程序)并确保所有域逻辑都在一个可重用的库中。

【讨论】:

  • 谢谢,很高兴知道您的设置中使用了相同的 DDD 模型一年多了,并且运行良好。
  • 我在之前的项目中完成了 WebRole & Worker Role 设置,没有 DDD。 Worker 角色有专门的类库来封装业务逻辑。这种设置可能更适合更快的学习曲线,请问您有什么想法?
猜你喜欢
  • 1970-01-01
  • 2011-10-06
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多