3 ms·
Yes this is just extreme bike-shedding at this point. But none of this is impossible with more OO principles, like interfaces: class User { // Conv
by vips7L 2y ago
Yes this is just extreme bike-shedding at this point. But none of this is impossible with more OO principles, like interfaces:
class User {
// Convenience function to check if the user is an adult in their current location
boolean isAdult() {
return this.location.isAdult(this);
}
boolean isOfDrinkingAge() {
return this.location.isOfDrinkingAge(this);
}
}
interface Location {
boolean isAdult(User u);
boolean isOfDrinkingAge(User u);
}
class WeirdLawsLocation implements Location {
boolean isAdult(User u) {
return switch (u.gender()) {
case MALE -> u.age() >= 16;
case FEMALE -> u.age() >= 18;
}
}
boolean isOfDrinkingAge(User u) {
return u.age() >= 21
}
}
In the hypothetical that you want to check somewhere the user is not currently:
class SwedenLocation implements Location {
boolean isAdult(User u) {
return u.age() >= 18;
}
boolean isOfDrinkinAge(User u) {
return u.age() >= 18;
}
}
var sweden = new SwedenLocation();
sweden.isOfDrinkingAge(user);
- vips7L 2y agoOn a side note, this discussion really made me realize how useful concise method bodies would be in Java: https://openjdk.org/jeps/8209434 https://openjdk.org/jeps/8209434
- Terr_ 2y agoThat feels like unnecessary levels of indirection to provide a method that shouldn't be on the User anyway. j = Jurisdiction.fromUserLocation(user); j.isOfDrinkingAge(user);
- vips7L 2y ago> that shouldn't be on the User anyway. That’s just your opinion. It’s ok to provide convenience functions. I see no difference between the amount of indirection in our implementations, except mine is in the more natural place and you don’t have to know how to get a location or jurisdiction to answer the question: “is this user an adult?”. Knowing that it uses a location or jurisdiction is an implementation detail that you shouldn’t couple yourself to. Cheers mate, I think I’m done moving goal posts for this conversation :)
- ahoka 2y agoWow, thanks for proving that OOP was a mistake.
- vips7L 2y agoI challenge you to do it better then. Also from the guidelines: > Please don't post shallow dismissals, especially of other people's work. A good critical comment teaches us something.