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调用。如果有些东西很复杂,我喜欢图片,但我倾向于在纸上手工操作,这样我可以更好地可视化它。白板非常适合这样做 我将大型或复杂的应用程序分解成更小的部分,并在纸上进行设计,以便更好地理解各部分之间的流程 一旦我完成了各个部分之间的流程,我就可以更好地分别设计每个部分,因为每个部分都是它自己的子系统,所以如果我愿意,我可以更改语言或平台 在这一点上,我只是开始处理应用程序,一次只处理一个子系统,即使子系统可能需要分解,直到我有了一个可以保存在脑海中的部分
我喜欢保持这个流程,因为它可以很好地记录、定义和解释事情,更不用说,这只是一个很好的过程。如果您不确定这些是什么,请查看我提供的更多信息,以及一些链接。如果我需要绘制这样简单的图表,我会使用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格式的信息和用例。参考这种方法解决了这两个问题
- 领域和边缘案例的理解
- 概述解决方案,以便了解下一步的工作以及从何处开始