以该行业目前的方式为智能手机开发相对较新。当然,几十年来一直有企业级移动通信的发展。然而,这些平台已经发生了变化。想想看:
这些平台的工作方式并不是完全新的(例如,iPhone已经存在了很长一段时间了),但在为桌面和智能手机开发功能相等的应用程序时,它实际上是从底层开发两个应用程序。
特别是随着Windows Phone的诞生,加上.NET平台的出现,以及使用Silverlight作为用户界面语言,提倡重用(UI的一部分)正变得越来越有吸引力。不过,很明显,智能手机(或平板电脑)上的应用程序的需求与桌面应用程序的需求非常不同。因此,(几乎)一对一的转换是不可能的。
我的问题是:开发“跨设备”应用程序(例如,为桌面和智能手机/平板电脑开发应用程序)是否有“最佳实践”、陷阱等?
一个多星期以来,我一直在浏览博客、科学论文等等,但到目前为止,我发现的只是“迁移界面”。
发布于 2011-02-23 16:10:58
您所讨论的本质上是构建一个使用公共代码库的产品系列。我不同意这样的假设,即您必须为不同的平台重写大部分代码库。当然,会有特定于平台的区域,但总的来说,这不应该影响公共代码库。
对跨平台开发提供最有用的洞察力的基本前提或实践是“为改变而设计”的概念。在最基本的层次上,您需要确定哪些领域可能发生变化和/或您所知道的领域将发生变化。在您的例子中,我可以确定属于这个类别的四个领域。
前三个绝对是依赖于平台的。在我看来,第四个问题更像是一个配置问题,但从设计的角度来看,它仍然很重要。
通过将每个接口抽象到一个公共接口之后,前三个接口非常容易地隔离开来。例如,您应该为操作系统服务(如信号量控制)设置一个抽象层。无论您使用的是哪个操作系统,从公共代码的角度来看,接口都应该是相同的。本质上,我们的想法是创建虚拟接口。老实说,这几乎定义了Adapter设计模式。我意识到,您并不是在寻找具体的设计模式,但设计模式常常会解决为多个平台设计产品所涉及的许多挑战,因为它们具体支持为更改设计的概念。
为了解决变特征集的概念,与系统中其他元素的低耦合性是重要的设计特征。例如,在word文档中,保存选项不应依赖于启用了打开的文件功能的事实。您的目标应该是使禁用功能像顽固性界面一样容易。此时,具有特定功能集的构建应该在很大程度上成为构建配置的一部分。根据您正在构建的产品,您可以决定是否包含给定的功能或存根界面。这只是一个可能的解决方案。我相信还有其他方法可以做到这一点,但概念是一样的。
发布于 2011-02-23 11:19:57
我想说,对我来说最大的一件事是采用模型-视图-控制器。以Windows/.NET与Windows Phone/Silverlight、*/JavaSE与Android/Java或Mac/Cocoa vs iPhone/Cocoa Touch为例,一个好的MVC应用程序可以在多个平台上使用相同的模型对象和相同的域逻辑。要与它们交互的视图和代码需要针对每一种情况,但如果代码包含得很好,则更容易维护多个版本。
其次,测试功能,而不是平台。我的意思是,别这么做:
if (device == phone) {
// small screen resolution
// touchscreen UI
}
else {
// desktop screen resolution
// WIMP UI
}
...because在某一时刻,这将开始失败。要么会出现高分辨率的手机(例如iPhone 4),要么会出现具有触摸屏用户界面的更大的设备(例如iPad)。
https://softwareengineering.stackexchange.com/questions/50876
复制相似问题