我正在构建一个同时拥有Android
和iOS
客户MonoTouch
和MonoDroid
的项目。公共业务层项目包含公共域实体。
其中一个需要存储图像,名称和年龄。图片未下载。
是否可以创建一个包含PNG或JPG实际数据的公共对象,但这在iOS
和Android
中是否可行?
///Simplified customer
class Customer {
public Image???;
public string Name;
public Int Age;
}
答案 0 :(得分:4)
选项:
保留原生平台特定代码需要部分类和链接 Customer.cs中的公共类 - 通过项目链接我将此方法称为split-n-link 或link-n-split
公共部分类客户{ 公共字符串名称; 公共Int年龄; }
monotouch项目中monotouch的delta类
public partial class Customer {
public UIImage;
}
m4a项目中用于android的单声道delta类
public partial class Customer {
public ImageView;
}
所以,每个项目将包含Customer.cs原件/源和其他链接到它,其中之一,如果处理的Windows Phone取决于喜好或者共同的特征,分母(目前它拥有最小的功能集 - 越好更严格的)。 除了main / original / source Customer.cs文件外,还有2个(3个如果是WP)增量平台 特定的东西。记住部分类是“附加的”意味着您可以在不同的cs文件中添加属性并应用它们,因此在此delta类中,可以添加特定于平台的属性,并根据需要启用诸如绑定iOS广告/ Android之类的内容。从Holisticware体验(Mac上的Visual Studio中心80%+,20%或更少)源项目是Android的Mono,但它可能是反向...
使用链路正溢出一个结束了基本上与POCO +三角洲和这个POCO可用于靶向桌面平台(WF,WPF)的一切是更容易:调试,单元测试等
和有优势,每个项目被编译/构建与该平台配置 - 从Xamarin所以IG家伙想出一些其他明亮的想法建立类似尺寸的优化这不应该影响项目 - 重新编译和去!
HTH 梅尔
答案 1 :(得分:1)
我通过使用接口或抽象基类以及在运行时注入的具体实现来进行这种类型的共享。
例如,我可能会设置一些界面,如:
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的引用 - 例如它可以在构造函数中注入,也可以从某个Container(例如IoC单例)中获得
这允许我在运行时为Droid,Touch,WP7,WinRT或NUnit注入单独的本机实现。
在UI项目中,当您确实需要在UI上显示图像时,我通常会将IImage转换为本机实现,例如TouchImage - 它将包含一个获取底层UIImage的方法
e.g。不完全符合你的图像要求,但这就是我为Camera Capture操作的图像做的事情:https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/PictureChooser