我正在构建一个项目,该项目既有Android
又有iOS
客户端,MonoTouch
和MonoDroid
。公共业务层项目包含公共域实体。
其中一个需要存储图像,名称和年龄。不会下载映像。
是否可以创建一个公共对象来保存 PNG 或 JPG 的实际数据,但这在iOS
和Android
中都是可行的?
///Simplified customer
class Customer {
public Image???;
public string Name;
public Int Age;
}
选项:
- 将图像表示为 byte[] 或 MemoryStream/Stream
-
坚持使用本机平台特定代码需要部分类和链接客户中的公共类.cs - 通过项目链接 我称之为拆分 n 链接或链接 n 拆分
公共分部类客户 { 公共字符串名称; 公共国际年龄;}
点触控项目中单点触控的增量类
public partial class Customer {
public UIImage;
}
M4A 项目中安卓单声道的增量类
public partial class Customer {
public ImageView;
}
因此,每个项目都将包含客户.cs一个原始/源和其他链接,如果处理Windows Phone,则取决于首选项或通用功能分母(目前它具有最小的功能集 - 更好的是限制性更强(。除了主/原始/源客户.cs文件外,还有 2(如果 WP 为 3(个增量,带有平台具体的东西。请记住,分部类是"累加的",这意味着您可以在不同的 cs 文件中添加属性并应用它们,因此在此增量类中,可以添加特定于平台的属性,并在需要时为 iOS 广告/或 Android 启用绑定等内容。从整体软件的经验(以Visual Studio为中心80%+,Mac上的20%或更少(源项目是Android的Mono,但它可能是相反的......
使用link-n-spillt,基本上最终使用POCO + delta,并且此POCO可用于面向桌面平台(WF,WPF(,其中一切都更容易:调试,单元测试等。
而且有一个优点,每个项目都是使用该平台的配置编译/构建的 - 所以来自 Xamarin 的 ig 家伙想出了一些其他的好主意,用于构建,例如大小优化,这应该不会影响项目 - 重新编译并继续!
呵呵梅尔
我通过使用接口或抽象基类以及运行时注入的具体实现来执行这种类型的共享。
例如,我可能会放置一些接口,例如:
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的引用 - 例如,它可能被注入到构造函数中,或者它可能可以从某个容器(例如IoC单例(获得
然后,这允许我在运行时为 Droid、Touch、WP7、WinRT 或 NUnit 注入单独的本机实现。
在UI项目中,当你实际需要在UI上显示图像时,我通常会将IImage转换为本机实现,例如TouchImage - 然后它将包含一个方法来获取底层UIImage。
例如,不完全是您的图像要求,但这是我为相机捕获操作的图像所做的: https://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/PictureChooser