> ...
> }
> private String fName;
> private Vector fTests= new Vector(10);
> public TestSuite() {
> }
> public TestSuite(final Class extends TestCase> theClass) {
> ...
> }
> public TestSuite(Class extends TestCase> theClass, String name) {
> ...
> }
> ... ... ... ... ...
>}
Зависимые функции. Если одна функция вызывает другую, то эти функции должны располагаться вблизи друг от друга по вертикали, а вызывающая функция должна находиться над вызываемой (если это возможно). Тем самым формируется естественная структура программного кода. Если это правило будет последовательно соблюдаться, читатели кода будут уверены в том, что определения функций следуют неподалеку от их вызовов. Для примера возьмем фрагмент FitNesse из листинга 5.5. Обратите внимание на то, как верхняя функция вызывает нижние, и как они, в свою очередь, вызывают функции более низкого уровня. Такая структура позволяет легко найти вызываемые функции и значительно улучшает удобочитаемость всего модуля.
Листинг 5.5. WikiPageResponder.java
>public class WikiPageResponder implements SecureResponder {
> protected WikiPage page;
> protected PageData pageData;
> protected String pageTitle;
> protected Request request;
> protected PageCrawler crawler;
> public Response makeResponse(FitNesseContext context, Request request)
> throws Exception {
> String pageName = getPageNameOrDefault(request, "FrontPage");
> loadPage(pageName, context);
> if (page == null)
> return notFoundResponse(context, request);
> else
> return makePageResponse(context);
> }
> private String getPageNameOrDefault(Request request, String defaultPageName)
> {
> String pageName = request.getResource();
> if (StringUtil.isBlank(pageName))
> pageName = defaultPageName;
> return pageName;
> }
> protected void loadPage(String resource, FitNesseContext context)
> throws Exception {
> WikiPagePath path = PathParser.parse(resource);
> crawler = context.root.getPageCrawler();
> crawler.setDeadEndStrategy(new VirtualEnabledPageCrawler());
> page = crawler.getPage(context.root, path);
> if (page != null)
> pageData = page.getData();
> }
> private Response notFoundResponse(FitNesseContext context, Request request)
> throws Exception {
> return new NotFoundResponder().makeResponse(context, request);
> }
> private SimpleResponse makePageResponse(FitNesseContext context)
> throws Exception {
> pageTitle = PathParser.render(crawler.getFullPath(page));
> String html = makeHtml(context);
> SimpleResponse response = new SimpleResponse();