Moje pytanie brzmi: jaki jest najlepszy sposób, w jaki mogę odwzorować jeden obiekt na inny w najbardziej możliwy do utrzymania sposób. Nie mogę zmienić sposobu, w jaki obiekt DTO, który otrzymujemy, jest bardziej znormalizowany, więc muszę stworzyć sposób na odwzorowanie tego na naszą implementację obiektu.Sprawdzone metody mapowania jednego obiektu na inny
Oto przykładowy kod, aby pokazać, co muszę zdarzyć:
class Program
{
static void Main(string[] args)
{
var dto = new Dto();
dto.Items = new object[] { 1.00m, true, "Three" };
dto.ItemsNames = new[] { "One", "Two", "Three" };
var model = GetModel(dto);
Console.WriteLine("One: {0}", model.One);
Console.WriteLine("Two: {0}", model.Two);
Console.WriteLine("Three: {0}", model.Three);
Console.ReadLine();
}
private static Model GetModel(Dto dto)
{
var result = new Model();
result.One = Convert.ToDecimal(dto.Items[Array.IndexOf(dto.ItemsNames, "One")]);
result.Two = Convert.ToBoolean(dto.Items[Array.IndexOf(dto.ItemsNames, "Two")]);
result.Three = dto.Items[Array.IndexOf(dto.ItemsNames, "Three")].ToString();
return result;
}
}
class Dto
{
public object[] Items { get; set; }
public string[] ItemsNames { get; set; }
}
class Model
{
public decimal One { get; set; }
public bool Two { get; set; }
public string Three { get; set; }
}
Myślę, że byłoby świetnie jest, jeśli miałem jakieś klasy odwzorowujący że weźmie w modelu obiektów PropertyInfo, typ I chcę się przekonwertować, a "itemname" chcę wyciągnąć. Czy ktoś ma jakieś sugestie, aby uczynić to czystszym?
Dzięki!
Nie jestem pewien co do mapowania, ale powinno się patrzeć na generycznych i korzystania z kolekcji rodzajowe: http://csharp-station.com/Tutorial/CSharp/Lesson20 – christiandev
Proponuję Costructor modelu, który trwa Dto i mapuje/konwertuje/sprawdza odpowiednio na stałe, ponieważ dostajesz błędy kompilacji, gdy coś zmieni się w dto. Odbicie i tym samym radzenie sobie z łańcuchami nie pomaga w zwiększeniu łatwości konserwacji. – wonko79