我目前正在使用的遗留 Java 代码库使用了一个臭名昭著的框架。它在包装精美的 jar 中为我提供了开箱即用的域类。域类不过是一袋袋的 getter 和 setter。
这阻止了我通过从静态 Util 类中提取过程代码到它们应有的位置(即域类本身)来培育丰富的域模型。例如,考虑以下方法中的逻辑:
public static boolean areFriends(User user1, User user2) {
for (User friend : user1.getFriends()) {
if (friend.equals(user2)) {
return true;
}
}
return false;
}
这可以isFriendOf(User another)
在User
课堂上很好地表达。但是,User
班级都被锁定了。顺便说一句,框架使用生命周期方法来传递User
对象:
//Life-cycle method
public void execute(FrameworkBlob frameworFattyObject) {
...
User user = frameworFattyObject.getUser();
User loggedInUser = getLoggedInUserFromSomewhere();
bool areFriends = BadUtilClass.areFriends(user, loggedInUser);
...
}
牢记可测试性,有没有办法我可以这样说:
bool areFriends = user.isFriendOf(loggedInUser);