最近我一直在考虑保护我的一些代码。我很好奇如何确保永远不能直接创建对象,而只能通过工厂类的某种方法。假设我有一些“业务对象”类,我想确保此类的任何实例都具有有效的内部状态。为了实现这一点,我需要在创建对象之前执行一些检查,可能在其构造函数中。在我决定让这个检查成为业务逻辑的一部分之前,这一切都很好。那么,我怎样才能安排一个业务对象只能通过我的业务逻辑类中的某些方法而不是直接创建呢?使用 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 实例,而无需检查输入。我想完全排除这种技术可能性。
那么,社区对此有何看法?