【问题标题】:How to architecture dynamic domain model java web app如何构建动态域模型 java web 应用程序
【发布时间】:2016-10-11 16:11:38
【问题描述】:

领域模型是

活动(娱乐、体育、测验)有很多 问题(娱乐问题、体育、测验相关的问题)。

问题有很多解决方案(每个团队上传一个解决方案),解决方案有很多等级(每个评委发布等级)。

最初的目标是从一种类型的事件(例如测验事件)开始,它有多个问题和解决方案。法官可以对解决方案进行评分。

未来可能会出现具有不同属性和行为的新型事件(Spots 事件)。对于体育赛事,问题可能有一组新的属性和行为,应该禁用解决方案模块,因为体育赛事裁判可以直接更新成绩。

所以我是否需要为每个事件制定工作流程,以打开和关闭特定模块。

想用 mongodb 做 Spring Boot 的微服务。

到目前为止我做了什么

我有

Event、Problem、Solution 和 Grade 的抽象类(根据事件类型分级属性可能会发生变化)。

以团队、问题和解决方案作为参考属性的注册域。

如何进一步进行,我是否在做最新的?

【问题讨论】:

  • 写更多代码,调试,修复错误(重复)

标签: java mongodb spring-boot architecture domain-driven-design


【解决方案1】:

我认为您可以从对可扩展设计进行建模开始。在我看来,起点是正确的,因为您必须区分事件、问题、解决方案、团队和评委。

一旦完成,我总是尽量让事物变得通用,所以当我开始混合所有部分时,它们可以独立于真实状态进行交互。也就是说,我尝试仅通过使用它们的接口/抽象类(一个问题 -> 许多解决方案,一个团队 -> 一个解决方案等)来在各个部分之间进行交互。我看不到有关您谈论的那些属性的信息,但我认为它们可以属于通用问题,并且仅在每种特定类型的问题上进行配置(但未声明)。

如果您能够做到这一点,那么您可以为类型(Fun、Sports、Quiz、Spots)创建一个枚举,以便您可以通过 Problem-Type 关系配置每种类型的问题。

我不知道如何表示问题,因为我没有足够的关于您的域的信息。但是我会做的是这样的,所以当以后出现新类型的问题时,我只需要创建一个新的类型枚举值和它的关系:

理解它只是为了让您更容易理解我的话,它与真正的设计相去甚远,因为我对拼图上的每一块都没有足够的信息。

尽管如此,作为起点,您可以选择应用一些有趣的设计模式,例如 Abstract Factory(如果您想为给定问题提供解决方案作为模板,那么团队必须填写它而不是从头开始创建它)或Strategy Pattern(因此您可以与每个问题以相同的方式进行交互,并根据 ProblemType 或确定问题状态的任何其他变量来控制行为)。

总结一下:

  1. 尝试提取每个部分的公因子以及它如何与其他部分相互作用。
  2. 此外,尝试独立于特定类型和属性进行交互,尽可能多地在公共接口中公开(只要有意义,显然)。
  3. 如果不可能,抽象工厂是一个选项,因此它可以让内部关系了解实现细节,而无需耦合外部部分。

一旦你这样做了,你就离制作一个无需任何努力就能满足你需求的动态模型又近了一步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多