Я MonoDroid
проект с Android
и iOS
клиентами с MonoTouch
и MonoDroid
. Общий проект бизнес-уровня содержит общие объекты домена.
У одного из них есть необходимость хранить изображение, имя и возраст. Изображение не загружается.
Возможно ли создать общий объект, который содержит фактические данные для PNG или JPG, но который как-то работает как в iOS
и в Android
?
///Simplified customer
class Customer {
public Image???;
public string Name;
public Int Age;
}
Опции:
остаться с собственным кодом конкретной платформы требует частичных классов и связывания общего класса в Customer.cs - связан через проекты, которые я называю этим методом split-n-link или link-n-split
public partial class Customer {public string Name; public Int Age; public Int Age; } }
класс delta для монотота в проекте monotouch
public partial class Customer {
public UIImage;
}
delta класс для mono для android в проекте m4a
public partial class Customer {
public ImageView;
}
Таким образом, каждый проект будет содержать Customer.cs. Одна оригинальная/исходная и другая ссылка на него, которая зависит от предпочтений или общего знака-знаменателя при работе с Windows Phone (в настоящее время он имеет наименьший набор функций - лучше он более ограничительный), Помимо файла main/original/source Customer.cs, есть 2 (3, если WP) дельта с конкретными материалами платформы. Помните, что частичные классы являются "аддитивными", что означает, что вы можете добавлять атрибуты в другой файл cs, и они применяются, поэтому в этом классе дельта можно добавлять атрибуты, специфичные для платформы, и включать такие вещи, как привязка для iOS ad/or Android, если это необходимо. Из опыта Holisticware (Visual Studio ориентирован на 80% +, 20% или меньше на Mac) исходный проект Mono для Android, но он может быть обратным...
С link-n-spilled один заканчивается в основном с помощью POCO + delta, и этот POCO может использоваться для таргетинга на настольную платформу (WF, WPF), где все проще: отладка, модульное тестирование и т.д.
И есть преимущество, что каждый проект скомпилирован/построен с конфигурацией для этой платформы - поэтому ig ребята из Xamarin придумали еще одну яркую идею для построений, таких как оптимизация размеров, которые не должны влиять на проекты - перекомпилируйте и идите!
HTH mel
Я делаю этот тип совместного использования с использованием интерфейсов или абстрактных базовых классов с конкретными реализациями, внедренными во время выполнения.
Например, я мог бы установить некоторые интерфейсы, такие как:
public interface IImage
{
int Height { get; }
int Width { get; }
}
public interface IImageTools
{
IImage Load(string assetPath);
void SaveToJPEG(IImage image, string savePath, int quality);
IImage DuplicateAndResize(IImage original, int newHeight, int newWidth);
}
Моя бизнес-модель будет иметь некоторый способ получить ссылку на IImageTools - например, она может быть введена в конструктор или может быть доступна из некоторого контейнера (например, одиночного Single IoC)
Это позволяет мне вводить отдельные встроенные реализации во время выполнения для Droid, Touch, WP7, WinRT или NUnit.
В проектах пользовательского интерфейса, когда вам действительно нужно отображать изображение в пользовательском интерфейсе, я, как правило, передавал IImage в собственную реализацию, например TouchImage, которая затем содержала бы метод, позволяющий овладеть базовым UIImage
например, не совсем ваше требование к изображению, но вот что я делаю для изображений для операций Camera Capture: https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/PictureChooser