Я использую стороннюю библиотеку от компании, которая называется ой, скажем, Mobi. Они предлагают доменные объекты и клиента, который принимает доменные объекты THEIR, внутренне сериализует их и отправляет их в конечную точку отдыха.
Я хотел спроектировать свой код так, чтобы я не зависел от них полностью в случае, если я хочу поменять свою библиотеку на что-то специально построенное или другую стороннюю библиотеку. Таким образом, я создал классы с одинаковыми именами и унаследовал их от соответствующего стороннего класса.
например:
public class Patient : Mobi.Model.Patient, IResource
{
}
Я создал IResource, чтобы иметь фабричные методы, полиморфизм и весь этот джаз. Итак, вот моя проблема, я не могу использовать их клиент для публикации объектов МОЕГО домена. Мне нужно преобразовать мой доменный объект в их доменный объект, чтобы использовать их клиент.
Например:
var client = new Mobi.MobiClient();
IList<IResource> resources = new List<IResource>();
resources.Add(new Patient()) // my Patient class not theirs
resources.Add(new Doctor()) // my Doctor class not theirs
foreach(var resource in resources)
{
var mobiResource = MethodToConvertIResourceToTheDerivedResourceAndMapItToTheirResource(resource)
client.Post(mobiResource)
}
Итак, как мне реализовать метод для преобразования базового класса в производный класс? и затем сопоставить его с идентичным классом?
Я мог бы иметь несколько операторов "is", а затем использовать что-то вроде AutoMapper, но мне было интересно, было ли что-то более динамичное c или проще. Также хотел знать, если это плохой способ делать вещи.