class Report( | |
val women: List<Person>, | |
val men: List<Person> | |
) { | |
fun isEmpty(): Boolean { | |
return women.isEmpty() && men.isEmpty() | |
} | |
} | |
class ReportGenerator( | |
private val repository: Repository | |
) { | |
fun create(filter: (Report) -> Report): Report { | |
val people = repository.fetchAllPeople() | |
val rawReport = splitByGender(people) | |
if (rawReport.isEmpty()) { | |
return rawReport | |
} | |
// the filter function does not have any control over its invokation | |
val filteredReport = filter(rawReport) | |
return sortByName(filteredReport) | |
} | |
// ... | |
} | |
// example: | |
val reportGenerator = ReportGenerator(repository) | |
val withPeopleOver21 = { rawReport: Report -> | |
val over21 = { person: Person -> person.age > 21 } | |
Report( | |
rawReport.women.filter(over21), | |
rawReport.men.filter(over21) | |
) | |
} | |
val reportWithPeopleOver21 = reportGenerator.create(withPeopleOver21) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment