DDD是浪费时间吗?

Jac*_*obE 53 oop domain-driven-design

谷歌搜索"DDD适合哪种应用?" 给了我以下答案:

可能95%的软件应用程序属于"使用DDD不太好"的类别.(见文章)

那么大惊小怪的是什么?!?

我正在处理的应用程序主要是以数据为中心,但仍然包含一些应用的业务逻辑和规则.开始应用DDD技术会浪费时间吗?我最好使用更传统的数据访问层,POCO模型和业务逻辑层吗?或者以不同的方式说明 - 什么是DDD的声音替代品?

Fra*_*uma 114

许多认为DDD对他们的项目有用的开发人员陷入陷阱,他们认为他们的工作就是编写代码.事实并非如此.开发人员的工作是实现功能,因此可以通过软件解决问题.这样得出的结论是,编写代码不是开发人员正在做的事情的开始,而是结束:代码是在实际编写代码之前整个过程的结果.

DDD不是编写代码,它不是一个关键的10步过程来获得优秀的软件,它是关于整个过程在编写代码之前,它是关于深入了解问题的全部内容,参与者是什么/谁信息流以及这些元素的外观,它们与彼此之间的关系等等.事实上,DDD最重要的部分是创建一种语言,使得领域专家和开发人员之间的对话成为可能,而不会产生误解.这是埃文斯谈论的"无所不在的语言".它实际上使得整个过程在代码编写过程之前几乎没有被猜到,事情是清晰和直接的.(这是目标).

"DDD如何在实践中发挥作用"和"有人能给我一个如何用DDD编写代码的例子"的问题吗?事实上,人们提出这类问题的重点是编写代码,但不知道他们为什么编写代码而不是其他代码.Iow:如果你意识到DDD是关于发现什么你要写作功能和为什么,事情就会发生.你是如何编写代码的,这取决于你.但正如所说:那不再是最大的问题,因为你已经知道你要写什么以及为什么.

  • 这是一种思考方式,而不是编写代码的方式.对域的思考驱动了您的设计,从而产生了可能是任何东西的代码.有些人错误地在代码中思考并忘记了思考,面向领域的设计. (20认同)
  • @LuftMensch:你错了,你认为维基百科是一个权威资源 (11认同)
  • 它是最大的协作纲要之一,任何人都可以编辑它......如果它在那里它至少意味着大多数人/很多人都在理解某些东西......实际上大多数人并不认为DDD对于业务的理解很简单 - 这是我们一直需要做的事情.在实践中,似乎是+为所有东西交换DataTables的自定义存储对象......以及管理和创建这些对象的存储库和工厂......然后你经常会有许多这些对象飞来飞去 - 因此最好只有在它们真正有用的地方才应用这些模式. (8认同)
  • +1 DDD优点的优秀描述.我认为它可以概括为"创建一种语言,使领域专家和开发人员之间的对话成为可能,而不会产生误解." (6认同)
  • 那么,维基百科正在以相当以代码为中心的方式定义DDD,或者至少强调使用某些特定于DDD的代码设计模式...... (4认同)

小智 11

很抱歉,如果DDD只是Frans Bouma所说的一种思考方式,那么它就不会推荐Persistence Ignorance这样的东西.这使得其他人成为有点下层阶级的开发人员.

DDD至少具有偏见的PI是一种架构选择.这不是一种思考方式; 它已经为你服务了,大部分时间都是含糊不清的警告:"不适合一切".

但是决定采用PI方式本身就是一个挑战,如果他对此感到不安,你就不能称呼某人("编码员").

在整个地方获取一个类似MS Access的界面的ERP软件包:具有运行总计的网格,自动更新列和100000条记录的无页面滚动.显然,DDD方法适合考虑如何使用此应用程序.但多年以来,我从来没有见过任何人 - 无论是在书本还是在线,通过证据支持的解释,更不用说现实代码示例,了解PI如何处理这种无处不在的情况,对于任何想要提供商业级应用和用户体验的人来说.

不想在这方面有宗教信仰.DDD和DAL的支持者往往过于虔诚,可能会驱逐那些被咬过一次但是心胸开阔的人.许多人只是想要面对现实生活中的体验(即思考),而不是只使用猫,汽车和基本的Order/OrdersItems(即糟糕的CODE)来支持讲道.

  • 我知道.. 我对愚蠢的汽车和订单行的例子太感兴趣了。_moment_ 我进入一个真正的 ERP 项目时,我遇到了一些非常困难的情况,这些情况很常见,但在我做过的所有 DDD 阅读中都没有涉及到。 (3认同)

Fra*_*cis 9

你知道,有时5%比其他95%赚更多钱 - 这就是DDD存在的原因.

它适用于特定的复杂大型系统.


Chu*_*way 8

这是一个非常相似的问题:您是否允许Web层直接访问DAL?

我在我的所有项目中使用DDD.在较小的应用程序中,一些概念不适用,但我发现许多方面适用于所有项目,无论大小如何.


Pre*_*gha 5

DDD是关于将保持一段时间的软件.对我而言,这意味着它需要表达随域变化的想法.当然,简单的应用程序可能是完美的短交货时间和短的实施时间.但是,如果您需要增加软件,那么DDD原则将会有很大帮助.DDD可能很难提前,但是一旦你了解了无处不在的语言和分离问题,那么事情就会变得容易.


Mne*_*nth 5

如果你再读一篇文章,你会看到:

对于5%的DDD适合的应用,它非常适合.对于这些情况,DDD将帮助您解决一个非常棘手的问题.在这里,DDD可能是你的经理刚刚指向你桌面的那个狼人的银弹.

这就是关于它的大惊小怪的原因.

  • 你还会看到这样的:“不要期待奇迹,并提防为了它而过度复杂化你的代码——有时更简单真的更好。” (2认同)

alc*_*cal 5

  • 由于您的应用程序主要以数据为中心,因此您的架构可能主要是传统的.

  • 对于有更多逻辑和潜在域或值对象的方面,也许您可​​以利用一些DDD想法来组织代码.

  • 一般来说,"声音替代"是让事情尽可能简单,在有用的地方使用DDD概念,并且不要像文章所建议的那样使事情变得不必要.

我现在开始一个类似的项目,它是数据操作和更多逻辑/算法驱动区域的混合.我同样喜欢采用有利于项目的DDD部分,但不要试图在可能适得其反的地方强制使用它.

  • DDD是一个噱头,它没有带来任何新的想法,它只是纯粹的旧OOP/OOD,偏向于编码实践的最新发展."首先与领域专家交谈,确定关键的抽象"是你在任何一本有关OOP的30年书中首先阅读的内容."在域类中封装功能,除非它没有意义"......呃! (2认同)