我真的很喜欢Bob Martin叔叔的视频“清洁建筑的原理”中的概念。但是我觉得这种模式就像是抽象工厂和生成器模式的组合核心。
差远了。
当您查看此内容时:
您正在查看对象图的设计。这决定了对什么的了解。这个故事缺少的是如何建立对象图。抱歉,在这里找不到。没有提及构造。
您可以在没有抽象工厂和建造者的情况下构造所有这些东西。我知道,因为我已经做到了。我什至没有着手避免它们。我爱他们。我只是没有碰巧需要它们。我只是使用了引用传递。依赖注入是它的幻想。
实际上,我可以构建您在主视图中看到的所有内容。然后,只需对一个对象调用一个方法即可开始整个过程。
现在,必须先存在事物,然后才能将它们推入其他事物。我在这里进行了探索,并给出了这个可爱的小图:
您甚至都可以离开而构建所有这些main()
。
当您要将一堆程序构造代码分解成一口大小的概念性块时,我建议使用构建器和工厂。但是,在干净的体系结构或任何其他流行术语体系结构中,没有什么要求您这样做。因此,如果您想坚持main()
,那就好。请求饶。
Bob Martin的“ Clean Architecture”是所有架构的经验法则还是只是其中之一?
我认为“清洁建筑”是一个流行语,用于将人们吸引到博客和书中。该博客和书籍对非常相似的较旧体系结构做了很好的解释,这些较旧的体系结构使用较旧的名称来将人们吸引到较旧的博客和较旧的书籍。特别是洋葱以及端口和适配器。这些都不是您唯一的体系结构选择。
我喜欢Bob叔叔,因为他是一位很棒的公开演讲者和作家。他让我想起了我本来没有的事情。但是,如果您让自己变成一个虔诚的狂热者,坚持必须按照自己的方式做所有事情,那么您会很快发现更新文档是最接近我的代码的地方。
当您的代码寿命长,并且环境不断变化时,这些术语必须保持不变,因此流行语体系结构非常有用。那是它的光芒。如果与代码相比世界是稳定的,那么您就没有充分理由使事情变得幻想起来。
不管事物看起来有多棒,您都可以在其中添加上下文以使其变得荒谬。抱歉,这也不是灵丹妙药。
但是在视频中,我觉得他建议干净的体系结构应该在业务逻辑和框架之间有明确的界限。框架(Web,Android等)应该是插入业务逻辑的插件。他甚至在视频中巧妙地嘲弄了轨道。
你是对的。他是这样的。鲍勃叔叔认为框架可以像库一样对待。他们可以。但是即使是这样的决定也会花费您一些钱。
马丁先生想要保留的空间是您的通用语言仍然通用的空间。当您将框架分布到各处时,您就放弃了。当您这样做时,您正朝着将语言转变为称为领域特定语言的道路前进。HTML是领域特定的语言。它的工作做得很好,但是还有其他工作根本做不到。
只要框架能够满足您的需求,一切都会非常顺利。期望您的需求很好。它使您处于使事情简单的盒子中。只需了解您为获得此目标而付出的一切即可。如果您将Spring传播到任何地方,您将无法再将其作为Java工作来宣传。这是Java / Spring工作。我可以对Ruby和Rails说同样的话,但是Rails很久以前就吃过Ruby的午餐。