我已经看到并使用了各种不同的方法来创建对象,但在验证创建同一个对象所需的数据时,还没有找到任何模式。
那就是说,首选的方式是什么?
public SomeClass(Product product, Device device, PlatformType platformType, User user, Country country)
{
if (environment == null || environment.Id == 0) throw new ArgumentNullException("environment");
if (device == null || device.Id == 0) throw new ArgumentNullException("device");
if (country == null) throw new ArgumentNullException("country");
if (userContext == null) throw new ArgumentNullException("userContext");
if (platformType == null) throw new ArgumentNullException("platformType");
Product = product;
Device = device;
PlatformType = platformType;
UserContext = userContext;
Country = country;
}
OR
public static class SomeClassFactory()
{
public static SomeClass Create(Product product, Device device, PlatformType platformType, User user, Country country)
{
if (environment == null || environment.Id == 0) throw new ArgumentNullException("environment");
if (device == null || device.Id == 0) throw new ArgumentNullException("device");
if (country == null) throw new ArgumentNullException("country");
if (userContext == null) throw new ArgumentNullException("userContext");
if (platformType == null) throw new ArgumentNullException("platformType");
}
return new SomeClass(product, device, platformType, user, country);
}
根据快速失败原则,它们似乎都是正确的方法,我只是不确定第一个,因为如果您正在创建一个对象,那么您有意识地验证所有数据#39;在你尝试创建它之前重新使用,并且因为你想重用那个验证,工厂模式更有意义,但也许我们只是一个品味问题。
答案 0 :(得分:0)
首先,我对这种验证并不十分熟悉。
这些是我对不同解决方案的看法:
赞成
缺点
赞成
缺点
SomeClass
的潜在不变性。免责声明:我赞成不可变类您可以将责任委托给包含某些规则的验证程序(在您的情况下只有一条规则:ObjectNotNull
)。
可能会出现向调用者提供一致参数的责任。如果SomeClass
仅在内部使用,您可以认为。
毕竟,我的第一个假设可能是假的,并且执行一些空检查本身并不是一个责任,但你可以看到它“修补调用者代码的一些弱点,因为他太懒而不提供非空值”。因此,您的第一个解决方案似乎完全合法。
希望我的想法可以帮到你。