【问题标题】:Code sharing between MonoTouch and MonoForAndroidMonoTouch 和 MonoForAndroid 之间的代码共享
【发布时间】:2012-05-18 16:08:45
【问题描述】:

在 MonoTouch 和 Mono For Android 项目之间共享业务逻辑 c# 代码的最佳做法是什么?

编辑: 最初,我的问题是关于物理文件共享:

  1. 你建议用什么:网络文件共享或者一些代码 版本控制(git、svn)?就我而言,我正在使用两个工作站 - Mac(带有 MonoTouch 的 MonoDevelop)和 PC(带有 MonoDroid)。
  2. 解决方案/项目文件夹结构如何?在 “博文:Xamarin Mobile World Congress 2012 Unofficial Conference App Released!”示例结构相当混乱: 一个文件夹中的多个解决方案,然后一个文件夹中的不同平台项目 具有不同文件夹和项目名称的子文件夹。它不能天生地完成 与 IDE。他们是否手动编辑解决方案文件和文件夹名称的内容 在 IDE 环境之外?
  3. 对于通用代码的项目需要什么样的配置文件(模板) 采用? Monotouch 有几个:Empty Project、MonoTouch Library 项目和 MonoTouch 绑定项目?在Android中我想 - Android 类库?

【问题讨论】:

  • 你能扩展吗? “业务逻辑”是什么意思?
  • 除平台特定 UI 外的所有 C# 代码。

标签: xamarin.ios monodevelop xamarin.android


【解决方案1】:

这是一个非常笼统的问题,但这里有一些资源可以帮助您入门:

  1. 视频:Cross-platform Mobile Development
  2. 博文:Shared Libraries For Windows Phone 7, MonoDroid and Beyond
  3. 图书:Mobile Development with C#
  4. 博文:Xamarin Mobile World Congress 2012 Unofficial Conference App Released!

编辑(回答您的新问题)

  1. 跨项目链接文件背后的想法是文件只有一个实际副本,而不必自己管理多个副本并使它们保持同步。该文件实际上只存在于一个项目中并链接到其他项目中,但在编译项目时,它会将文件视为实际存在。

  2. 我无法确切说明他们是如何创建文件夹结构的,但我知道在很多情况下我会手动编辑项目或解决方案文件以获得我想要的文件夹结构,因为没有办法仅通过IDE获得我想要的东西。这实际上归结为您希望文件夹结构的个人偏好。

  3. 最后,您需要的是针对您想要定位的每个平台的类库项目。使用链接文件方法时,放置物理文件的位置完全取决于您。我经常使用的一种方法是实际创建一个标准的 .NET 4.0 类库,将文件放入其中,然后将它们链接到我的 Mono for Android 和 MonoTouch 类库中。如果你关心的只是针对 iOS 和 Android,那可能比它的价值更麻烦,你可以让文件存在于一个项目中并将它们链接到另一个项目。

【讨论】:

  • 如果你还提到了其他几本书,我会给你+1 :)
  • Eek - 这听起来与我的预期不同!无论如何+1。我责怪星期五!对不起:)
  • 您对我的问题附录有什么建议吗?
【解决方案2】:

免责声明:我有一个particular Mvvm methodology,用于跨多平台项目共享代码...

尽管如此,我真的不相信“一刀切”的框架 - 我认为您需要谨慎选择最适合您的项目、开发人员和组织的方法。

话虽如此,您可以在 Mono 开发方法中使用的一些工具是:

  • 使用Portable Class Libraries 在平台之间共享完全相同的代码
  • 使用特定于平台的类库在平台之间共享代码,使用 Microsoft 的 Project Linker tool 链接这些代码
  • 在您的类库中使用 #define 代码来提供项目的特定平台实现(我个人尽量避免使用这种方法,但它通常会提供最快的上市途径)
  • 使用 DI/IoC 技术为确实需要特定平台实现的场合提供组件。
  • 使用程序集链接来提供 IoC - 例如这就是Xamarin MobileAPI 所做的事情
  • 使用基于服务器的逻辑实现真正的共享功能 - 例如使用 REST 或 SOAP-XML 服务来实现逻辑
  • 在平台之间共享测试(例如 NUnit)以确保您的逻辑质量
  • 使用共享代码技术 - MVC (MonoCross) 或 MVVM (MonoMobile.Views 或 MvvmCross) 用于 UI“控制器”逻辑; MonoTouch.Dialog 和 MonoDroid.Dialog 用于“视图级”抽象; CrossGraphics 用于 UI“绘图”;用于数据库的 SQLite.Net;等

我发现 MonoTouch、MonoDroid 和 Microsoft 工具在开发跨平台代码方面提供了真正且显着的好处 - 但您必须努力并思考才能实现这一目标。

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2016-11-07
    • 2018-08-27
    • 2011-03-02
    相关资源
    最近更新 更多