最近我一直在考虑保护我的一些代码.我很好奇如何确保永远不能直接创建对象,而只能通过工厂类的某种方法创建.让我们说我有一些"业务对象"类,我想确保这个类的任何实例都有一个有效的内部状态.为了实现这一点,我需要在创建对象之前执行一些检查,可能在其构造函数中.这一切都没问题,直到我决定将此检查作为业务逻辑的一部分.那么,我如何安排业务对象只能通过我的业务逻辑类中的某种方法创建,但从不直接?使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都没关系,直到你记得你仍然可以直接创建MyBusinessObjectClass实例,而无需检查输入.我想完全排除这种技术可能性.
那么,社区对此有何看法?