2010-12-10 2 views
2

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

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

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

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

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

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

Например,

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

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

Спасибо.

ответ

3

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

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

1

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, извините, если есть какая-либо форматирование коды проблемы.

Смежные вопросы