51、移动设备开发与团队协作开发指南

移动设备开发与团队协作开发指南

1. 移动设备开发设计与编码

1.1 设计建议

在移动设备开发中,遵循“先设计,后编码”的原则。以下是一些设计建议:
- 服务器承担主要工作 :将计算密集型任务移至服务器,让服务器运行这些任务,移动设备负责处理界面和少量计算。不过,设备与服务器的连接便捷性和频率会受到所开发的移动设备的影响。
- 谨慎选择语言 :J2ME 尚处于起步阶段,可能不是最佳选择。根据需求,其他面向对象语言(如 C++)可能是更好的选择。

1.2 编码优化建议

为实现最佳性能,编码时可参考以下建议:
- 使用局部变量 :访问局部变量比访问类成员更快。
- 避免字符串拼接 :字符串拼接会降低性能,并可能增加应用程序的峰值内存使用。
- 使用线程并避免同步 :任何运行时间超过 0.1 秒的操作都需要单独的线程。避免同步也可以提高性能。
- 使用 MVC 分离模型 :MVC 将逻辑与控制表示的代码分离。

1.3 实践:创建课程信息访问的 MIDlet

1.3.1 创建项目

创建 MIDlet 项目的重要步骤如下:
1. 选择“File” -> “New Project” 打开项目向导。
2. 为 ChalkTalk 应用程序提供名称 “ChalkTalk”。
3. 其余字段保留默认设置,点击 “Next”。
4. 点击 JDK 字段旁边的省略号,选择要用于此 MIDlet 的 MIDP/CLDC JDK。
5. 最后一步保留默认设置,点击 “Finish”。

1.3.2 创建 MIDlet 文件

使用 MIDlet 向导为项目生成骨架 MIDlet 文件的步骤如下:
1. 选择 “File” -> “New”,点击对象库中的 “Micro” 选项卡。
2. 双击 “MIDlet Wizard” 图标。
3. 将主 MIDlet 类的默认名称 “MIDlet1” 替换为 “ChalkTalk”。
4. 点击 “Next”。
5. 将 Displayable 类名称替换为 “MainMenu”,标题替换为 “ChalkTalk menu”。
6. 点击 Displayable 类型字段旁边的向下箭头,选择 “javax.microedition.lcdui.list”。
7. 将默认的命令处理字段保留为接口实现。
8. 在步骤 3 中勾选 “Create a Runtime Configuration”,然后点击 “Finish”。

1.3.3 创建主菜单

使用 ListDisplay 组件创建主菜单的步骤如下:
1. 将光标放在构造函数第一行末尾的开括号后,按几次 Enter 键打开一些空行。
2. 插入以下类常量:

// These are our menu choices that will be in our List.
private static final String[] MENU_CHOICES = new String[2];
static {
    MENU_CHOICES[0] = "Class Listing";
    MENU_CHOICES[1] = "Find A Class";
};
  1. 创建以下实例变量:
// ClassList screen.
private ClassListDisplay classListDisplay = new ClassListDisplay(this);
  1. 替换 mainmenu 构造函数中的 super() 方法以添加菜单选项:
super("ChalkTalk Menu",  // List title.
      List.IMPLICIT,     // List type.
      MENU_CHOICES,      // Our defined array of menu choices.
      null);             // Images.  (we’re not including any images).
  1. 替换 mainmenu 类中的 commandAction 方法:
public void commandAction(Command command, Displayable displayable) {
    // First, get the type of command that was just received.
    int commandType = command.getCommandType();
    // Now perform an action based on the type of command received.
    if (commandType == Command.EXIT) {
        // We just received the EXIT command (user just pressed EXIT), 
        // so quit the MIDlet.
        ChalkTalk.quitApp();
    }
    else {
        // User must have selected one of the menu items.  Find out what is
        // selected and display the appropriate screen.
        String selectedItem = getString(getSelectedIndex());
        if (selectedItem.equals(MENU_CHOICES[0])) {
            // Show the ClassList screen.
            Display.getDisplay(ChalkTalk.instance).
                  setCurrent(ClassListDisplay);
        }
    }
}
  1. 添加清理变量的方法:
void destroy() {
    ClassListDisplay.destroy();
    ClassListDisplay = null;
}
1.3.4 创建课程列表

创建课程列表的步骤如下:
1. 选择 “File” -> “New”,点击对象库中的 “Micro” 选项卡。
2. 双击 “MIDP Displayable Wizard” 图标。
3. 将主 MIDlet 类的默认名称 “displayable2” 替换为 “CourseListDisplay”,标题为 “Course Listing”。
4. 点击 “Finish” 按钮。
5. 为创建的类添加一个私有变量,以保存调用菜单的副本。
6. 修改构造函数以保存调用菜单的副本:

public ClassListDisplay(MainMenu mainMenu) {
    // Save the MainMenu instance so that we can access it later when we
    // want to switch back to the MainMenu screen.
    this.mainMenu = mainMenu;
    // Initialize the canvas.
    try {
        jbInit();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}
  1. 添加清理代码的 destroy 方法:
void destroy() {
}

2. 团队开发的重要性与设计准则

2.1 团队开发的重要性

软件开发通常是团队活动,很少有人能独自完成重要的编程项目。团队开发有助于通过同行评审和批判来平衡个人偏见和习惯带来的负面影响。例如,在代码编写中,多人审查可能会提出更优雅的解决方案。

2.2 团队结构与责任设计准则

团队结构与软件结构存在同构关系,因此在组建团队时应谨慎。以下是一些分配团队成员职责的建议:
- 分配内聚的软件实体 :尝试将内聚的软件实体(如一个类或至少一个重要的业务方法)分配给单个团队成员,以增加类(或方法)的内聚性。
- 减少团队成员间的沟通 :尽量减少团队成员之间的沟通,以最小化不同成员设计的类之间的耦合。
- 明确职责和期望 :团队成员必须能够清楚描述他们正在开发的类的职责,以及对其他类的期望。使用 CRC 卡片等建模技术可以帮助团队成员理解类的角色。
- 注意组织层级 :团队中过多的组织层级可能会导致沟通问题,小项目中超过三层组织层级就应引起关注,超过五层几乎肯定会出现问题。

2.3 版本控制系统术语

在使用版本控制系统时,以下是一些重要术语:
|术语|描述|
| ---- | ---- |
|Repository|存放版本控制文件的共享目录,属于项目和团队,建议存放在定期备份的网络计算机上|
|Workspace|开发人员个人存放最新工作文件的目录,通常在自己计算机的硬盘上|
|Check out|从版本控制系统获取文件以进行可能的更改,有锁定检出和非锁定检出两种方式|
|Commit or Check in|将文件放回版本控制系统,对于悲观的版本控制系统,文件必须先检出|
|Merge|在乐观的版本控制系统中,允许用户比较仓库和工作区文件版本的差异,并接受或拒绝更改|

2.4 版本控制礼仪

为了充分利用版本控制系统,建议遵循以下规则:
1. 一名开发者首先在仓库中创建项目,初始项目应包含项目文件、README 文件和一些初始源代码或资源文件。
2. 其他开发者从仓库检出项目。
3. 每个开发者在修改文件之前,应先通过合并或更新命令将本地工作区文件与仓库版本同步,以确保包含最新更改。
4. 每个开发者应定期将自己的代码与仓库中的代码合并,以减少因意外事件(如硬盘崩溃)造成的损失。
5. 确保放入仓库的代码是可运行的(至少能编译并通过单元测试)。

3. JBuilder 与常见版本控制系统集成

3.1 JBuilder 与 CVS

3.1.1 创建项目
  • 选择 “Team” -> “Select Project VCS” 选择 CVS 版本控制系统。
  • 创建本地 CVS 仓库,输入仓库目录并点击 “OK”。
  • 选择 “Team” -> “Place Project in CVS” 将项目放入 CVS 仓库,设置项目的 CVS 属性,如下表所示:
    |设置|描述|
    | ---- | ---- |
    |Connect Type—Local|指定仓库位于本地或网络驱动器|
    |Connect Type—PServer|指定仓库位于服务器|
    |Connect Type—Ext|指定仓库位于安全服务器|
    |Login settings—Server|本地连接无需服务器名,PServer 或 Ext 连接需要指定托管 CVS 服务器的机器名|
    |Login settings—Username|本地连接无需用户名,PServer 或 Ext 连接需要用户名登录 CVS 服务器|
    |Login settings—Remote shell|本地或 PServer 连接无需远程 shell,Ext 连接需要指定执行 CVS 命令的安全 shell(如 Unix 变体上的 ssh)|
    |Module location—Repository Path|本地连接需要仓库路径,PServer 或 Ext 连接不需要|
    |Module location—Module name|仓库存储项目文件的模块名称|
3.1.2 检出项目

新用户加入时,通过 “Team” -> “Pull Project from CVS” 菜单选项,使用向导从 CVS 检出项目,需要指定目标目录、连接服务器的详细信息、仓库路径和模块名称。

3.1.3 更新仓库

CVS 使用乐观变更控制,在修改文件前应更新本地项目文件。通过 “Team” -> “Status Browser” 比较本地文件和仓库文件的差异,对于有差异的文件有三种选择:
- 提交更改到仓库 :将自己的更改提交到仓库。
- 恢复到仓库版本 :用仓库版本覆盖本地更改。
- 不做处理 :保持现状。

当遇到未识别的更改时,可按以下步骤解决:
1. 确保已开启备份。
2. 保存自己的更改。
3. 在 Commit Browser 中选择 “Update” 并点击 “Commit” 按钮。
4. 切换到 Content 窗格底部的 “History” 标签,再切换到 “Diff” 标签,选择最新保存版本和缓冲区,比较更新前后的差异。
5. 接受或拒绝个别更改块,恢复自己的更改并提交文件到仓库。

3.2 JBuilder 与 Microsoft Visual SourceSafe

3.2.1 创建项目
  • 选择 “Team” -> “Select Project VCS” 选择 Visual SourceSafe(VSS)。
  • 选择 “Team” -> “Place Project into VSS”,使用向导将项目放入 VSS 仓库,需设置 VSS 数据库目录、用户名和密码、选择要放入仓库的目录和文件、指定项目名称和位置。
3.2.2 检出项目

新成员通过 “Team” -> “Pull Project from VSS” 菜单选项,使用向导从 VSS 检出项目,需要指定 VSS 仓库目录、用户名和密码、选择要检出的项目、指定目标目录。

3.2.3 更新仓库

Visual SourceSafe 使用悲观锁定,修改文件前必须检出文件。可通过 “Team” -> “Check Out” 或上下文菜单进行检出操作。检出文件前会出现信息对话框,点击 “OK” 后文件变为可写。

4. 版本控制系统操作流程总结

4.1 操作流程对比

为了更清晰地对比 CVS 和 Microsoft Visual SourceSafe 在 JBuilder 中的操作流程,下面用表格展示创建项目、检出项目和更新仓库的主要步骤:
|操作|CVS|Microsoft Visual SourceSafe|
| ---- | ---- | ---- |
|创建项目|1. 选择 “Team” -> “Select Project VCS” 选 CVS
2. 创建本地 CVS 仓库
3. 选择 “Team” -> “Place Project in CVS”,设置项目 CVS 属性|1. 选择 “Team” -> “Select Project VCS” 选 VSS
2. 选择 “Team” -> “Place Project into VSS”,设置 VSS 数据库目录、用户名和密码等|
|检出项目|通过 “Team” -> “Pull Project from CVS” 向导,指定目标目录、连接信息、仓库路径和模块名称|通过 “Team” -> “Pull Project from VSS” 向导,指定 VSS 仓库目录、用户名和密码、要检出项目和目标目录|
|更新仓库|使用 “Team” -> “Status Browser” 比较差异,有提交、恢复、不处理三种选择,遇未识别更改按特定步骤解决|使用悲观锁定,修改前通过 “Team” -> “Check Out” 或上下文菜单检出文件|

4.2 操作流程图

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B{选择版本控制系统}:::decision
    B -->|CVS| C(创建本地 CVS 仓库):::process
    B -->|VSS| D(选择 “Team” -> “Place Project into VSS”):::process
    C --> E(设置项目 CVS 属性):::process
    D --> F(设置 VSS 数据库目录等):::process
    E --> G(新用户从 CVS 检出项目):::process
    F --> H(新成员从 VSS 检出项目):::process
    G --> I(修改前更新本地文件):::process
    H --> J(修改前检出 VSS 文件):::process
    I --> K{有差异?}:::decision
    J --> L(进行文件修改):::process
    K -->|是| M{选择操作}:::decision
    K -->|否| L
    M -->|提交| N(提交更改到仓库):::process
    M -->|恢复| O(恢复到仓库版本):::process
    M -->|不处理| L
    N --> P(结束):::startend
    O --> P
    L --> Q(更新仓库):::process
    Q --> P

5. 移动设备开发与团队开发的关联

5.1 开发流程整合

在移动设备开发中,团队开发的理念同样适用。从移动设备开发的设计、编码到测试等环节,都可以采用团队开发的方式。例如,在设计阶段,不同成员可以负责不同的设计建议部分,如服务器架构设计和语言选择等;在编码阶段,根据团队结构与责任设计准则,将不同的类或业务方法分配给不同成员。

5.2 版本控制在移动开发中的应用

移动设备开发也需要版本控制系统来管理代码。在创建移动应用项目时,可以使用 JBuilder 与版本控制系统集成的功能。比如,在开发 ChalkTalk 应用时,将项目文件放入版本控制系统的仓库中,团队成员可以从仓库检出项目进行开发,定期合并代码,确保代码的一致性和可维护性。同时,遵循版本控制礼仪,保证放入仓库的代码是可运行的,减少因代码问题导致的开发延误。

6. 总结与建议

6.1 总结

  • 移动设备开发遵循“先设计,后编码”原则,设计上让服务器承担主要工作、谨慎选择语言,编码时使用局部变量、避免字符串拼接等优化建议。在创建移动应用项目时,有详细的项目创建、文件生成、菜单和列表创建步骤。
  • 团队开发在软件开发中至关重要,合理的团队结构和责任分配可以提高软件质量。版本控制系统是团队开发的重要工具,JBuilder 可以与 CVS 和 Microsoft Visual SourceSafe 等版本控制系统集成,不同系统有各自的操作流程和特点。

6.2 建议

  • 对于移动设备开发人员,在选择开发语言时要充分考虑项目需求和设备特性,合理利用服务器资源,提高应用性能。在编码过程中,严格遵循编码优化建议,确保代码的高效性。
  • 对于团队开发成员,要严格遵循团队结构与责任设计准则,明确自己的职责,减少不必要的沟通成本。在使用版本控制系统时,务必遵守版本控制礼仪,保证代码的质量和可维护性。在遇到版本冲突等问题时,按照相应的解决步骤进行处理,避免影响项目进度。
**项目名称:** 基于Vue.jsSpring Cloud架构的博客系统设计开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术栈:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术栈:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值