Ho chiesto una domanda su Stackoverflow in precedenza e qualcuno mi ha indirizzato a un post precedente di lui, afferma che l'iniezione di una dipendenza in un'entità viola il Principio di Responsabilità Unica.
Per salvare l'utente facendo clic sul link e fornire un contesto, ecco l'entità in discussione
public class MyEntity
{
private readonly IValidatorFactory _validatorFactory;
public MyEntity(IValidatorFactory validatorFactory)
{
_validatorFactory = validatorFactory;
}
//Entity Properties Removed For Clarity
public void Validate()
{
if(_validatorFactory == null)
{
throw new ArgumentNullException("Validator Factory was null, cannot validate this item");
}
var validator = _validatorFactory.GetValidator(this.ItemTypeId);
valid = validator.Validate();
}
}
Avrei pensato che avere l'IValidatorFactory che estraeva il tipo di convalida dall'entità era esattamente ciò di cui trattava l'SRP. Trasmette i problemi di convalida ad un'altra classe. Aderisce inoltre al principio Open / Closed e consente il polimorfismo / estensione anziché modificare il codice client esistente.
Per avere un valore reale qui, l'entità deve richiedere diversi tipi di convalida in base a un valore, che è ciò che accade quando this.ItemTypeId
viene utilizzato per ottenere il riferimento IValidator corretto.
Questo è un completo fraintendimento dei principal SOLID?
// modifica
La domanda contrassegnata come possibile duplicato in realtà non risponde Questo. Le entità sono classi e dovrebbero incapsulare la propria convalida, altrimenti si sta andando verso un territorio anti modello di dominio anemico. Sto chiedendo specificamente se avendo una dipendenza che controlla la convalida, sto andando contro i principal SOLID.