Son zamanlarda kodumun bir kısmını güvenli hale getirmeyi düşünüyordum. Bir nesnenin hiçbir zaman doğrudan yaratılamayacağından, ancak sadece fabrika sınıfının bir yöntemi aracılığıyla nasıl emin olunabileceğini merak ediyorum. Diyelim ki bir "iş nesnesi" sınıfım var ve bu sınıfın herhangi bir örneğinin geçerli bir dahili duruma sahip olduğundan emin olmak istiyorum. Bunu başarmak için, bir nesne oluşturmadan önce, muhtemelen yapıcısında bazı kontroller yapmam gerekecek. Bu kontrolün iş mantığının bir parçası olmasını istediğime karar verene kadar sorun değil. Öyleyse, bir iş nesnesinin yalnızca iş mantığı sınıfımdaki bazı yöntemlerle, ancak asla doğrudan yaratılamaz olmasını nasıl ayarlayabilirim? C ++ 'nın eski güzel bir "arkadaş" anahtar kelimesini kullanmak için ilk doğal arzu C # ile yetersiz kalacaktır. Bu yüzden başka seçeneklere ihtiyacımız var ...
Bir örnek deneyelim:
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;
}
}
Girdiyi kontrol etmeden MyBusinessObjectClass örneğini doğrudan oluşturabileceğinizi hatırlayana kadar her şey yolunda. Bu teknik olasılığı tamamen dışlamak istiyorum.
Peki, toplum bu konuda ne düşünüyor?