news 2026/6/10 19:45:38

腾讯菁英班跨端日历应用产品报告

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
腾讯菁英班跨端日历应用产品报告

仓库地址

https://github.com/ceilf6/DayMate

title: DayMate 产品报告
author: 王景宏
date: \today
pdf-engine: xelatex
documentclass: ctexart
classoption:

  • fontset=none

mainfont: Songti SC
monofont: Hiragino Sans GB

fontsize: 12pt
geometry:

  • margin=2.5cm
    linestretch: 1.5
    toc: true
    toc-depth: 3
    numbersections: true

DayMate 产品报告

日期:2025-12-17

DayMate 是一款跨平台日程管理产品,目标是在 Android 与 React Native 两端提供一致的“查看日历、创建/管理事件、提醒通知”等核心能力,并以可演进的共享业务层(shared/core)承载跨端一致的领域模型与仓库接口。


① 产品功能介绍

1. 日历与日程浏览

  • 月视图日历:按天选择日期,查看当天日程列表。
  • 日程列表:展示当天所有事件的标题、时间范围、备注等信息。

2. 事件管理

  • 新建事件:支持填写标题、开始/结束时间、全天、备注/描述、地点、分类、优先级、状态等(Android 端更完整)。
  • 编辑事件:更新事件信息后,自动更新提醒计划。
  • 删除事件:删除事件并取消对应提醒。

3. 提醒通知

  • 支持“无提醒 / 5 分钟前 / 15 分钟前 / 30 分钟前 / 1 小时前 / 1 天前”等常见提醒策略。
  • 事件到达提醒时间后,向用户发送系统通知,并支持点击通知跳转回应用。

4. 本地数据持久化

  • Android:基于 Room 的本地数据库存储事件,支持按时间范围查询、分类筛选、搜索等。
  • React Native:基于 AsyncStorage 的轻量存储(适合作为 MVP 与原型实现,可按需演进为 SQLite/MMKV)。

② 程序概要设计

本节给出模块划分、关键数据结构与主要业务流程。

1. 模块划分

Android 应用(apps/android-calendar)

  • UI:日历视图、事件详情/新增编辑弹窗。
  • ViewModel:承载 UI 状态与业务编排(新增/编辑/删除事件后触发提醒重算)。
  • Repository + DAO:负责事件的增删改查。
  • ReminderManager + Worker:负责提醒调度与通知展示。

React Native 应用(apps/rn-calendar)

  • HomeScreen:月历选择 + 当天日程列表。
  • EventStorage:事件持久化与查询。
  • 事件模型:CalendarEvent(含 date、title、startTime、endTime、notes 等)。

共享业务层(shared/core)

  • 领域模型:CalendarEvent。
  • 仓库接口:CalendarRepository(create/update/delete/get/search/observe)。
  • 目标:提供跨平台一致的业务约束与模型定义,允许未来通过 Native Module 或 KMP 方式让 RN 复用核心逻辑。

2. 关键数据结构(概述)

Android:Event(Room Entity)

  • 核心字段:title、startTime、endTime、allDay、reminderMinutes、category、priority、status 等。

React Native:CalendarEvent(TypeScript)

  • 核心字段:id、date(yyyy-MM-dd)、title、startTime(HH:mm 可选)、endTime(HH:mm 可选)、notes(可选)。

3. 主要业务流程(概述)

流程 A:新增事件(Android)

  1. 用户在新增/编辑界面填写信息并保存。
  2. ViewModel 写入数据库(insert/update)。
  3. 保存成功后调用 ReminderManager:
    • 取消旧提醒(若有)
    • 根据 startTime 与 reminderMinutes 计算提醒触发时间
    • 使用 WorkManager 安排 OneTimeWorkRequest

流程 B:新增日程(React Native)

  1. 用户在 HomeScreen 选择日期。
  2. 点击“添加日程”打开表单,填写标题/时间/备注并保存。
  3. EventStorage 写入 AsyncStorage。
  4. HomeScreen 刷新内存态并更新日历标记点与列表展示。

③ 软件架构图

采用 Mermaid 展示 DayMate 的跨端与模块分层关系。

flowchart TB subgraph Client[DayMate 客户端] direction LR subgraph AND[Android: apps/android-calendar] direction TB AND_UI[UI Calendar/Dialogs] --> AND_VM[ViewModel] AND_VM --> AND_REPO[Repository] AND_REPO --> AND_DAO[Room DAO] AND_DAO --> AND_DB[(Room DB)] AND_VM --> AND_REM[ReminderManager] AND_REM --> AND_WM[WorkManager] AND_WM --> AND_WORKER[ReminderWorker] AND_WORKER --> AND_NOTIF[NotificationService] end subgraph RN[React Native: apps/rn-calendar] direction TB RN_UI[HomeScreen Calendar UI] --> RN_STORE[EventStorage] RN_STORE --> RN_AS[(AsyncStorage)] end subgraph CORE[shared/core] direction TB CORE_MODEL[Domain Models CalendarEvent] --> CORE_REPO[CalendarRepository Interface] end AND_REPO -. 参考一致性 .-> CORE_REPO RN_STORE -. 参考一致性 .-> CORE_MODEL end

④ 技术亮点及其实现原理

1) 提醒调度:基于 WorkManager 的可靠通知

亮点

  • 使用 WorkManager 统一处理延迟任务与系统约束(电量、后台限制等),相对直接使用 AlarmManager 更易维护。
  • 调度时先取消旧任务,避免重复提醒。

实现原理(关键点)

  • 计算提醒触发时间:
    • T r e m i n d = T s t a r t − r e m i n d e r M i n u t e s T_{remind} = T_{start} - reminderMinutesTremind=TstartreminderMinutes
  • 计算延迟:
    • d e l a y = T r e m i n d − n o w delay = T_{remind} - nowdelay=Tremindnow
  • 为避免“分钟级向下取整导致 delay=0 立刻触发”的问题,延迟使用毫秒级:
    • Duration.between(now, reminderTime).toMillis()+TimeUnit.MILLISECONDS

2) Android 本地存储:Room + 索引优化查询

亮点

  • 对 startTime/endTime/category/reminderMinutes 建索引,提升按时间范围、分类、提醒事件等查询性能。

实现原理

  • Room 基于 SQLite,索引可减少查询扫描范围。
  • DAO 以 SQL/注解方式表达查询;Repository 提供更稳定的业务接口。

3) 跨端共享业务层的演进路径(shared/core)

亮点

  • shared/core 提供统一领域模型与仓库接口(CalendarRepository),为未来“跨端一致业务规则”和“复用核心逻辑”预留结构。

实现原理

  • 以接口定义跨平台能力边界:获取某天/范围事件、创建/更新/删除、按条件搜索、观察事件变化等。
  • 当前 Android 侧可对接实际存储实现;React Native 侧可先独立实现,后续可通过 Native Module / KMP 等方式逐步复用。

4) React Native 端 MVP:AsyncStorage 快速闭环

亮点

  • 使用 AsyncStorage 快速实现“新增日程-持久化-刷新展示”的最小闭环,迭代成本低。

实现原理

  • 将事件按 date 进行分组存储(Key-Value + JSON):
    • Record<date, CalendarEvent[]>
  • 保存后同步更新内存态,驱动 UI 立即刷新,并用“日期标记点”提示有日程的日期。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 18:05:03

Kotaemon珠宝定制咨询服务流程

Kotaemon珠宝定制咨询服务流程 在高端消费品领域&#xff0c;尤其是像珠宝定制这样的高价值、高情感投入的服务场景中&#xff0c;客户期待的早已不止是一句“您好&#xff0c;请问有什么可以帮您&#xff1f;”他们希望获得专业、连贯且富有温度的个性化建议——从材质选择到宝…

作者头像 李华
网站建设 2026/6/10 14:09:22

leetcode2500 删除每行的最大值(Java)

转换问题的核心思路通过 “问题等价转换” 简化操作&#xff0c;避免复杂的数组删除逻辑&#xff1a;“每行取最大值→比较得本轮最大值” 的转换 将 “每次找出每行当前最大值&#xff0c;再…

作者头像 李华
网站建设 2026/6/10 16:51:29

用Kotaemon打造政务智能问答平台的技术挑战与突破

用Kotaemon打造政务智能问答平台的技术挑战与突破 在数字政府建设提速的今天&#xff0c;公众对政务服务的期待早已从“能查到”转向“能办成”。打开某市政务服务网站&#xff0c;输入“新生儿落户”&#xff0c;页面跳出十几条政策文件链接——这种体验并不罕见。用户需要自行…

作者头像 李华
网站建设 2026/6/10 16:10:50

无人机测绘技术专业:课程体系与就业方向的对应关系

无人机测绘技术专业&#xff1a;课程体系与就业方向的对应关系无人机测绘技术专业的课程体系与就业方向呈现“精准适配”的逻辑——课程模块围绕就业岗位的核心能力需求设计&#xff0c;职业本科独立专业以“应用落地能力”为纽带&#xff0c;普通本科相关方向以“研发设计能力…

作者头像 李华
网站建设 2026/6/9 18:45:18

如何用EmotiVoice实现零样本声音克隆?技术深度解析

如何用 EmotiVoice 实现零样本声音克隆&#xff1f;技术深度解析 在智能语音日益渗透日常生活的今天&#xff0c;我们早已不满足于“机器能说话”这一基本能力。用户期待的是更具个性、更有情感的语音交互体验——比如让 AI 用亲人的声音讲故事&#xff0c;或让游戏角色以愤怒的…

作者头像 李华
网站建设 2026/6/10 14:43:31

EmotiVoice情感控制参数详解:精细调节语音情绪变化

EmotiVoice情感控制参数详解&#xff1a;精细调节语音情绪变化 在虚拟主播深情演绎一首原创曲目&#xff0c;或游戏角色因剧情转折怒吼“你背叛了我&#xff01;”的瞬间&#xff0c;我们早已不再满足于机械朗读式的语音输出。如今&#xff0c;用户期待的是有温度、有情绪、能共…

作者头像 李华