通过简单有用的移动应用程序支持失物招领服务





5.00/5 (5投票s)
React Native、Node.js 和 PostreSQL,使用 PERN 栈开发一个应用程序来支持走失宠物搜寻过程
1. 介绍
走失宠物的情况非常普遍,而找回它们的过程往往相当艰辛和令人疲惫。它们通常很快就被其他人发现,但这些人即使非常热心,也很难找到或确定真正的主人。
有了这个应用程序,这个过程将变得更轻松、更短、更快。这是因为我们提出了一个方便报告丢失或发现的方案。通过它,人们可以描述他们走失的动物的特征并附上图片,以方便其他参与搜寻过程的人员识别。当有人发现走失的动物时,也可以进行同样的操作。
这样,用户将拥有一个工具,可以在丢失动物的主人与最终找到它们的人之间建立一个快速有效的平台。
1.1. 目标
本项目的主要目标是开发一款应用程序,方便寻找走失的宠物,允许动物主人输入有关走失动物的信息,也方便可能已经发现或看到动物的工作人员。在这两种情况下,该工具的目的是提供一个快速、简单且非常友好的沟通和互动渠道,以期为他人的参与和协作提供一个有吸引力的策略。
1.2. 方法论
为了开发提议的工具,本项目旨在利用 Node.js 技术(一个 JavaScript 代码解释器)和 React Native 框架(一个面向 Web 开发人员的应用程序平台)。对于源代码的编辑,将使用 Visual Studio Code,这可以提高生产力和组织性。为了生成应用程序的 APK(Android Package),将使用 Android Studio。将有一个数据库来存储客户信息和已进行的预约。
本项目的基本要求基于对真实案例的考虑、对相关工具的分析以及真实人物的证词。这些已识别的信息有效地为设计一个高效实用的工具做出了贡献,并考虑了相关社区的真实需求和期望。
至于软件工程环境,为了管理任务、操作所涉及的技术以及控制原型的演变,本项目涉及一种采用敏捷实践的纪律。演变是基于功能的,交付以看板机制为指导,自动化由持续集成平台 Buddy (2022) 提供支持。
2. 开发
2.1. 方案
该移动应用程序是解决方案的前端层,使用基于 JavaScript 语言的 React Native 框架开发。选择该框架是基于其多平台特性,因为 React Native 会将所有开发的代码转换为操作系统(即 iOS 或 Android)的语言进行执行,从而提高系统可用性。此外,还有其他优势,例如良好的交易安全、执行性能和开发人员的生产力。
另一方面,系统 API 使用 Express.js 实现。这是一个流行的 Node.js 框架,它不仅非常快速、轻量且灵活,而且还是一个 Model-View-Controller (MVC),提供了强大的资源集来开发移动和 Web 应用程序的后端。
为进行此项工作,使用了以下工具、流程和支持技术:
- Android Studio:用于开发 Android 应用程序的官方集成开发环境 (IDE),基于 IntelliJ IDEA。
- Docker:一个开源平台,可简化隔离环境的创建和管理。它可以将应用程序或环境打包到容器中。
- Node.js:一个基于 JavaScript 语言的框架,允许实现微服务。
- MongoDB:一个可扩展且灵活的面向文档的数据库(Mongodb, 2022)
- PostgreSQL:一个面向对象的数据库 (DBMS) 管理系统,作为一个开源项目开发。非关系型基础。
- Redis:一个开源的内存键值数据结构存储(Redis, 2022)
- VS Code:由 Microsoft 开发和维护的开源 IDE 代码编辑器。
- Git 和 Github:分布式版本控制系统,主要用于软件开发,以及一个实现 git 项目和流程的云存储库。
- Buddy:支持开发过程中的持续集成(Buddy, 2022)
在项目初步开发阶段,进行了研究和基本需求的收集,为第一个原型制作,使用户能够获得最佳和最真实的用户体验。
在本次分析过程中,识别了一些好的想法。其中包括创建一个动态信息流,未来使用该工具的人可以在其中发布走失或已找到的动物的信息,因为这是一个关于走失动物的信息流,人们可以轻松地滚动查看用户自己发布的内容。另外还注意到人们需要能够为动物添加视觉信息。因此,我们识别出允许用户在发布时添加图像的需求,以更好地识别他们的宠物。通过此功能,用户在发布走失信息时,可以拍摄新照片或添加设备上已有的照片。
图 1 展示了应用程序的用例图,描述了其主要功能和参与者,展示了系统与外部代理的交互。
为了支持系统中提出的操作,建立了一个简单且定义明确的数据结构,该模型由三个主要实体组成:USERS
、ANIMALS
和 FILES
(图 2)。
USERS
- 基本上是系统中所有用户的注册信息。这些用户可以是帖子作者、评论作者或仅仅是关注者。ANIMALS
- 包含有关走失或已找到动物的信息。基本上就是帖子本身。FILES
- 这些是与帖子相关的评论。
所有主要实体的关系结构都托管在 PostgreSQL DBMS 中,并且也发布在云服务器上。
考虑到本项目是一个用于数据混合架构探索性分析的实验室,选择了一组非关系型信息,并且这些信息在数据生命周期中变化很少或没有变化,因此需要通过面向文档的管理来维护,即在一个非关系型 DBMS 中。根据图 3,此操作中处理的数据将发送给用户,作为一种预测和加强联系的策略,在某些情况下,这可能对搜寻过程至关重要。
在这种情况下,与帖子“通知”相关的信息被持久化在 MongoDB 数据库中。此模型中的某些数据在两个模型中似乎都有复制,但是,考虑到 Mongo 模型中的非关系特性,这并不是一个与 ACID 属性相关的问题,而是这种数据的搜索性能策略。此数据库中的所有信息都是通过异步通信发送给与该过程相关的用户(发布)。
JSON Schema 描述符,用于记录 MongoDB 模型。
{
"type": "object",
"title": "notification",
"properties": {
"content": {
"type": "string",
"description": "conteudo da notificacao"
},
"user_sent": {
"type": "string",
"description": "identificacao do usuario autor"
},
"id_ animal": {
"type": "integer",
"description": "identificacao da postagem"
},
"name_user": {
"type": "string",
"description": "nome do usuario"
},
"avatar": {
"type": "string",
"description": "imagem do usuario"
},
"createAt": {
"type": "string",
"description": "data da postagem"
},
"updateAt": {
"type": "string",
"description": "data da atualização"
}
},
"required": [
"user_sent",
"id_ animal",
"name_user",
"createAt",
"updateAt"
]
}
2.2. 结果
功能演示
在首次安装应用程序后,用户需要输入基本信息进行首次注册。之后,他就可以访问系统,然后可以使用注册的电子邮件和密码进行首次登录(图 5.a、5.b 和 5.c)。
登录后,用户将看到一个包含其他用户(已在使用该应用程序的用户)帖子的信息流。在此屏幕上,所有未找到的动物的帖子都将对所有人可见,并且可以与帖子互动,发表新评论。为了增强快速互动,这些评论也会通过电子邮件发送给所有与特定帖子互动过的人,确保每个人都收到通知。
| | |
这些评论使用项目开发的 API(应用程序编程接口)以列表形式保存和呈现,通过 HTTP POST
和 GET
动词分别通过通知方法(图 6)。
为了发送电子邮件,创建了一个后台处理队列。该队列利用了一个嵌入式内存数据库 Redis(2022),一个非关系型数据库,保证应用程序不会受到过程执行期间可能发生的故障或瓶颈的影响。
至于附加到帖子的评论,它们保存在分布式非关系型 MongoDB(2022)数据库中。选择该数据库是因为其在维护非关系型数据和生命周期变化较少方面的高性能。其结构基于面向文档的写入,这有助于开发人员和分析人员轻松理解信息,从而在软件构建的敏捷阶段提高生产力(图 6)。
在主屏幕上,单击“更多”按钮时,有仅筛选帖子或显示所有可用出版物的选项(图 3)。这两种方法都与这些过滤器相关联,并负责调用 API,基于 HTTP GET
动词。
从这个屏幕,还可以选择“新帖子”(图 3),用户可以在其中描述他正在寻找的宠物或他找到的宠物。此外,用户可以拍摄照片或添加手机设备上已有的照片,以更轻松地识别动物。
负责应用程序和 Web 服务之间交互的方法基于 HTTP POST
动词。在此过程中,数据存储在 PostgreSQL (2022) 关系型 DBMS 中,该 DBMS 是目前最先进、最受欢迎的开源数据库系统之一。
通过筛选帖子本身(图 5.a),可以将帖子的状态从“寻找中”更改为“已找到”。操作完成后,帖子将不再向其他用户显示;它仍然保留在数据库记录中,但功能上是不可见的。负责此功能的接口基于 HTTP PUT
动词,并且只有帖子的作者才有权限更改帖子的状态周期。
在菜单选项“我的个人资料”中,可以看到登录用户的个人数据(图 5.b)。在此功能选项中,用户可以更改其基本信息,例如密码和显示名称。用户还可以在此选项中添加或更改个人资料照片。在此菜单和屏幕中,用户还可以找到退出应用程序的选项(图 5.c),下次访问系统时需要重新登录才能重新访问应用程序的功能。
| | |
技术展示
对于所有基本系统操作,用户或帖子的操作数据都永久且安全地存储在 PostgreSQL 关系型数据库中。
本项目开发的屏幕基于最佳用户体验,并努力观察用户的最大需求、困难和愿望。因此,屏幕的视觉标识基于简单的图示,易于理解和操作。
所有这些呈现的功能(如图 5 所示)都仅基于应用程序的目的,确保用户不会迷失方向,并能很好地与界面互动。图标和信息的颜色和布局选择旨在确保清晰的界面,避免视觉污染和过载,基于愉快且吸引人的颜色,并始终寻求使用符合最流行社交网络标准的现代组件。
API 开发使用开源 Express.js
框架完成,该框架基于 JavaScript 语言和 Node.js。Node.js 允许在服务器端运行 JavaScript 语言,而 JavaScript 语言则以其在客户端的使用而闻名。除用户注册和登录外,所有应用程序路由都受保护,只能通过 JWT 认证令牌(JSON Web Token)访问,该令牌将在用户身份验证后提供。
为了数据持久化,使用了 ORM(对象关系映射)Sequelize 来与 PostgreSQL 通信。除了便于将来交换数据库之外,此 ORM 几乎完全消除了 SQL 查询的使用,因为它允许创建和查询独立于所使用的关系型数据库。
为了与 MongoDB 通信,还使用了 ORM Mongoose,它是原生 MongoDB 驱动程序的抽象。为了创建电子邮件队列,使用了非关系型内存数据库 Redis
来存储该任务所需的所有信息。此操作在后台执行,以免干扰其他系统处理。为了跟踪这些队列执行中可能出现的错误,使用了 Senty.io,这是一个开源的全栈错误跟踪系统,支持各种原生的服务器、浏览器、桌面和移动语言和框架。实施后,可以通过该功能提供的门户轻松跟踪所有错误。
为了简化这些众多工具的实现,使用了 Docker。它是一个软件平台,可简化应用程序的构建、运行、管理和分发过程。它允许创建独立且隔离的环境来启动和部署应用程序。这些环境称为容器。Docker 速度快且跨平台,允许在任何系统上创建容器,并且配置后,即使更换计算机也无需重新安装其依赖项。Docker 使得将本地 API 迁移到云端变得容易,只需迁移使用的依赖项即可。用于托管 API 的服务商选择了 Digital Ocean,这是一家非常受欢迎的云托管专业公司,提供来自不同地理区域的云服务器。
2.2.3. 代码、项目和发布
- 应用程序源代码可在 github.com/Gracianno/animais-perdidos-mobile 获取。
- API 源代码可在 github.com/Gracianno/animais-perdidos-api 获取。
3. 结论
这项工作的开发使我在多个领域获得了知识,从移动应用程序界面的创建到 API 在云端的部署。所有这些获得的知识都促进了该应用程序的创建,该应用程序具有未来发展的潜力。在客户端和服务器端都使用 JavaScript 既有挑战性又令人愉快,这使得我对当今最主要的语言之一的掌握有所增加。
这项工作还促使我运用了在整个课程中学习到的许多概念,例如需求收集、数据库、编程、软件工程等。需要记住的是,该项目还突显了未来改进和创建新功能以提升最终用户体验的必要性。其中一点将是创建一个聊天系统,这将允许用户之间更快地互动,并使宠物更快被找到。
开发一个搜索和推广动物的应用程序非常有动力和有益,因为它将两个非常令人愉快的事情——宠物和编程——结合在一起。因此,在这项工作中获得的学习成果不会轻易被遗忘。
4. 参考资料
- Android Studio (2022)。下载适用于 Windows (x64) 的 Android Studio [在线]。网址:https://developer.android.com.cn/studio。访问于 2022 年。
- Buddy (2022)。DevOps 自动化平台 [在线]。网址:https://buddy.works。访问于 2022 年。
- Docker (2022)。Docker 官方网站 [在线]。网址:https://www.docker.com/。访问于 2022 年。
- Digital Ocean (2022)。官方网站 [在线]。网址:https://www.digitalocean.com/。访问于 2022 年。
- Expressjs (2022)。官方网站 [在线]。网址:https://express.js.cn/pt-br/。访问于 2022 年。
- Mongodb (2022),应用程序数据平台:非关系型数据库 Mongodb,通过 Atlas。访问于 2022 年 3 月。网址:https://mongodb.ac.cn/。
- Node.js (2022)。下载适用于 Windows (x64) 的 Node [在线]。网址:https://node.org.cn/en/。访问于 2022 年。
- PostgreSQL (2022)。官方网站 [在线]。网址:https://postgresql.ac.cn/。访问于 2022 年。
- Redis (2022),用于数据库、缓存、流引擎和消息代理的开源内存数据存储。访问于 2022 年 3 月。网址:https://redis.ac.cn/。
- Rockseat (2022)。官方网站 [在线]。网址:https://www.rocketseat.com.br/。访问于 2022 年。
- React Native (2022)。官方网站 [在线]。网址:https://reactnative.net.cn/。访问于 2022 年。
- Visual Studio Code (2022)。下载适用于 Windows (x64) 的 Visual Studio Code [在线]。网址:https://vscode.js.cn。访问于 2022 年。
历史
- 2022年5月11日 - 文档创建
- 2022年5月15日 - 文本修订
- 2022年5月17日 - 修订和验证
- 2022年5月19日 - 文档提交