quindi questo è C # ma potrebbe essere applicato a qualsiasi linguaggio OO in cui esistono diversi insiemi di oggetti tra diversi livelli di un'applicazione.
Abbiamo cercato di creare una convenzione all'interno del team per dove mettere il codice quando si mappano oggetti in un livello in oggetti in un altro livello. Per esempio; mappatura di un oggetto di trasferimento dati su un oggetto di servizio utilizzato da un servizio WCF o qualcosa di simile. Ho i seguenti metodi che ho visto essere usato e sto cercando di decidere quale sarebbe preferito da qualcuno che guarda il codice, e quale di questi si adatta meglio con gli idiomi C # naturali.
Questi esempi usano AutoMapper per mappare un oggetto Foo a un oggetto Bar , ma si applica a qualsiasi framework di mappatura, o semplicemente creando manualmente Bar da Foo con un inizializzatore di oggetti . Entrambi questi oggetti rappresentano gli stessi dati, ma si trovano in diversi gruppi:
1) Costruttore su Bar
public class Bar
{
public Bar(Foo foo)
{
Mapper.Map(foo, this);
}
}
2) Metodo di fabbrica su Barra
public class Bar
{
public static Bar CreateFrom(Foo foo)
{
return Mapper.Map<Bar>(foo);
}
}
3) Metodo su Foo per ritornare Bar
public class Foo
{
public Bar GetBar()
{
return Mapper.Map<Bar>(this);
}
}
4) Operatore di conversione del tipo esplicito su Foo in modo che possa essere convertito in Bar
public class Foo
{
public static explicit operator Bar(Foo foo)
{
return Mapper.Map<Bar>(foo);
}
}
5) Alcune implementazioni del modello di fabbrica
public class BarFactory : IFactory<Bar>
{
public Bar Create(Foo foo)
{
return Mapper.Map<Bar>(foo);
}
}
6) Basta farlo nel codice pezzo che ti serve in
public void SomeMethod()
{
Foo foo = fooRepository.GetFoo();
//I need it to be bar now...
Bar bar = Mapper.Map<Bar>(foo);
}
Dichiarazione di non responsabilità: vorrei non aver usato AutoMapper in questo esempio. Immagina "AutoMapper" qui "IMappingProvider" o "IObjectConverter" o qualcosa