Language agnostic 您使用什么工具来概述项目?

Language agnostic 您使用什么工具来概述项目?,language-agnostic,outlining,outliner,Language Agnostic,Outlining,Outliner,每当我开始做一些非常复杂的项目,以至于我不能一下子把所有的事情都记在脑子里时,我喜欢概述应用程序应该如何工作。。。我通常在文本编辑器中破解类似的内容: # Program is run # check to see if database exists # create database # complain on error, exit # ensure database is writable # complain to

每当我开始做一些非常复杂的项目,以至于我不能一下子把所有的事情都记在脑子里时,我喜欢概述应用程序应该如何工作。。。我通常在文本编辑器中破解类似的内容:

# Program is run
#     check to see if database exists
#         create database
#             complain on error, exit
#     ensure database is writable
#         complain to user, exit
#     check to see if we have stored user credentials
#         present dialog asking for credentials
#             verify credentials and reshow dialog if they're invalid
#     show currently stored data
#     start up background thread to check for new data
#         update displayed data if new data becomes available
#     ...
# 
# Background service
#     Every 15min update data from server
#     Every 24 hours do a full sync w/ server
等等(注意:这是注释的,所以不会解析它,不是因为我将它作为注释包含在代码中)


我想知道你们是怎么做到的。是否有任何工具用于概述程序流程?您如何描述复杂的项目,以便在编写代码时能够专注于代码,而不是所有小部分的设计/架构

有关文档的任何内容:维基、维基和更多维基 易于阅读,最重要的是,任何人都可以轻松更新

我最喜欢的一个:(无论如何不仅仅是一个wiki)

Emacs M-x

或者,纸

p、 这是一个严肃的回答

是否有任何工具用于概述程序流程

您的主要评论(“程序正在运行”)可以用“流程图”表示

您的底部注释(“后台服务”)可以使用“数据流图”表示

我不使用流程图(与您编写的相应伪代码/文本相比,我没有发现它们增加了价值),但我喜欢用数据流程图来显示系统的顶层视图(即数据存储/格式/位置,以及数据处理阶段/IO)。然而,数据流图早于UML,因此在“网络”上没有太多关于它们的描述。

我喜欢OO领域的任何东西。有几种很好的方法可以创建序列图,而无需花费所有时间来推动多边形

首先,有些在线序列图生成器接受文本输入。例如,请参见


还有一个nice,它接受文本输入并创建图表。这非常适合集成到您的构建过程中,因为它可以直接从ant调用。

如果有些东西很复杂,我喜欢图片,但我倾向于在纸上手工操作,这样我可以更好地可视化它。白板非常适合这样做

我将大型或复杂的应用程序分解成更小的部分,并在纸上进行设计,以便更好地理解各部分之间的流程

一旦我完成了各个部分之间的流程,我就可以更好地分别设计每个部分,因为每个部分都是它自己的子系统,所以如果我愿意,我可以更改语言或平台

在这一点上,我只是开始处理应用程序,一次只处理一个子系统,即使子系统可能需要分解,直到我有了一个可以保存在脑海中的部分

  • 用例
  • 活动图
  • 序列图
  • 状态机图
  • 类图
  • 数据库图
  • 最后,在完成这些工作并且项目看起来定义良好之后,进入Microsoft project

  • 我喜欢保持这个流程,因为它可以很好地记录、定义和解释事情,更不用说,这只是一个很好的过程。如果您不确定这些是什么,请查看我提供的更多信息,以及一些链接。

    如果我需要绘制这样简单的图表,我会使用GraphViz-DOT语言非常轻量级,在比较图表版本时差异非常大

    几个月前,我在博客上写了一个例子,展示了一个更复杂的架构图

    digraph windows {
     rankdir=LR
     label="Windows Invoked\nby controls and menu items"
     node[fontsize=12]
    
    /* ENTRY POINTS */
     wndMainMenu[shape=box color=red fontcolor=red]
     DEFAULT_WINDOW[LABEL="DEFAULT\NWINDOW" shape=box color=red fontcolor=red]
    
    
    /* WINDOWS */ 
     node[shape=box color=black fontcolor=black style=solid]
     App
     wndAddBill [label="Add Payable\nwndAddBill"]
     wndAddCustomer [label="Add a Customer\nwndAddCustomer"]
    
    ...
    
    /* WINDOW INVOCATION */
     node[shape=oval color=blue fontcolor=blue style=normal]
     edge[fontsize=10 style=normal color=blue fontcolor=blue]
    
     wndPayBills_bvlNewBill -> wndAddBill 
     wndAddCustomer -> wndAddCustomer_save001
     wndManageDrivers_bvlNewCustomer -> wndAddCustomer 
    
    我还刚刚添加了一个显示大型程序流的,用以说明GraphViz流是如何组成的。我没有时间去混淆所有的文字,所以把它放在那里作为一个低分辨率的图片,给人一种架构的印象,而不能够放大看到可读的细节

    这张图是经过一系列的放大后手工绘制的。为了避免过分嘲弄您,下面是生成图表的点文本的一些摘录

    digraph windows {
     rankdir=LR
     label="Windows Invoked\nby controls and menu items"
     node[fontsize=12]
    
    /* ENTRY POINTS */
     wndMainMenu[shape=box color=red fontcolor=red]
     DEFAULT_WINDOW[LABEL="DEFAULT\NWINDOW" shape=box color=red fontcolor=red]
    
    
    /* WINDOWS */ 
     node[shape=box color=black fontcolor=black style=solid]
     App
     wndAddBill [label="Add Payable\nwndAddBill"]
     wndAddCustomer [label="Add a Customer\nwndAddCustomer"]
    
    ...
    
    /* WINDOW INVOCATION */
     node[shape=oval color=blue fontcolor=blue style=normal]
     edge[fontsize=10 style=normal color=blue fontcolor=blue]
    
     wndPayBills_bvlNewBill -> wndAddBill 
     wndAddCustomer -> wndAddCustomer_save001
     wndManageDrivers_bvlNewCustomer -> wndAddCustomer 
    
    我建议使用 在设计时,您可以进入不同的深度。如果您对UML有足够的了解,大多数UML应用程序都可以为您自动生成代码的基本框架

    通常我依赖松散的UML,生成用例、用例图、类图、组件图,并且已经开始更多地使用序列图

    根据项目的不同,白板或记事本可以工作,但对于大小和时间合理的项目,我将使用ArgoUML完成所有工作 我过去很喜欢StarUML,但它只是Win32,现在对我来说没用了

    一本关于这个主题的好书正在出版 应用UML和模式:面向对象分析、设计和迭代开发简介(第3版)-(978-0131489066)

    我不得不在一门大学课程中学习它,这门课在教UML方面做得很差劲,但我保留了它,并且从那以后读了一两次


    这也值得一看:学习UML2.0-O'Reilly-[978-0596009823]

    基本上,您试图做的是提取给定When-Then格式的信息和用例。参考这种方法解决了这两个问题

    • 领域和边缘案例的理解
    • 概述解决方案,以便了解下一步的工作以及从何处开始

    我有点喜欢使用流程图(而不是文本),因为你可以做一些事情,比如让一些事情以一种非常明显的方式链接到一个结果。只是我用来构建它们的每一个工具都需要很长时间才能使用。我过去也做白板的事情,但编辑复杂的工作流程可能会很烦人。我在白板上进行初始的大规模设计,以查看各个部分,然后我会有我当前正在处理的图表,这样我就可以在头脑中保持流程,就像我在纸上设计的一样。你会如何用这个来描述流程?你能举个例子吗?我只是和水务署玩了一会儿。也许我遗漏了一些东西,但我做了,它需要更多的代码,而不仅仅是使用文本