Positive consequences of good interface design


Let’s back to article of ISP and take this implementation:

PeopleTransporting {
  transport (Point A, Point B, int peopleCount)
}
SmallPackagesTransporting {
  transport (Point A, Point B, List<SmallPackage> smallPackages)
}
Car implements PeopleTransporting {
  transport (Point A, Point B, int peopleCount) {...}
}

Parcelobus implements SmallPackagesTransporting {
  transport (Point A, Point B, List<SmallPackage> packages) {...}
}

The usage is clear:

List<PeopleTransporting> peopleTransporters;
peopleTransporters.stream().forEach(pt -> pt.transport (pointA, pointB, peoples.size())

OK, so let’s check how this design is resilient to new requirements.

We need to transport BigPackages

BigPackagesTransporting {
  transport (Point A, Point B, List<BigPackage> packages)
}

Parcelobus implements SmallPackagesTransporting, BigPackagesTransporting{
  transport (Point A, Point B, List<SmallPackage> packages) {...}
  transport (Point A, Point B, List<BigPackage> packages) {...}
}

Truck implements BigPackagesTransporting {
  transport (Point A, Point B, List<BigPackage> packages) {...}
}


Leave a Reply

Your email address will not be published. Required fields are marked *