【问题标题】:How to apply Domain Driven Design Principles, while designing a generic system?如何在设计通用系统时应用领域驱动设计原则?
【发布时间】:2012-11-28 09:10:17
【问题描述】:

所以,假设我们必须设计一个图书馆管理系统。现在,这可以通过领域驱动的设计原则来完成,方法是编写一种无处不在的语言,然后找出有界上下文,创建聚合根,最后拥有一个包含书籍、用户、作者等的对象模型。

但是,如果我们必须在 Salesforce 或 Sharepoint 上设计一个通用系统(具有设计和创建自定义表单和工作流的能力)怎么办。因此,首先我们将创建一个通用系统,它可以用于实现图书馆管理系统或任何其他系统,如人力资源管理系统或其他系统。

我们还能在设计通用系统时应用领域驱动设计原则吗?如果是,那么在普遍存在的语言中,我们应该列出领域对象,如书籍、用户、作者、员工、部门等,还是应该只列出通用对象/名称值对/哈希表。因为,这个通用系统可用于实现任何其他特定领域的系统。

换句话说,如何在创建通用系统时应用领域驱动设计原则?稍后可用于实现其他特定领域的系统。

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    我们还能在设计中应用领域驱动设计原则吗 通用系统?

    是的,DDD 可以应用于您描述的通用系统。

    如果是,那么我们应该在普遍存在的语言中列出域对象 比如书籍、用户、作者、员工、部门等,或者我们应该 只需列出通用对象/名称值对/哈希表。

    objecthashtable等名称不仅通用,而且具有很强的技术内涵。普遍存在的语言将在开发人员和领域专家之间共享,因此应尽可能减少技术影响。这并不是说诸如 object 之类的技术名称是错误的名称 - 请注意您的域和支持技术基础架构之间的区别。即使所有领域专家都是开发人员,区分这一点也很重要。

    可以说,DDD 由两部分组成——战术和战略。战术模式具有技术性质,包括存储库、值对象等。这些模式通常对每种语言和平台都有特定的表现形式。随着技术的变化,这些模式也最有可能发生变化。例如,如果将event-sourcing 与 DDD 一起使用,则战术模式会有所不同。在实施诸如您描述的战术模式之类的通用系统时,可能会再次有所不同。

    战略模式在更高的抽象层次上运作,包括有界上下文、上下文映射、无处不在的语言、模型/设计漩涡。这些模式不受技术限制,适用于战术模式之外。从某种意义上说,它们也比战术模式更重要,并且无论底层技术如何都适用,因为它们更适合人们的思维方式而不是计算机的方式。因此,您仍然可以从通用域中的战略模式中获益。

    【讨论】:

    • 但问题是,如果你在设计一个通用系统,你会用通用语言写什么。没有您定位的域。
    • 总是有一个域,在这种情况下,它恰好是一个通用/抽象/技术域。您可以在通用语言中使用可能是通用的术语,但它们不必具有技术含义,例如术语哈希表。
    • 所以你的意思是你可以使用 PrimaryEntity、ChildEntity 或 GenericResource 之类的词来表示一个通用实体。但是,不应该使用 Hashtable 或 Arraylist,因为它们是特定于技术的..
    • 是的。使用无处不在的语言的 DDD 的目标之一是将您的领域的核心方面提炼为纯知识,并尽可能少的技术内涵。这有助于对领域进行推理并促进交流。总的来说,这是一种微妙的思维转变,但它带来了好处。
    • 我也有同样的想法,但是域用户会根据所使用的业务为这些对象使用不同的名称/别名,这仍然让我感到困扰。他们会看到技术术语上的差异即使它与逻辑抽象而不是技术术语相关联,也要命名。这可能会在技术团队和领域团队之间进行讨论时发生。这仍然与无处不在的语言理念背道而驰。这部分有点自相矛盾。
    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多