我认为这可以实现目标 — 并且以非常高的水平实现。这是起步的一个好办法,但它还没有提供开始编程所需的足够细粒度。 第二次(和第三次……)的一些想法 无疑,在我有望创建一个可运行的且精心编写的 Codecheck 实用工具之前,我需要更加彻底地对事情进行考虑。然而,事实是我不能独立于代码构建过程来进行这种思考和设计。您曾经多少次提出一个很好的计划然后开始编程,但随后发现实际情况(就像这样:我怎么把这给忘了?)迫使您改变设计? 避免过度的设计是我从极限编程(一种轻型方法论,它将通行的编程实践发挥至极限,并且推动了我的 utPLSQL 单元测试框架;关于更多信息,请参见 www.XProgramming.com)中学到的最重要的原则之一。比如说,为一个三年的开发项目提出一个总体计划是否真的有意义,而我们都知道这个计划在六个月之内就会漏洞百出?在 Codecheck 的情况下,每个细节在构建程序包之前都考虑得过于具体对我是否真的有意义? 极限编程人员喜欢问这个问题:使代码运行最简单的方法是什么? 我喜欢回答这个问题所带来的挑战,因为它使我马上在几个层次上展开思考。什么是简单?它应该意味着
表 1 提供了 Codecheck 存储桶(现在直接称为程序包)的一个说明。当我象这样分隔代码时,还不可避免地要对程序包的层次结构进行考虑。在这个层次结构的最顶层是最复杂的程序包或程序,它们构建于其它许多元素之上。在最底层的是不可分割的程序包 — 小型、高度集中的程序包,它们支持一种用途,并且与其它的程序包没有太多的相关性。
向上一级是 cc_types 和 cc_names.这些小型、非常专门化的程序包除 cc_util 之外不引用任何程序包。再向上一个层次,我们开始碰到更强健和复杂的代码段。cc_arguments 程序包有一个非常明确的用途:合并来自 ALL_ARGUMENTS 和 DBMS_DESCRIBE 的信息。不过,要实现这一点,它将可能需要进入到更低的层次中。在 cc_arguments 之上,我们看到的是 cc_smartargs 和 cc_report.前者直接在 cc_arguments 之上构建,而 cc_report 使用更底层的程序包和 cc_smartargs 来完成它的任务。 在这个堆栈的顶层,我们有 Codecheck,它是为终端用户而设计的程序包,包含了由希望检查代码的 PL/SQL 开发人员来实际运行的程序。 新闻热点
疑难解答