【问题标题】:Large scale server application using DDD with Python? [closed]使用 DDD 和 Python 的大型服务器应用程序? [关闭]
【发布时间】:2013-11-24 09:05:59
【问题描述】:

我们正在准备构建一个大型服务器应用程序。

为了有效地建模我们计划使用 DDD 的逻辑,包括领域事件、规范、存储库等战术模式......

洋葱架构是否适用于 Python? Python 的抽象能力够吗?

从技术上讲:

我做了一些研究,发现没有流行的 DI 容器,实际上 DI 在 Python 中被认为是一种不好的做法,考虑到 DI 是我习惯于在 应用程序层中实例化复杂对象的方式 看起来很可疑……

从架构上讲, Python (CPython) 中没有内置的多线程支持。 Python 提供的协作多线程模型对于单线程架构来说已经足够了,并且具有横向扩展选项。是吗?

在潜入之前还有更多的挑战和值得考虑的事情吗?

底线是: 有没有人有使用 DDD 和 Python 实现大型企业应用程序的经验? 还是我们应该坚持使用 .NET/Java 并保持安全?

【问题讨论】:

  • 我投票结束这个问题,因为这个话题太宽泛,无法在这里的几段中涵盖。完整的答案需要很多页甚至整本书。请edit您的问题将焦点缩小到您首先遇到的具体问题。完成后,该问题将被审核并重新打开。

标签: python dependency-injection domain-driven-design


【解决方案1】:

不确定,但听起来你可能是这个组织中来自 java/.net 商店的新员工(“...考虑到 DI 是我习惯于在应用层看起来很可疑...)。

记住

  • 您可以使用几乎任何编程语言进行简洁设计的 DDD。

  • 观看由Add Roll 提供的视频。基本上,主要观点是解决方案的可扩展性取决于架构和设计选择,而不是编程语言或平台。

  • 另外考虑一下,Drop Box 是使用 Python 构建的,并且在考虑任何 C 优化之前已扩展到 100 万用户。

网网

从产品开发的角度来看,您通常不希望使用“新”技术将任何关键路径项置于风险之中。新可能意味着市场新手团队/组织新手。在这种情况下,根据您帖子的第一部分“We are a python shop”,我至少会尊重您内部团队的专业知识并利用您现有团队的核心竞争力。与重新培训员工以使用其他技术平台相比,您的项目将具有更低的风险并实现更快的上市时间。

【讨论】:

  • 关于你提出的观点: 1.我同意,所以我想看看有没有人有python的相关经验,提前知道可能会出现什么问题......尝试将 DDD 与 python 结合使用时出现问题。 2.“由架构决定”——没有多线程限制可用的架构......所以我再次问是否有人做过? “设计选择” * 没有 DI。 * python 中的洋葱架构? * 域/应用程序/技术服务与 python 模块的分离? 3. 我同意,python 绝对可以扩展.. 我们仍处于原型设计阶段,还没有在 python/.net 之间做出决定...))
  • 目前员工由两名服务器端开发人员组成:我和一名 python 开发人员,因此无论如何都需要重新培训......但我们是快速学习者...... ;)
  • 如果只有你和另一个人,团队足够小,可以在技术选择上采取任何一种方式。
  • @Erik 我知道 C#,所以再培训对我来说不是问题。
【解决方案2】:

如果你能原谅 (a) 无耻的自我推销和 (b) 恢复旧线程,我和我的同事 Bob 写了一本关于用 Python 做 DDD 和 DDD 相邻“东西”的书:

https://www.cosmicpython.com/(O'Reilly,但可以免费在线阅读全文)

回答您的问题:

  • 洋葱架构是否适用于 python? python的抽象能力够吗?

当然。这本书讨论了实现洋葱/端口和适配器/清洁架构模式的方法。我将关于“抽象能力”的问题视为对 Python 的动态特性和缺乏正式接口的担忧?但实际上这些都不是障碍。 ABC 和新的typing.Protocol 如果您想要接口之类的东西,它们就在那里,但没有它们您也可以侥幸逃脱。

  • 我做了一些研究,发现没有流行的 DI 容器,实际上 DI 在 Python 中被认为是一种不好的做法

在 Python 世界中,有时人们对 DI 持怀疑态度,但我不会说人们认为这本身就是一种不好的做法。在本书中,我们提供了一些辩护,并讨论了利弊,以及展示了“滚动你自己的”DI(Mark Seeman 称之为“Pure DI”或“Poor Man's DI”)的方法以及一对夫妇指向 Python DI 库的指针

  • 底线是:有没有人有使用 DDD 和 Python 实现大型企业应用程序的经验?还是我们应该坚持使用 .NET/Java 并保持安全?

我们做到了,结果很好!因此,如果有人在考虑它,请潜入并加入乐趣! :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2015-01-30
    相关资源
    最近更新 更多