최근에 나는 내 코드의 일부를 보호하는 것에 대해 생각하고있다. 객체를 직접 만들 수는 없지만 팩토리 클래스의 일부 방법을 통해서만 만들 수있는 방법이 궁금합니다. "비즈니스 객체"클래스가 있고이 클래스의 모든 인스턴스가 유효한 내부 상태를 갖도록하고 싶습니다. 이를 달성하기 위해 생성자에서 객체를 생성하기 전에 몇 가지 검사를 수행해야합니다. 이 검사를 비즈니스 논리의 일부로 만들기로 결정하기 전까지는 괜찮습니다. 그렇다면 비즈니스 로직 클래스의 일부 방법을 통해서만 생성 가능하지만 직접적으로는 불가능하도록 비즈니스 객체를 어떻게 배열 할 수 있습니까? 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 인스턴스를 직접 만들 수 있다는 것을 기억할 때까지는 괜찮습니다. 나는 그 기술적 가능성을 완전히 배제하고 싶습니다.
그렇다면 커뮤니티는 이것에 대해 어떻게 생각합니까?