我们是一家python商店,正准备构建一个大型服务器应用程序。
为了有效地模拟逻辑,我们计划使用DDD,包括域事件,规范,存储库等战术模式......
洋葱架构是否适用于python? 抽象能力在python中是否足够?
从技术上讲: 我做了一点研究,看到没有流行的DI容器,实际上DI在Python中被认为是一种不好的做法,因为DI是我用来在应用层中实例化复杂对象的方式看起来很可疑......
从结构上讲, python(CPython)中没有内置的多线程支持。 python提供的协作多线程模型对于具有横向扩展选项的单线程体系结构来说已经足够了。或者是吗?
在潜水之前是否还有更多值得考虑的挑战和事情?
底线是: 有没有人有使用DDD和Python实现大规模企业应用程序的经验? 或者我们应该坚持使用.NET / Java并且安全吗?
提前致谢, 埃里克。
答案 0 :(得分:7)
不确定,但听起来你可能是来自java / .net商店的这个组织中的新雇员(“... 考虑到DI是我用来实例化复杂对象的方式应用层看起来很可疑 ......)。
请记住
您几乎可以使用任何编程语言进行干净设计的DDD。
看一下Add Roll提供的视频。基本上,主要观点是解决方案可扩展性由架构和设计选择决定,而不是编程语言或平台。
还要考虑,Drop Box是使用Python构建的,并且在考虑任何C优化之前已扩展到100万用户。
<强>净净强>
从产品开发的角度来看,您通常不希望使用“新”技术将任何关键路径项置于风险之中。新的可能意味着新的市场或新的团队/组织。在这种情况下,根据您的帖子的第一部分“我们是一家蟒蛇店”,我至少会尊重您内部团队的专业知识,并利用您现有团队的核心竞争力。与重新培训员工使用其他技术平台相比,您的项目风险要低得多,并缩短产品上市时间。
答案 1 :(得分:0)
如果您会原谅(a)无耻的自我提升和(b)复苏旧线程,那么我的同事Bob和我写了一本书,都是关于用Python做DDD和DDD相邻的“东西”的:
https://www.cosmicpython.com/(O'Reilly,但可以免费在线阅读全文)
回答您的问题:
绝对。本书讨论了实现洋葱/端口和适配器/干净架构模式的方法。我正在考虑有关“抽象能力”的问题,担心Python的动态特性和缺乏正式接口?但实际上,这些都不是障碍。如果您想要界面之类的东西,可以使用ABC和新的typing.Protocol
,但如果没有它们,您可以脱身。
在Python世界中,人们有时对DI持怀疑态度,但我不会说人们认为这本身就是一个坏习惯。在本书中,我们提供了一些辩护,并讨论了优点和缺点,并展示了“滚动自己的” DI(Mark Seeman称之为“ Pure DI”或“ Poor Man's DI”的方法)以及一些方法。 Python DI库的指针设置
我们做到了,结果很好!因此,如果有人在考虑这个问题,那就快来加入乐趣吧! :-)