最近我一直在考虑保护我的一些代码。我很好奇,如何才能确保永远不能直接创建对象,而只能通过工厂类的某种方法来创建。假设我有一些“业务对象”类,我想确保这个类的任何实例都具有有效的内部状态。为了实现这一点,我将需要执行一些检查之前,创建一个对象,可能在其构造函数。在我决定将此检查作为业务逻辑的一部分之前,这一切都没有问题。那么,如何安排业务对象只能通过业务逻辑类中的某个方法创建,而不能直接创建呢?使用 C + + 中的“朋友”关键字的第一个自然需求在 C # 中是无法实现的。所以我们需要其他选择。
我们来举个例子:
public MyBusinessObjectClass
{
public string MyProperty { get; private set; }
public MyBusinessObjectClass (string myProperty)
{
MyProperty = myProperty;
}
}
public MyBusinessLogicClass
{
public MyBusinessObjectClass CreateBusinessObject (string myProperty)
{
// Perform some check on myProperty
if (true /* check is okay */)
return new MyBusinessObjectClass (myProperty);
return null;
}
}
直到您记住您仍然可以直接创建 MyBusinessObjectClass 实例,而无需检查输入之前,一切都没有问题。我想完全排除这种技术可能性。
那么,社区对此有什么看法?