---
title: "移动应用开发：一个用户故事"
date: "2021-05-21"
categories: 
  - "app-development"
  - "mobile-development"
  - "mobiletogether"
tags: 
  - "app-design"
  - "app-development"
  - "mobile-development-tools"
  - "user-stories"
description: 探索一款用于跟踪太阳能发电量的移动应用程序的开发过程，重点关注用户需求、数据管理以及有效的可视化技术。
---
Status: #blog

Tags:  #app-design #app-development #mobile-development-tools #user-stories

Categories: [mobile-development](/blog/zh/category/mobile-development.md) | [mobile-development](/blog/zh/category/mobile-development.md) | [mobile-development](/blog/zh/category/mobile-development.md)
# 移动应用开发：一个用户故事

啊，春天！鸟儿歌唱，鲜花盛开，而且日出时间越来越早，日落时间越来越晚。这些额外的日照为太阳能发电系统提供了更多的时间来发电。随着夏至的临近，太阳能发电系统进入一年中最具生产力的时期。

屋顶太阳能系统的用户通常对跟踪其发电效率充满热情。演员兼喜剧演员约翰·霍德曼甚至曾[主持过一场关于过度监控太阳能发电量](https://maximumfun.org/transcripts/judge-john-hodgman/transcript-judge-john-hodgman-ep-443-daylight-savings-crime/)的讨论。我的朋友凯西也对太阳能充满热情。每次见到凯西，她都会向我汇报她最新的千瓦时发电数据。凯西的家位于一个温暖、阳光充足的地区，而空调是她最大的用电需求。她于上个月底在自家屋顶安装了太阳能板，她的系统在漫长的夏季里迅速发电，以满足她空调的用电需求。

在收到八月份的电费账单后，凯西打电话给她的太阳能安装公司，报告了一个好消息——她家这个月的用电量为零。“我必须承认，我每天都会查看电表，看看这个系统运行得怎么样，”凯西告诉安装人员。

“每个人都这么做，”安装人员回答道。“有些用户甚至告诉我，他们一天要检查三次电表！”

凯西问我，是否可以使用基于MobileTogether开发的手机应用程序，作为她太阳能系统的良好数据报告工具。“我可以将电表读数输入到我的手机上，”她说。“我每天早上遛狗前都可以这样做。”

就这样，我们的移动应用开发合作开始了。最终，我们开发出了一款名为“Solar Power Tool”的移动应用。

![](/blog/images/mt_darktheme_blog_1-1.jpg)

<!--more-->

Kasey家的太阳能系统配备了软件，可以报告发电量，但这只是其中的一部分。 就像许多住宅太阳能发电系统一样，Kasey家的房屋也连接到公共电力网络 [净计量计费](https://en.wikipedia.org/wiki/Net_metering). 太阳能电池板只在阳光照射时为家庭提供电力。在夜间或当用电需求超过发电量时，电力来自电网。当太阳能电池板产生的电力超过家庭的用电量时，多余的电力会反馈回电网，以补充电力公司的发电能力。

每月电力公司账单会显示该住宅每月产生的电力和消耗的电力量。账单持有人需要支付超出生产量的额外用电量，并支付一笔小额的连接费用。超出生产量的电力将计入下个月的账单。这些住宅安装了两个电表：一个电表记录产生的电力，另一个记录消耗的电力。

凯西希望开发一款应用程序，该应用能够实时监控每月用电量，而不是等待电力公司账单。我们为此制定了一系列移动应用开发需求：

- 提供一个非常简单的数据录入表，用于记录仪表读数
- 自动根据读取的数据计算账户余额
- 以数字和图表的形式，展示每日的业绩和每月的余额
- 跟踪一段时间内的盈余情况，以显示每月之间的变化。

MobileTogether 提供了我们所需的所有功能，可以优雅地实现应用程序的需求。我们首先定义了用于每日和每月记录的 XML 数据结构。以下是在 XMLSpy 界面中显示的每月数据：

[![每月报告数据，用于跟踪太阳能发电量。](/blog/images/monthly-grid-view.png)](monthly-grid-view.png)

通过查看日期和电表读数，从第四列到第七列分别显示了发电量、用电量、月度盈余和总余额，这些数据都是简单的数值计算。例如，查看第五行，发电量（kWhGen）只是九月份的太阳能电表读数减去八月份的读数。太阳能电表只会记录正向累加，而用电表则根据日照情况和每小时的用电量，可能正向累加，也可能反向累减。

在移动应用程序开发的下一步中，我们设计了该应用程序的顶层流程。我们决定创建两个主要页面：一个用于显示每日表现，另一个用于显示每月历史数据。数据录入表单将作为子页面，从每个主要页面访问。以下是 MobileTogether Pages 辅助窗口，展示了页面结构：

[![在移动应用开发过程中，页面结构需要进行定义  ](/blog/images/pages-helper.png)](pages-helper.png)

每个页面上的按钮用于执行“MobileTogether”操作，从而在不同视图之间进行切换。

然后，我们考虑如何用图表来直观地展示这些数据。MobileTogether 允许开发者构建多层图表，甚至可以组合不同类型的图表。我们决定将面积图和柱状图结合起来。我们选择在背景中使用面积图来表示用电量，按天和按月进行展示，然后在其上方叠加一个柱状图，用于显示太阳能发电量。我们的逻辑是，家庭用电是持续的，即使在深夜，冰箱、电子钟、手机充电器等设备也在用电。而太阳能发电是间歇性的，从日出开始，到日落结束。

模拟器是 MobileTogether Designer 的一项功能，它可以在移动应用开发过程中立即执行解决方案，用于测试逻辑、预览用户界面在各种 iOS、Android 或 Windows 设备上的显示效果，以及检查工作流程数据的变化。以下是模拟器中显示的每日报告页面的截图：

[![用于在移动应用开发过程中，通过MobileTogether模拟器展示每日生产情况的图表。](/blog/images/daily-sim-view.png)](daily-sim-view.png)

本页面报告了从4月18日开始的14天发电数据。如图表所示，太阳能发电量因云层覆盖情况而每天差异很大。下方的图表显示了每天的发电盈余或赤字。4月18日，消耗的电量比发电量多，而4月29日，发电量和消耗量持平衡。

在第一个图表下方的“显示”按钮，会打开一个包含数据的数字表格

![一个“显示/隐藏”按钮用于控制每日性能统计数据的显示。](/blog/images/daily-data-table.png)

“显示”按钮会控制“MobileTogether 可见性”属性，该属性应用于数据表。该数据表可以在页面内滚动，并包含上一个完整月份的数据。 “添加新数据”按钮会打开一个子页面，用于输入一组新的数据

[![该子页面用于数据录入，允许用户输入新的每日读数。](/blog/images/enter-daily.png)](enter-daily.png)

该按钮的控制动作定义允许我们以模态对话框的形式打开页面，这意味着原始页面仍然会显示在后台。

[![在移动应用开发过程中，用于定义子页面布局的设置](/blog/images/modal-subpage.png)](modal-subpage.png)

MobileTogether 允许我们在用于输入仪表读数的输入框控件中添加提示文本。我们还使用了 MobileTogether 的键盘属性。当 Kasey 点击编辑框以输入新值时，只显示数字字符。

[![开始新的每日阅读计划。](/blog/images/enter-daily-2.png)](enter-daily-2.png)

在输入两个仪表读数后，凯西的下一步是点击“计算产量”按钮

[![根据新的数据，计算当日的生产统计信息。](/blog/images/enter-daily-3.png)](enter-daily-3.png)

该功能执行 XQuery 计算，以生成用于预览的每日生产数据。随后，Kasey可以选择添加新的数据，或者取消输入。添加新的每日记录还会自动更新每日报告页面上的图表

[![添加新的数据后，每日产量图表也会自动更新。](/blog/images/enter-daily-4.png)](enter-daily-4.png)

月度报告页面与每日报告页面的设置方式类似。以下展示了在安卓手机上，月度报告页面的两种显示模式：[深色主题](https://www.altova.com/blog/mobile-apps-that-automatically-support-dark-theme/)和[浅色主题](https://www.altova.com/blog/mobile-apps-that-automatically-support-dark-theme/)

[![安卓手机上，以深色主题和浅色主题两种模式展示的月度报告页面](/blog/images/monthly-report.png)](monthly-report.png)

本页面上的数据表格显示了每月统计数据。前12行的数据基于凯西的账单中的水电气表读数，其中第4列到第7列的值由应用程序计算得出。第13行的数据基于最近一次的每日读数记录。每次凯西添加新的每日读数时，应用程序都会更新每日数据表格和每日图表，并自动计算每月总数，替换每月表格中的第13行，并更新每月图表。

这解决了该移动应用程序开发的首要需求：即监控自上次水电费账单以来的累积盈余。累积盈余信息在每月数据表格的第13行、第一个月图表下方的说明文字中，以及两个月图表的右侧区域中都会显示。

每个页面的右上角都有一个齿轮图标，这是一个使用 MobileTogether 内置按钮图像创建的“设置”按钮。点击该按钮会打开一个“设置”页面，如图所示，该图是在 iPhone 上显示的：

[![在iPhone上查看的“设置”页面。](/blog/images/settings-1.png)](settings-1.png)

设置页面上的前四个按钮允许我们在开发过程中或用于分析时，对数据集进行操作和交换。最后一个设置是一个下拉框，允许凯西重置“每日报告”页面上的图表，以显示过去7、14、21或30天的的数据。

[![每日余额图表的21天视图。](/blog/images/daily-balance-21.png)](daily-balance-21.png)

在最初的手机应用程序开发完成后，凯西对结果感到非常满意。她每天早上都会带着她的狗出门散步，并记录下电表读数。当水电费账单寄到时，她会根据电表读数的记录，更新每月的数据表格。

有一天，她给我打电话。“你知道我几乎一年都待在家里了，现在我终于准备好再次旅行了，”她说。“如果我连续几天不更新内容，这个应用程序会怎么样？”

我不得不仔细思考这个问题，并构建了一个测试数据集来验证。最终的结果是，月度报告是可靠的。无论用户是否遗漏了某一天或一周的电表读数，应用程序都会始终根据最新的账单和最近一次的日读数来计算累积的剩余电量。

每日报告中存在一些小问题。用于记录每日数据的日期字段是一个日期选择控件，默认情况下会加载当前日期，但如果用户有其他日期的读数数据，可以选择其他日期。

但是，如果遗漏了几天的数据，那么最后一天的数据，包括日产量和图表数值，就会不准确。所有生产和消耗量都会被计入最后一天。

解决方案很简单。我们决定在每日统计数据的计算中增加一些逻辑，使用条件判断语句和循环来实现

- 如果新的读数日期比上次读数日期晚超过一天，则需要计算缺失的天数
- 将总产量和总消费量分别除以两次读数之间总天数。
- 使用循环来为每个缺失数据的生产日和消费日分别计算并赋值平均生产量和平均消费量。

我将这个逻辑实现为一个 MobileTogether 动作组，并将这个新的动作组添加到凯西点击“添加每日阅读”按钮时执行的步骤中。

凯西于5月2日心情愉快地出发，参加为期3天的露营和徒步旅行。5月6日，她结束旅行并返回后，像往常一样，记录了每日的用电量数据。以下是她在iPhone上查看的每日报告和月度报告的片段，其中使用了平均值来填补缺失的每日读数：

[![以下是在iPhone上显示的，关于如何应对因故未按计划阅读的日子所采取策略的结果。](/blog/images/monthly-report-2.png)](monthly-report-2.png)

5月3日、4日和5日的电表读数显示为零，这表明这些数值是平均值。

如果您正在进行跨平台移动应用开发，您需要一款具备完整功能的图形化编程工具，并且集成了调试功能！请查看我们的 MobileTogether [视频演示](https://www.altova.com/zh/mobiletogether/demos#video_Demos), 更多 [示例应用程序](https://www.altova.com/zh/mobiletogether/demos), 或者，甚至是…… [在线手册](https://www.altova.com/manual/MobileTogether/mobiletogetherdesigner/) 如果您想深入了解所有相关信息，并且准备好立即开始，以最快的速度构建您自己的跨平台移动应用程序，那么 [下载 MobileTogether 设计器](https://www.altova.com/zh/mobiletogether/download) 开始吧。
