【问题标题】:Share code base for WP7 and WP8共享 WP7 和 WP8 的代码库
【发布时间】:2012-06-26 01:38:57
【问题描述】:

我正在研究针对 WP7 和 WP8 的新业务应用程序的架构。对于 WP7,我们将使用 silverlight 应用模型,并希望在迁移到 WP8 时准备好重用代码(我们将希望使用 WP8 上的其他功能)。

由于 WP8 也将支持 xaml 和 C#,您对如何组织应用程序结构有什么特别建议,请选择适当的方法。

总结以下建议:

  1. 独立的代码和用户界面。
  2. 对于业务逻辑,您可以使用 C# Windows Phone 类库(7.1 适用于 WP7 和 WP8)
  3. 如果您执行大量异步操作,请考虑使用 Windows Phone 的任务并行库。
  4. 为 WP8 特定功能使用单独的库。仅将其连接到 WP8。
  5. 您可能希望将通用 UI 移动到单独的库中,因为 Wp7 和 Wp8 都应该支持它(根据我的实验)。

【问题讨论】:

  • 为了清楚起见,WP7 和 WP8 的应用程序模型(随你所想)完全相同
  • 刚刚尝试使用 VS Express 2012 Beta for Windows Phone 编译一些 WP7.1 应用程序。将目标设置为 WP8 后,所有开箱即用的编译内容,包括 UI 控件,不幸的是,由于不支持硬件,无法在 WP8 模拟器中进行测试。向现有代码添加了等待 C# 5.0 语言功能 - 似乎可以正常编译。
  • 我们还没有发布SDK,你在说什么?
  • 抢先体验 Windows Phone PROTOTYPE 开发者工具(Microsoft Connect 程序)
  • 哦,那就玩得开心吧:p 还有一些支持 hyper-v 的硬件,你会需要的。

标签: codebase windows-phone-8


【解决方案1】:

如何组织应用结构,选择合适的方法。

嗯,在使用 Windows Phone 时,MVVM 总是很受欢迎。任何良好的干净结构,遵循SOLID 原则都可以。

Windows Phone 8 将支持新的 C# 5.0 语言功能,因此如果您有大量异步代码,请考虑为 Windows Phone 7 使用 Task Parallel Library for Windows Phone,因为所有返回 Task 的调用都将支持新的 await 运算符C# 5.0。

Windows Phone 8 中最重要的变化是新的、性能更好的控件。如果你想用相同的代码库支持两个平台,你想尝试尽可能地将你的 UI 代码与应用程序的其余部分分开。您很可能还希望分离 UI 逻辑,例如 ViewModel。

考虑为您的业务逻辑至少有一个单独的程序集,用于处理数据查询操作和/或计算。

至于新功能,如 C++ 开发/WinRT 互操作,将通过单独的程序集完成,无论如何您只能从 Windows Phone 8 程序集中引用这些程序集;这意味着它不应该为您的当前应用程序结构提供任何问题。

【讨论】:

  • 谢谢克劳斯,喜欢使用任务并行库的想法
【解决方案2】:

目前的答案似乎并没有详细说明实际项目结构的样子,所以我想我可以在这里分享我的:

您在下面看到的是我的应用程序的结构,它有 4 个版本:(WP7,WP8)X(Pro,ad funded)

代码和输出文件夹(bin7、bin8、...)放在第一个子目录中。项目文件放置在适当命名的子目录中。代码文件和资产链接到单个项目中。 “属性”文件夹中的文件对于每个版本都是特殊的(其他 GUID、名称、动态磁贴图标等)。这样我必须按一次 F6 并且我拥有当前版本的所有 XAP。 (只需用一个小脚本收集它们)

(仅供参考,“Pro”版本是使用#ifdef 编译器标志实现的。)

【讨论】:

  • 感谢您分享您的经验。您如何处理 xaml 中的命名空间?例如,Pivot 从clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls 移动到clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone
  • 说实话:目前根本没有。旧的 XAML 命名空间似乎仍然可以正常工作...
【解决方案3】:

Silverlight 是一个基于 C# 的框架,您在帖子中混合了语言和框架,唯一需要考虑的是 WP7 only support C# 3.0 features,WP8 可能会是一个更高级的工作台,带有 DirectX 和 C# 4 或更好,我们不还不知道,但 WP8 还提供对 C 和 C++ 的全面支持。

Silverlight 很长时间没有收到重大更新或新闻。 如果您真的想针对这 2 个操作系统,我建议使用共享的 C# 3.0 代码库,尽可能避免使用 Silverlight,考虑到 WP7 设备在以下方面几乎已死,这可能是一个更好的选择更新和核心功能;它们是基于 Silverlight 的设备,带有 XNA 用于游戏,但一些硬件相关的功能非常低端,加上微软很长时间没有谈论 Silverlight,这个关于 C/C++ 支持的新更新可能会改变游戏规则开发人员。

还有 C# 5.0 即将推出,WP7 已经很旧了,它可能会在几周内变旧,我也不知道你的项目的细节,但你可能需要计划几个月/几周的时间来提供支持和各种修复,我认为你可能应该有一个很好的理由来启动一个针对 WP7 平台的 C# 3.0 项目,我不是在讨论 WP7 作为操作系统,我是在讨论考虑近期做你计划做的事情的便利性和微软的一些项目缺乏支持和新闻。

与讨论此事的 Microsoft 团队保持联系 https://twitter.com/#!/wpdev,看看您是否可以获得更详细的图片。

最后请记住,可能唯一值得考虑的共同点是对 C# 3.0 语言的支持,框架可能会有所不同,或者可能更方便地采用新的框架,同样使用 C/C++为所有内容获取无限数量的新库。

【讨论】:

  • 你能提供一个支持 C# 4 的 WP7 的参考吗?同样对于您所说的,支持只是部分支持。
  • 支持协方差和逆变等C# 4.0特性,同样是可选参数。为什么要提供参考,任何可以按编译的人都可以看到它是真的。 (抱歉,之前的评论是FUBAR)
  • 此外,Silverlight 5 已于 12 月发布。但 Silverlight 5 的功能与 WP7 和 WP8 都不相关。
  • WP7 发布于 1 年半前,即 2010 年末,您能否提供文档示例或链接以确保我们了解您所说的内容?
  • 你去打开 Visual Studio,然后尝试使用可选参数编​​译一个 Windows Phone 项目(C# 4.0 的一个特性咳嗽
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2015-10-04
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多