Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 程序结构设计工具?(自上而下设计)_Language Agnostic_Design Patterns - Fatal编程技术网

Language agnostic 程序结构设计工具?(自上而下设计)

Language agnostic 程序结构设计工具?(自上而下设计),language-agnostic,design-patterns,Language Agnostic,Design Patterns,我一直在寻找扩展我的方法来更好地参与单元测试,我偶然发现了行为驱动设计(即Cucumber和其他一些)。我对这个概念很感兴趣,因为我从来没有能够正确地自上而下地设计,只是因为没有一个像样的方法来记录设计,跟踪设计就会丢失 因此,从语言不可知的角度来看,有没有我(可能)不知道的有用工具?例如,我经常尝试为我的程序构建流程图,但我不确定这会有多大帮助,而且我似乎有点困惑,我如何能够制作一个足够复杂的流程图来处理完整程序的逻辑及其所有功能。。也就是说,流程图似乎会限制设计方案。。或者可能发展到无法维持

我一直在寻找扩展我的方法来更好地参与单元测试,我偶然发现了行为驱动设计(即Cucumber和其他一些)。我对这个概念很感兴趣,因为我从来没有能够正确地自上而下地设计,只是因为没有一个像样的方法来记录设计,跟踪设计就会丢失

因此,从语言不可知的角度来看,有没有我(可能)不知道的有用工具?例如,我经常尝试为我的程序构建流程图,但我不确定这会有多大帮助,而且我似乎有点困惑,我如何能够制作一个足够复杂的流程图来处理完整程序的逻辑及其所有功能。。也就是说,流程图似乎会限制设计方案。。或者可能发展到无法维持的规模。BDD方法很好,但是对于一个与结构紧密相连的系统,与语言和单元测试紧密相连似乎是必须的(为了让它物有所值),而且似乎很难找到同时使用Python和Java(我的两种主要语言)的东西


所以无论如何。。在这方面,我们非常感谢您的任何评论。我在这里搜索过,似乎自上而下的设计是一个讨论得很好的话题,但我没有看到太多关于工具本身的参考,例如流程图程序等。如果有必要的话,我是在Linux上的(就程序而言).

我不想这么说,但您可能需要做完全相反的事情-不要预先设计整个系统,而是使用TDD/BDD,您的测试将推动设计

设计工具和图表的问题在于,当您开始编写和重构代码时,这些工具就会过时


通过编写测试,您可以确保toy只实现所需的功能,并且您的代码能够正常工作,因此您不需要设计工具,只需要一些指导原则和用户故事。

这确实是一个好问题。一般来说,BDD、TDD和敏捷并没有说你不能做前期设计,他们只是说不要设计超出你需要的东西——尽可能推迟任何决定。我相信你知道有一套工具,正是用于此,它被称为UML:)。你暗示努力方面是绝对正确的。只要UML图只是图片,它们就成了开发过程中的浪费和维护负担,因为开发过程中可能会发生快速变化。然而,您可以使用一些CASE工具,它将允许您(经过数月的咒骂:D…)创建图表,可以用来生成代码,当您需要在模型级别更改某些内容时,只需更改图表并重新生成(这实际上需要一些架构和预先工作,请查看一些模型驱动的方法)。我认为在这方面是最好的,中间会有些东西。这将使您能够轻松地建模(绘制和维护图表、流程图、状态机…),并允许您生成代码。我认为最好的方法是(外部)领域特定的语言。 例如,您可以使用诸如Xtext之类的工具为状态机创建语言,并为它们生成代码,例如根据GoF状态模式(或者您可以使用SMC工具,该工具仅对状态机执行此操作)来补充业务规则。将其与BDD相结合,您可以轻松发现一些问题,并且可以轻松地更改规则,而不会损坏现有代码(多亏了设计模式)。
我在硕士论文中的目标是创建一组多个DSL,这将使您能够以BDD方式描述与应用程序的交互,但将允许您不仅生成Cucumber之类的测试,还可以生成(部分)应用程序布局(如果你想在某个页面上看到一个按钮,很明显,在那个页面上你想看到那个按钮…)。您还可以与一些域对象进行交互,这些对象可以根据使用的体系结构进行建模,例如采用域驱动的设计风格。我认为这非常现实,因此建模非常值得。对于自上而下的设计,您需要某种抽象来从上到下移动,因此需要预先进行一些设计。

嗯,I g我同意Gabriel的说法,他说UML是你正在寻找的工具。UML顾名思义是一种为你的应用程序建模的语言。我也同意Dror的说法,当你开始重构代码时,很多设计工具都失败了。试图让你的图跟随你的代码是一件痛苦的事。你没有主要的可能性:

  • 使用UML和UML工具来设计高级应用程序架构或主要模块。这有助于在头脑中形成大局,突出可能存在的主要问题。当您开始编码和重构时,不要试图使您的图表最新。忘记它们。您可以在设计的下一次大型迭代中再次使用它们
  • 使用能够处理代码和设计之间同步的工具。根据我的经验,唯一能够做到这一点的工具是。(我很久没有使用过它了…)
无论如何,在我看来,有两个关键点:

  • 在设计之前,指定您的需求(用例、用户故事、需求,以及您喜欢的任何方法)
  • 您使用的工具必须为项目工作人员所理解。如果项目工作团队对这些工具没有明确的理解,那么使用它们将适得其反。我过去曾尝试过将这些工具一起使用,因为它可以与习惯于UML设计的人一起使用,而不习惯于使用这种工具的人则无法使用苏丹生命线行动

    my2c

两部分答案 其方法非常简单:

  • 从最抽象的意义上考虑算法。需要做什么

  • 将问题分解成子问题,然后递归地进行,直到这些问题变得足够简单,可以直接解决

  • 保存