APP开发之后,程序是保存在云端还是本地?(以订票app为例,用Java,简要描述移动app的设计与开发流程)

%title插图%num

MicrosoftMobile移动开发宝典的目录

第Ⅰ分 移动应用程序发基础
第1章 .NET Compact Framework移动平台
1.1 Visual Studio移动应用程序发快速入门
1.1.1 Visual Studio版本的选择
1.1.2 其他软件
1.1.3 目标、半台:Pocket PC,Smartphone还是Windows CE
1.1.4 Windows CE与Windows Mobile的差异
1.1.5 选择.NET Compact Framework的版本
1.2 .NET Framework 2.0与.NET Compact Framework 2.0的差异
1.2.1 应用程序配置文件
1.2.2 ClickOnce
1.2.3 Ngen.exe
1.2.4 远程功能
1.2.5 序列化
1.2.6 打印
1.2.7 Web窗体
1.3 .NET Compact Framework 1.0版和2.0版的差异
1.3.1 Windows窗体
1.3.2 显示与布局的管州
1.3.3 数据
1.3.4 通信
1.3.5 COM互操作
1.3.6 图形编程
1.3.7 安
1.3.8 线程
1.3.9 性能监视
1.4 .NET Compact Framework 3.5版简介
1.5 使用社区资源
1.5.1 Microsoft patterns&practices移动应用程序构建块
1.5.2 OpenNETCF Smart Device Framework
1.6 总结
第2章 构建Windows窗体GUI
2.1 了解2.0版本Windows窗休的改进
2.2 使用桌面应用程序丌发流程
2.3 设备屏幕与设备窗体的映射
2.3.1 屏幕的布局
2.3.2 窗体的关闭
2.3.3 窗体的导航
2.4 探究几个重要的Windows窗休控件
2.4.1 Panel
2.4.2 TabControl
2.4.3 Menu(软按键)与ToolBar
2.4.4 Microsoft.WindowsCE.Forms
2.4.5 创建自己的摔件
2.5 输入的处理
2.5.1 选
2.5.2 SIP和QWERTY硬件键盘
2.5.3 硬件按钮
2.6 考虑屏幕的物理因素
2.6.1 方向(与大小)
2.6.2 分辨率
2.6.3 Microsoft patterns&practices Orientation—Aware控件
2.6.4 可选择式设计方案
2.7 针对Smarthone进行发
2.7.1 控件行为
2.7.2 导航范式
2.7.3 InputModeEditor
2.7.4 利用Smartphone项目的IntelliSense
2.8 针对Windows CE设备进行发
2.9 总结
第3章 使用SQL Server 2005 Compact Edition和其他数据存储
3.1 使用SQL Server 2005 Compact Edition数据库
3.1.1 使用Visual Studio 2005 创建数据库
3.1.2 使用SQL Server 2005 Management Studio创建数据库
3.1.3 连接到已存在的数据库
3.1.4 创建表、索引和外键
3.1.5 揭秘SqlCeException
3.2 在项目中创建与数据的连接
3.2.1 创建项目数据源
3.2.2 强类型的DataSet和SqlCeResultSet的设计与编程
3.3 构建数据绑定GUI
3.3.1 使用可视化工具构建Ouick UI
3.3.2 BindingSource控件编程.
3.3.3 细节窗体的数据绑定
3.3.4 使用SqlCeResultSet进行数据绑定
3.3.5 高级数据绑定
3.3.6 设置DataGrid控件的数据格式
3.4 在不使用数据库的况下保存数据
3.4.1 DataSet对象的序列化
3.4.2 对象的序列化
3.5 总结
第4章 捕获错误,测试与调试
4.1 连接到目标
4.1.1 设备
4.1.2 仿真器
4.1.3 最佳选择
4.2 编译时错误
4.3 异常处理——与完整版.NET Framework一致
4.4 运行时异常
4.4.1 异常起因的诊断
4.4.2 这是您的失误
4.4.3 避免异常抛出
4.4.4 合理进行异常处理与恢复
4.4.5 保卫边界(局异常处理:最后的防线)
4.5 局异常处理
4.5.1 完整版.NET Framework中的GEH
4.5.2 .NET Compact Framework 1.0中的GEH
4.5.3 .NET Compact Framework 2.0中的GEH
4.5.4 选择GEH的处理方法:单方法与多方法的比较
4.6 不容忽视的重要异常
4.6.1 Web Exception
4.6.2 SocketException
4.6.3 SqlCeException
4.6.4 InvalidOperationException
4.6.5 MissingMethodExcepion
4.6.6 MissingManifestResource Exception
4.6.7 TypeLoadException
4.7 日志文件
4.7.1 加载程序同志
4.7.2 互操作日志
4.7.3 网络同志
4.7.4 错误日志
4.7.5 终结器日志(3.5版)
4.7.6 远程性能监视器
4.8 手段
4.8.1 断
4.8.2 跟踪
4.8.3 Debug.WriteLine
4.8.4 将追踪信息写入文件
4.9 单元测试
4.9.1 社区项目
4.9.2 署到“我的电脑”
4.9.3 Patterns and Practices
4.9.4 Visual Studio 2008
4.10 总结
第5章 理解.NET Compact Framework与性能优化
第6章 完成应用程序:打包与署
第Ⅱ分 移动应用程序高级发
第7章 与后端服务器的数据交换
第8章 网络
8.1 理解网络与移动设备的复杂性
8.2 使用Web服务
8.3 理解System.Net
8.3.1 WebRequest
8.3.2 套接字
8.4 使用IrDA与Bluetooth
8.5 使用串口
8.6 理解System.Messaging
8.7 总结
第9章 连接
9.1 理解Windows Mobile的连接
9.2 使用桌面间接连接
9.3 语音与数据呼叫
9.3.1 语音呼叫
9.3.2 数据呼叫的建立
9.3.3 Microsoft patterns&practices网络监视应用程序构建块
9.4 适配器的启与关闭
9.4.1 蜂窝电话
9.4.2 WiFi
9.4.3 Bluetooth
9.4.4 SMS侦听
9.5 总结
第10章 移动应用程序安编程
10.1 良好安性的实现
10.1.1 执行安审
10.1.2 为何不能对保密信息进行硬编码
10.1.3 保密信息隐藏技术的优与劣
10.1.4 良好安性的实现需要用户的输入
10.2 凭据与其他保密信息的安存储
10.2.1 保护SQL Server CE数据库中的数据
10.2.2 使用Microsoft patterns&practices应用程序构建块进行安方案编程
10.3 数据加密
10.3.1 使用AES对称算法的加密
10.3.2 使用RSA非对称算法的加密
10.4 网络连接的保护
10.4.1 安装在基于Windows Mobile的设备上的根证书
10.4.2 使用自签名证书
10.5 用户输入的有效性验证
10.6 边界安:设备访问的防护
10.7 应用程序的签名
10.7.1 理解Windows Mobile的安策略
10.7.2 基于Windows Mobile的设备配置
10.8 总结
第11章 线程
11.1 为什么使用线程
11.2 理解底层机制
11.2.1 Windows CE
11.2.2 System.Threading
11.3 及时响应用户接口的维护
11.3.1 消息泵
11.3.2 耗时的任务
11.3.3 演示示例
11.3.4 不理想的解决方案
11.3.5 使用线程来解决问题
11.3.6 BackgroundWorker
11.4 线程活动的同步与数据访问
11.4.1 竞态条件
11.4.2 监视器
11.4.3 线程安
11.4.4 再论死锁
11.4.5 ManualResetEvent
11.5 ThreadPool
11.6 理解线程与程序的关闭
11.6.1 后台线程
11.6.2 线程的终止
11.7 使用.NET计时器
11.8 总结
第12章 图形编程
12.1 图像、文本与图形的绘制
12.1.1 理斛绘制的基本要素
12.1.2 图像的绘制
12.1.3 图像的缩放
12.1.4 背景的绘制
12.1.5 图形与文本的绘制
12.1.6 直线段的绘制
12.2 不同分辨率的处理
12.3 文本的旋转
12.4 使用双缓冲技术来减轻闪烁现象
12.5 使用高级格式化技术
12.5.1 使用渐变填充进行绘制
12.5.2 透明背景图片的绘制
12.5.3 Alpha混合图像的绘制
12.6 总结
第13章 Direct3D Mobile
13.1 Direct3D快速入门
13.1.1 在程序中使用Direct3D
13.1.2 Direct3D设备对象
13.1.3 绘制过程
13.1.4 使Direct3D程序运行起来
13.2 走进三维空间
13.2.1 三角形的渲染
13.2.2 理解坐标与视图
13.2.3 三维物体的移动
13.2.4 从程序员到导演
13.2.5 矩阵
13.2.6 透视与变换
13.2.7 变换与动画
13.2.8 复杂变换的添加
13.2.9 纹理的添加
13.2.10 复杂物体的创建
13.2.11 多个同类物体的绘制
13.2.12 光照
13.2.13 网格
13.2.14 网格的光照与材质
13.3 移动设备上的Direct3D
13.3.1 Direct3D与事件
13.3.2 屏幕方向改变的管理
13.3.3 Direct3D绘图性能
13.3.4 平台差异的处理
13.3.5 电量的消耗
13.4 总结
第14章 平台互操作
14.1 理解平台调用服务
14.1.1 封送
14.1.2 NativeMethods
14.1.3 Media示例
14.1.4 对托管代码进行回调
14.2 理解COM互操作
14.2.1 COM库的导入
14.2.2 接口的手动定义
14.2.3 AcfiveX控件
14.3 总结
第15章 自定义控件的构建
15.1 现有控件的扩
15.2 创建自定义控件
15.2.1 UserControl
15.2.2 Control类
15.3 设计时体验编程
15.3.1 属性
15.3.2 添加到Visual Studio 2005工具箱
15.4 总结
第16章 国际化支持
16.1 球化带来的问题
16.2 区域性
16.2.1 Culturelnfo
16.2.2 再论球化问题
16.3 使用语言翻译(本地化)
16.3.1 资源文件的创建
16.3.2 资源的读取
16.3.3 区域性特定的资源与附属程序集
16.3.4 实际的文本翻译工作
16.4 总结
第17章 Windows Mobile的发
17.1 PocketOutlook
17.1.1 个人信息管理
17.1.2 消息
17.2 状态与通知
17.3 图片
17.4 GPS
17.5 配置
17.5.1 以编码方式对设备进行配置
17.5.2 配置文件设置的署
17.6 电话
17.7 Windows Mobile的早期版本
17.8 总结
第Ⅲ分 .NET Compact Framework 3.5新功能
第18章 .NET Compact Framework3.5与Visual Studio 2008概览
18.1 .NET Compact Framework 3.5简介
18.2 Visual Studio 2008简介
18.3 使用.NET Compact Framework 3.5进行发
18.3.1 Compact WCF编程
18.3.2 语言集成询编程
18.3.3 System.IO.Compression编程
18.4 Visual Studio 2008 Team System中的单元测试
18.4.1 在Visual Studio 2008中编写单元测试
18.4.2 单元测试的运行
18.5 总结

以订票app为例,用Java,简要描述移动app的设计与开发流程。

 java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢。通常是让java作为一个app的服务端,为app客户端提供数据,做业务逻辑,所以我们用java来写接口,app客户端访问接口返回json文件进行解析,最后实现业务逻辑。

     而这种方式我们通常叫做restful。

  restful是一种架构思想,是一位博士生在N年前发表的一篇博士生论文,其核心思想就是前后端分离,前端通过http请求,如www.xxxx.com/demo/username/password  来访问后端的接口,然后后端将处理好的数据封装为json返回,这样,后端只需关注具体逻辑 提供接口,而前端只关心界面,提高了程序解耦性。 在移动优先的时代,restful极为重要。通常一套后台可以让多种终端访问,包括移动端,pc端。     通过restful改进的mvc    在java中比较容易实现restful的是SpringMVC框架,他提供了一套处理json的注解。通过@ResponseBody返回json数据,通过@ResquestBody解析json。

下面是一个ios访问我的java后台demo,java后台采用了springMVC和Hibernate。

//java端

复制代码

 1 package cotroller;

 2 

 3 import java.util.HashMap;

 4 import java.util.Map;

 5 import java.util.List;

 6 

 7 import javax.servlet.http.HttpServletRequest;

 8 

 9 import jdk.nashorn.api.scripting.JSObject;

10 import model.Student;

11 import model.Teacher;

12 

13 import org.springframework.stereotype.Controller;

14 import org.springframework.ui.Model;

15 import org.springframework.web.bind.annotation.PathVariable;

16 import org.springframework.web.bind.annotation.RequestBody;

17 import org.springframework.web.bind.annotation.RequestMapping;

18 import org.springframework.web.bind.annotation.RequestMethod;

19 import org.springframework.web.bind.annotation.ResponseBody;

20 

21 

22 

23 import dao.Get;

24 import dao.StudentDAO;

25 

26 //登陆servlet

27 @Controller

28 public class LoginCotroller {    

29     /**

30      * 1. value="/doLogin/{username}/{password}" 拦截 xxx/doLogin/xx/xx

31      * 2. @ResponseBody 使用此注解将返回数据类型封装json

32      * 3. @PathVariable("username") 截取请求1.value中{username}的值

33      * 4. Map<String, Object> 服务端将值放入map中再封装为json,客户端方便通过key取出value

34      */

35     

36     StudentDAO studentDAO = new StudentDAO();//调用登陆判断方法

37     

38     @RequestMapping(value="/doLogin/{username}/{password}",method=RequestMethod.GET)

39     @ResponseBody

40     public Map<String, Object> getTeacher(@PathVariable("username") Integer username, @PathVariable("password") String password){    

41         System.out.println("拦截了客户端json请求");

42         Map<String, Object> map = new HashMap<String, Object>();

43         

44         if(studentDAO.loginByStudent(username, password)){

45             System.out.println("密码正确");

46             map.put("result", "1");

47             return map; //封装为json返回给客户端

48         }

49             

50         System.out.println("密码错误");

51         map.put("result", "0");

52         return map; //封装为json返回给客户端

53     }

54 

55 }

复制代码

//ios端

复制代码

 1 #import <Foundation/Foundation.h>

 2 #import <stdio.h>

 3 

 4 int main(int argc, const char * argv[]) {

 5     @autoreleasepool {

 6    

 7         char oldUsername[128];

 8         char oldPassword[128];

 9         

10         NSLog(@"请输入用户名 :");

11         scanf("%s", oldUsername);

12         NSString *username = [NSString stringWithUTF8String:oldUsername]; //转换为NSString *

13         NSLog(@"请输入密码 :");

14         scanf("%s", oldPassword);

15         NSString *password = [NSString stringWithUTF8String:oldPassword]; //转换为NSString *

16         

17         //访问springMVC后台并解析返回的json数据

18         //定义一个异常

19         NSError *error;

20         

21         //定义请求action 使用stringWithFormat拼接字符串

22         NSString *url = [NSString stringWithFormat:@"http://154212l6t7.imwork.net:27063/partyOS_APP/doLogin/%@/%@", username, password];

23         

24         //加载一个NSURL对象

25         NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];

26         

27         //发送请求 将请求的url数据放到NSData对象中

28         NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

29         

30         //NSJSONSerialization从response请求中解析出数据放到字典中

31         NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

32         

33         NSString *resultValue = [jsonResult objectForKey:@"result"];

34         

35         NSLog(@"你的url是%@", url);

36         NSLog(@"服务端返回值%@", resultValue);

37         

38         // oc字符串比较方法 resultValue isEqualToString:@"1"] 和java 的equlse类似

39         if([resultValue isEqualToString:@"1"]){

40             NSLog(@"登录成功!");

41         }else{

42             NSLog(@"登录失败,用户名或密码错误!");

43         }

44         

45         

46     }

47     return 0;

48 }

APP开发之后,程序是保存在云端还是本地?

服务器上啊 app让人下载安装

北京速达移动应用研发中心提供