Java 简单的工厂检查数据正确性

Java 简单的工厂检查数据正确性,java,Java,我有一个Month类,它包含一些数据,如数字、天数等。我想简单地创建这个类实例。我决定创建一个简单的工厂,它包含月份数据并返回就绪对象。我的问题是在哪里检查数据的正确性,例如,一月份有31天,还有几天。。。Month类应该检查数据是否正确,还是工厂应该对此负责?在这种情况下,我们可以使用无效数据创建Month对象…您的Month类应该自己进行检查。最好的做法是让逻辑只依赖于类本身中的类。否则,如果其他人使用您的应用程序并在不使用工厂的情况下实例化一个月对象,它将正常工作,但它不会是您作为设计师所

我有一个Month类,它包含一些数据,如数字、天数等。我想简单地创建这个类实例。我决定创建一个简单的工厂,它包含月份数据并返回就绪对象。我的问题是在哪里检查数据的正确性,例如,一月份有31天,还有几天。。。Month类应该检查数据是否正确,还是工厂应该对此负责?在这种情况下,我们可以使用无效数据创建Month对象…

您的Month类应该自己进行检查。最好的做法是让逻辑只依赖于类本身中的类。否则,如果其他人使用您的应用程序并在不使用工厂的情况下实例化一个月对象,它将正常工作,但它不会是您作为设计师所期望的


你可以随意处理一个错误,但我会在构造函数中处理,如果有人试图用无效参数实例化它,我会抛出一个错误

在将参数传递给构造函数之前,应该先验证这些参数

但是,如果输入是动态的并且不是由您完成的,那么静态工厂方法可能不是验证输入的最佳位置

如果您只是想确保编译器在使用无效参数时发出警告,则可以抛出如下检查异常:

public static final Month newMonth(int numberOfDays) {
if(numberOfDays > 31 || numberOfDays < 28) {
throw new IllegalArgumentException("invalid numberOfDays");
}
return new Month(numberOfDays);
}

无论如何,在我看来,你不应该走try…catch的路,也不应该让构造函数验证任何东西,因为这会使你的代码可读性大大降低,而且如果你更改验证方法,还会破坏许多其他代码。

请不要重新创建日历类!有人已经帮你做了。看看Java 8包。这是学习如何设计Month之类的课程的良好起点

月和月日的概念不应该在同一个类中混合使用。因为一个月有多少天取决于年份和日历系统。从年月日创建日期时,应验证无效天数。因此,它是日期对象构造过程的一部分

这看起来很奇怪:

Month january = Month.newMonth(31);
从int创建Month对象的factory方法应检查参数是否在1月1日到12月12日的范围内,并返回表示具体月份的枚举

这就是我所期望的:

Month january = Month.newMonth(1);