DTO POCO преобразование - PullRequest
1 голос
/ 26 марта 2012

У меня есть несколько DTO и соответствующие POCO.

Каков рекомендуемый способ преобразования между ними и где найти функцию преобразования.

Моя оригинальная идея состоит в том, чтобы поместить две функции преобразования вPOCO и назовите их ToPOCO и ToDTO.

Но есть ли лучшие идеи для этого или, возможно, создать методы расширения?

Спасибо за идеи.

1 Ответ

6 голосов
/ 26 марта 2012

Посмотрите на библиотеки, которые делают это для вас:

Мой личный облегченный фаворит - использовать неявные операции преобразования.Я должен добавить, что я использую это только тогда, когда намереваюсь удалить слой «клея» после будущего рефакторинга.Это может не сработать в качестве долгосрочного решения в производственной среде (потому что неявность позволяет легко его пропустить).

public class MyPoco
{
    public static implicit operator MyPoco(MyDTO o)
    {
        if (o == null) return null;
        return new MyPoco {
            SomeAmount = Convert.ToDecimal(o.SomeAmount),
            SomeBool   = Equals("Y", o.SomeBool     ),
            Sub1       = o.Sub1,
            Sub2       = o.Sub2,
        };
    }
    public static implicit operator MyDTO(MyPoco o)
    {
        if (o == null) return null;
        return new MyDTO {
            SomeAmount = o.SomeAmount.ToString(),
            SomeBool   = o.SomeBool     ? "Y":"N",
            Sub1       = o.Sub1,
            Sub2       = o.Sub2,
        };
    }
    public decimal SomeAmount   { get; set; }
    public bool SomeBool        { get; set; }
    public MySubPoco1 Sub1      { get; set; }
    public MySubPoco2 Sub2      { get; set; }
}
...