If you haven't already done so, remove the testReport method from CourseSessionTest and remove the corresponding production code from CourseSession. The writeReport method is still short, but conceptually it is doing three things. To make understanding even more immediate, you can decompose the code in writeReport into three smaller methods, one each to construct the header, body, and footer of the report: String getReport() { StringBuilder buffer = new StringBuilder(); writeHeader(buffer); writeBody(buffer); writeFooter(buffer); return buffer.toString(); } void writeHeader(StringBuilder buffer) { buffer.append(ROSTER_REPORT_HEADER); } void writeBody(StringBuilder buffer) { for (Student student: session.getAllStudents()) { buffer.append(student.getName()); buffer.append(NEWLINE); } } void writeFooter(StringBuilder buffer) { buffer.append( ROSTER_REPORT_FOOTER + session.getAllStudents().size() + NEWLINE); } |