Il sovraccarico implicito ed esplicito dell'operatore di cast viola la D nei principi SOLID di OO?

3

Sto osservando diversi modelli e tecniche per l'implementazione della logica per convertire oggetti da una classe all'altra, e il più elegante sembra essere l'overloading dell'operatore del cast esplicito (in C #). Tuttavia, mi sembra che viola il principio di dipendenza da inversione, in quanto richiede ad una classe concreta di avere riferimenti ad un'altra classe concreta.

Questa valutazione è accurata? È problematico? C'è un modo per implementare l'overloading dell'operatore di cast esplicito senza violare il principio DI?

public class Model
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

public class ViewModel
{
    public string PropOne { get; set; }

    public static explicit operator ViewModel(Model model)
    {
        // Conversion logic that references both classes
    }
}

public class Program
{
    public void Main()
    {
        var model = new Model{ Prop1 = "SomeValue", Prop2 = "SomeOtherValue" };
        var viewModel = (ViewModel) model;

        Console.WriteLine(viewModel.PropOne); // Outputs "SomeValue" to the console
        Console.ReadKey();
    }
}
    
posta Daniel Arant 29.09.2015 - 16:13
fonte

1 risposta

1

Non importa cosa, avrai riferimenti all'altra classe se vuoi convertirli tra di loro - o hai la tua classe a conoscenza della classe in cui devi convertirti, oppure metti un costruttore sull'altra classe che significa che deve conoscere la tua classe (o deve accettare un mucchio di parametri di proprietà che si verificano solo per corrispondere alle singole proprietà della tua classe che sarà solo molto brutta)

Potresti creare una classe "di fabbrica" che esiste esclusivamente per trasformare oggetti di una classe in un'altra, ma direi che è stato semplicemente stupido. Dovrebbe anche conoscere entrambe le classi, ma almeno ognuna di queste classi potrebbe esistere nelle proprie bolle isolate. Questo forse è molto importante o utile in alcune circostanze.

Ma nel caso generale, a prescindere da cosa, devi interagire con il resto del mondo, quindi ci saranno sempre punti di interfaccia da affrontare.

    
risposta data 29.09.2015 - 16:24
fonte

Leggi altre domande sui tag