`
mmdev
  • 浏览: 13243528 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

基于模型的可复用移动web应用程序开发-画出一个iPhone应用

阅读更多

基于模型的移动web应用程序开发

软件行业的精英们一直在寻找提高软件生产力的银弹。提高生成力的核心在于重用。这包含代码的重用、设计的重用。用户有很多相似的需求,针对这些需求提取出一些基本的模型元素从而可以在领域中复用。面向对象、基于模板、基于模型和基于框架的开发方法给行业带来了希望。

如果您正准备开发一个交友社区客户端的移动应用程序,需要覆盖主流的移动平台,比如iPhoneAndroidWindows PhoneSymbian以及大量的山寨系统,那么你可以有如下的选择:

1、 招聘一个团队,每位工程师有不同平台的开发经验。

2、 Soho,自学所有的平台SDK和语言,自行开发

3、 开发一个移动web应用,匹配主流的浏览器

选择1的前提是您不差钱。选择2是您对自己的能力充分信任,但有可能会因为进度缓慢而丧失市场良机,也可能因为后续无力适配变化多端的机型和不同版本的SDK而无奈终止维护,这样的故事比比皆是。那么你可能会自然的选择3来降低学习成本、研发成本以及加快开发进度。但是移动web应用在带来适配方便的同时,也丧失了本地应用程序的更为友好华丽的界面观感以及访问本地资源的权利。另外如果您还想把移动应用的开发复用到PC领域,就需要考虑更多的移植策略。一个可行的解决方案就是基于模型的开发。模型是平台无关的需求抽象。和平台相关的代码层面交给框架根据环境配置、用户选项来自动生成,然后针对特定的领域和客户要求,进行再加工和编码优化。这解决了3个方面的问题:

1、 解决了平台之间移植复用的问题。首先选取通用的数据和流程模型元素来构架系统,然后调用合适的代码生成器来产生针对特定平台的工程。

2、 解决了设计标准和编码规范的问题。由于代码框架是由生成器产生。因此使用同样的建模描述方式就可以保持代码风格的一致性和代码规范性。

3、 支持更为敏捷的原型开发,便于客户理解系统。

理论看上去很美,然而要构造这样的基于模型的开发环境并投入到实际的软件生产过程中去,则并非那么容易。我了解到的EMF(基于Eclipse的模型框架)http://www.eclipse.org/modeling/emf/在这方面做了很多工作。而国内少有听闻有类似的工具在应用,尽管在鄙人看来这是一个逐渐明朗的技术趋势。

现在停止大话连篇,回到移动应用程序开发的主题上来,这里我要举一个非常实用的例子来说明上述的一些观点。让我们从头体验一下在现实工作中如何使用基于模型的开发方式来快速开发移动web应用程序。在这里我们将开发一个Twitter客户端的iPhone应用程序。看到iPhone应用程序,您可能会犹豫。难道我要为此去购买一个Mac机,我是不是还要先申请加入苹果开发人员计划,是不是还要买个iPhone?很幸运,在我举的这个例子中,你只要有PC机和浏览器即可。如果您有过iPhone开发经验,那么应该知道使用XCode构建一个显示Twitter最新消息的客户端,基本上需要做如下几件事情:

l 设计界面

l 连接元素

l 建立HTTP连接

l 发送请求、读取资源

l 解析JSON数据

l 添加用户图标

l 更新界面数据

根据您对XCode工具、iPhone SDK以及Objective C语言的掌握程度,可能会花费几天或几个小时不等的时间来完成这个任务。

那么让我们试试下面基于模型的方法是不是给我们带来一些Amazing Magic

首先您得下载必要的开发工具Tersus Studio windows版本:http://www.tersus.com/#Id=240

这是一个基于Eclipse的开源开发平台。

第一步:基础设置


1. 创建一个新Tersus project:

o 选择File -> New -> Tersus Project.

o 输入Project name: Twitter

o 选择Template: iPhone Application

o 点击Finish 按钮

2. 在模型编辑器(即中间的主窗口)中,双击放大到 <iPhone View>/Body.

3. 右键点击Body --> Add Element: Scroll Pane. 名字修改为: Top Trends Screen.

4. 放大到 Top Trends Screen.

5. 右键点击Top Trends Screen -->Add Element: List.

这样我们就创建了一个包含一个列表控件的带滚动条的<iPhone View>。注意该工程Outline窗口中有两个视图,分别是<Desktop View><iPhone View>,这里因为我们创建的是iPhone应用,因此我们仅关注<iPhone View>,展开它可以看到刚才添加的元素。保存工程并运行它(焦点需要在模型编辑器中)。浏览器将会自动启动。默认情况为打开https://localhost:8080/twitter,我们在后面加上/iphone.html。也就是https://localhost:8080/twitter/iphone.html。这样将会出现如下iPhone空白界面:

第二步:读取Twitter数据


  1. 在模型编辑器中,放大到<iPhone View>/Body/Top Trends Screen/List.
  2. 从左边palette窗口的Basic部分拖动一个ActionTop Trends Screen. 取名为Init.
  3. 建模Top Trends Init 动作:
    • 放大到Init.
    • palette窗口的Basic部分拖拉一个Service. 取名Get Top Trends.
    • 添加一个exit(灰色小箭头)到Get Top Trends.
    • Display Actions 部分拖拉一个Alert.
    • Get Top TrendsexitAlert trigger(绿色小箭头)创建一个flow. Init模型看起来如下:
    • 建模Get Top Trends服务:
      • Constants部分拖拉一个Text常量。数值为'http://search.twitter.com/trends.json'。名字改为Trends URL.
      • Basic部分拖拉一个Action,取名Download URL. 给这个action添加一个trigger和一个exit
      • Trends URL constant Download URLtrigger创建一个flow
      • Download URLexitGet Top Trendsexit创建一个flow。这个服务现在看起来应该像下面这样:
      • 建模Download URL 动作:
        • Miscellaneous部分拖拉一个Read Resource.
        • Text部分拖拉一个Binary to Text 从中删除<Encoding> trigger
        • Download URL triggerRead Resource <URL> trigger创建一个flow
        • Read Resource<Content> exitBinary to Text<Binary> trigger创建一个flow
        • Binary to TextexitDownload URLexit创建一个flowDownload URL 看起来如下:
  • 保存工程
  • 切换回浏览器窗口。应该会自动更新。
  • 你将会看到一个Alert窗口,显示从Twitter获取到的JSON格式数据。

注:如果您在国内,那么因为社会和谐的原因,你将得到无法访问https://search.twitter.com/trends.json URL的错误。不过不要担心,稍后会给出解决方法。你可以暂时把Twitter searchURL改为Google mapURL来体验上述过程。(关于如何调用Google map您可以参考我以前的文章)

第三步:以iPhone的风格显示数据


  1. 在模型编辑器中,放大到<iPhone View>/Body/Top Trends Screen/List.
  2. 右键点击List --> Add Element: Content Item.
  3. 建模Init 动作:
  • 放大到Init Action.
  • Get Top Trends添加一个exit. 命名为Parsed Data。设置其Reptetive属性。(选中exit对象,点击右键)
  • 右键点击Init --> Add Ancestor Reference: 选择Top Trends Screen.
  • Get Top Trendsrepetitive exit(重叠的灰色小箭头)到Content Item (Scrollable Pane/List/Content Item)元素的exit创建一个flow
  • 删除到Alertflow
  • 到目前为止Init 动作应该看起来如下:
  • 删除Alert 元素。
  1. 建模Get Top Trends:
  • Miscellaneous部分拖拉一个Parse JSON.
  • Download URL exitParse JSON<JSON Text> trigger创建一个flow
  • Data Types部分拖拉一个Data Structre。取名: Top Trends DS.
  • 从同样的部分拖拉下面这些元素到Top Trends DS 并如下命名:

as_of: 类型: Text.

trends: 类型: Data Dtructure; Reptetive.

name: 类型: Text.

url: 类型: Text.

  • Parse JSON <Value> exit Top Trends DS 创建一个flow
  • Basic部分拖拉一个Action。取名Convert to Content Item.
  • 为这个动作添加一个trigger 和一个exit。设置动作为repetitive
  • Top Trends DS/trends Convert to Content Item trigger创建一个flow
  • Convert to Content Item exit Get Top Trends repetitive exit (Prased Data) 创建一个flow.
  • Get Top Trends 服务模型看起来应该如下:

  • 建模'Convert to Content Item':
    • 右键点击Convert to Content Item trigger并选择Show in Repository Explorer. Repository Explorer 中拖拉trends 数据结构到模型编辑器中的Convert to Content Item 动作中。
    • Convert to Content Item trigger trends 创建一个flow
    • 同样的: 右键点击Convert to Content Item exit 并选择 Show in Repository Explorer. Repository Explorer 拖拉Content ItemConvert to Content 动作里. Content Item Convert to Content Item exit 创建一个flow
    • Constants部分拖拉一个Text 常量,设置数值为: Twitter48.png.
    • "Twitter48.png" constant Content Item/Icon/<Path>创建一个flow
    • trend/name Content Item/Content Holder/Title Text/<Value>创建一个flow
    • trend/url Content Item/Content Holder/Content Text/<Value>创建一个flow
    • Convert to Content Item 看起来应该如下:

  1. 添加图像:
  • 保存工程.
  • 切换回浏览器,应该会自动刷新。

如果您的所在地能够访问twitter网站,您将看到如下页面:

如果您有幸在和谐的国度里享受纯净的生活,还想见到如上叽叽喳喳的消息界面,那么您将需要付出一些额外的努力:

1、 安装freegate软件。请Google之。

2、 设置Tersus Studio http代理:Windows->Preference->General->Network Connections

到此为此,您没有写一行代码!您的工作台上只有如下的模型图:

您再回头计算一下花费了多长时间。我第一次花了2个小时。这是在我不熟悉其快捷操作和工具界面的情况完成的。熟练的工程师会怎么样?也许只要半个小时!

好吧,我们用鼠标拖来拖去完成了这个神奇的魔术。而魔术的内幕则有待您自行体会和思考了。这个平台是开源的,所以能够理解和使用到什么程度,不会有不可逾越的障碍。您或许还想把这个模型应用到AndroidBlackberycolor: #1

分享到:
评论

相关推荐

    【HTML5】HTML5在QQ邮箱移动Web应用的实践.pptx

    标题和描述均指向了“HTML5在QQ邮箱移动Web应用的实践”,这表明文档主要讨论的是HTML5技术在QQ邮箱移动端Web应用中的实际应用案例。接下来,我们将详细解析这一实践中的关键知识点,包括HTML5应用于移动Web应用的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。...

    PHP实例开发源码—Kurogo开源移动WEB开发框架.zip

    Kurogo是一个基于PHP的开源框架,专门设计用于构建高质量的移动Web应用。这个框架提供了丰富的功能和灵活性,使得开发者能够快速、高效地创建适应各种设备(包括智能手机和平板电脑)的Web应用。在深入探讨Kurogo...

    应用重构:《从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践》| 知乎 耿健桓 | iOS DevCamp

    ### 应用重构:以知乎iPhone端为例的iOS开发策略及实践 #### 一、议题背景及重要性 随着移动互联网的发展,越来越...同时,这也提醒我们,在移动应用开发中没有所谓的“银弹”,需要根据具体情况进行灵活调整和创新。

    移动开发多平台代码共享文章的Demo

    在移动开发领域,多平台代码共享是一个至关重要的议题,它旨在提高开发效率,减少重复工作,并维护一致性。本文将深入探讨如何实现跨平台的代码共享,以适应Android和iPhone(iOS)两大主流移动操作系统。我们将基于...

    iOS DevCamp幻灯片分享:从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践 | 知乎 耿健桓(更新版)

    然而,对于像知乎这样的复杂社交产品来说,在开发iOS端时如何平衡Web的迭代速度与原生应用的用户体验成为了一个重要的挑战。本次分享将围绕知乎iPhone端从1.0到2.0的重构过程,探讨在复杂社交网络产品的iOS端开发中...

    MooTouch-MooTools的手机框架【软件】

    MooTouch是一个基于MooTools JavaScript库的框架,专门设计用于构建具有类似iPhone原生UI体验的移动应用程序。这个框架的出现,是为了让开发者能够利用Web技术,如HTML、CSS和JavaScript,创建出与iOS设备界面高度...

    JAVA上百实例源码以及开源项目源代码

    Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...

    angularJS;chromeiphone6;模拟书城

    在本项目中,我们主要探讨的是使用AngularJS框架构建一个模拟书城的Web应用,该应用能在Chrome手机模拟器上以iPhone6的样式展示,并具备购物功能,包括商品的购买、删除和添加。我们将深入讨论AngularJS的核心特性,...

    XE2和FireMonkey在IOS上的DataSnap连接

    Phil使用了一个现有的ObjectiveC到FreePascal的解析器,该解析器最初可在http://web.me.com/macpgmr/ObjP/Xcode4/iOS_Parsing_Status.html找到。他对其进行了修改以适应SBJson和DSProxyBase的解析需求。然而,解析后...

    ios 自定义表格控件 gridview

    1. 数据源管理:你需要设计一个能够处理二维数据的数据源模型,以便根据需要加载和渲染单元格。 2. 单元格重用:为提高性能,你需要实现类似UITableView的cell复用机制,确保当单元格离开屏幕时,它们可以被回收并...

    科尔多瓦角

    Cordova,作为一个开源的移动应用开发框架,允许开发者使用标准的Web技术如HTML、CSS和JavaScript来构建跨平台的移动应用。它通过将Web应用封装在原生的移动应用壳内,使其能够访问设备的功能,如相机、联系人、地理...

    :1st_place_medal:掘金翻译计划,可能是世界最大最好的英译中技术社区,最懂读者和译者的翻译平台:

    React是Facebook开源的一个用于构建用户界面的JavaScript库,特别适用于构建单页应用程序。它采用组件化思维,允许开发者将UI拆分成独立、可重用的组件,提高了代码的可维护性和复用性。React的虚拟DOM技术使得在...

    iPhone XS Scene Mockup 2 .sketch .psd素材下载

    在IT行业中,设计是至关重要的一个环节,尤其是对于数字产品如手机应用或网站的设计。"iPhone XS Scene Mockup 2 .sketch .psd素材下载" 提供的是设计师们进行苹果iPhone XS设备展示设计的高质量资源。这些素材可以...

Global site tag (gtag.js) - Google Analytics