c # Тип преобразования между несвязанными объектами - PullRequest
2 голосов
/ 11 декабря 2010

Мы находимся в процессе миграции уровней доступа к данным на более новый, более поддерживаемый и более сгенерированный DAL, чем используемый в настоящее время.

Таким образом, у нас есть много различных объектов, которые технически отличаются друг от друга и представляют собой наборы данных, которые можно легко передавать / преобразовывать друг в друга без потери данных.

Какая наиболее гибкая, или наиболее широко используемая, или наиболее предпочтительная и т. Д. Методология для выполнения этого типа преобразования типов?

Я рассматриваю возможность написания набора частичных классов, которые реализуют IConvertible. я также рассмотрел создание System.ComponentModel.TypeConverter для выполнения преобразований. Есть ли другие варианты, которые могут быть лучше в этом, что я, возможно, не рассмотрел?

Какие варианты доступны?

в идеале я хотел бы сохранить эти преобразования в классе расширения или другой библиотеке, чтобы не загромождать ссылки на наши проекты. Беспорядок может жить в этой специальной библиотеке преобразования.

Например,

в DAL1.DataTypes у меня есть класс Table1Data

в DAL2.DataTypes у меня есть класс Table1

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2010

Вы можете использовать автоматический картограф - посмотрите на automapper :

AutoMapper использует плавный API конфигурации для определения стратегии сопоставления объект-объект. AutoMapper использует основанный на соглашении алгоритм сопоставления для сопоставления значений источника и назначения.

1 голос
/ 11 декабря 2010

BLToolkit поддерживает довольно эффективное отображение объектов с минимальными усилиями: http://bltoolkit.net/Doc.ObjectToObject.ashx

public class SourceObject
{
    public bool   Value1   = true;
    public string Value2   = "10";
    public string StrValue = "test";
}

public class DestObject
{
    [MapField("Value1")] public bool   BoolValue;
    [MapField("Value2")] public int    IntValue;

    // If source and destination field or property names are equal,
    // there is no need to use MapField attribute.
    //
    public string StrValue; 
}

public void Test()
{
    SourceObject source = new SourceObject();
    DestObject   dest   = Map.ObjectToObject<DestObject>(source);
}

Upd: с недавним обновлением SO очень трудно использовать фрагменты кода в IE6, извините, если есть какие-либо проблемы с форматированием кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...