إخلاء المسئولية: إيجابيات كاذبة ؛ من الناحية العملية ، يعد هذا مفيدًا لـ "الاستكشاف" بدلاً من "الإنفاذ"
ترتيب عمودي
بشكل عام ، نريد تبعيات استدعاء الوظيفة لتشير إلى الاتجاه الهبوطي. أي أن الوظيفة التي تسمى يجب أن تكون وظيفة تعمل على الدعوة. هذا يخلق تدفقًا لطيفًا لأسفل وحدة رمز المصدر من المستوى العالي إلى مستوى منخفض. كما هو الحال في مقالات الصحف ، نتوقع أن تأتي المفاهيم الأكثر أهمية أولاً ، ونتوقع أن يتم التعبير عنها بأقل قدر من التفاصيل الملوثة. نتوقع أن تأتي التفاصيل ذات المستوى المنخفض. يتيح لنا ذلك تقليل ملفات المصدر ، والحصول على جوهر من الوظائف القليلة الفريدة ، دون الحاجة إلى إخراجه في التفاصيل.
- رمز نظيف ، الفصل 5 ، ص 84 ، روبرت سي مارتن ، 2009

go install github . com / nikolaydubina / vertfn @ latest vertfn --verbose ./...
يعد تحسين المعدل الإيجابي الخاطئ جيدًا ، مثل الحالات التالية:
رمز نظيف ، الفصل 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 ();
response . setMaxAge ( 0 );
response . setContent ( html );
return response ;
}
...
}