当前位置: 首页 > news >正文

[MAUI 项目实战] 笔记App(一):程序设计

文章目录

    • 前言
    • 框架
    • 定义
    • 核心类
    • 项目地址

系列文章:

[MAUI 项目实战] 笔记App(一):程序设计
[MAUI 项目实战] 笔记App(二):数据库设计

前言

有人说现在记事类app这么多,市场这么卷,为什么还想做一个笔记类App?

一来,去年小孩刚出生,需要一个可以记录喂奶时间的app,发现市面上没有一款app能够在两步内简单记录一个时间,可能iOS可以通过备忘录配合捷径做到快速记录,但是安卓上就没有类似的app。

二是,自去年做的音乐播放器以来,很长一段时间我在博客上的XF,MAUI都是在介绍局部的功能,[MAUI 项目实战]专题也很长没更新了,这次通过笔记类App做一次完整项目,包括如何上架MAUI应用等内容一并更新了。

一开始用MAUI简单做了一个功能,就记录喂奶量 + 喂奶时间 + 提醒。后期逐步做成一个可以动态添加摘要片段的功能。取名为《凡事摘要》。

目前安卓版本已发布打包,并上架腾讯应用商城:凡事摘要,iOS版本的部分页面还有问题需要调试,最近比较忙,我会抽出时间继续完善。在这个时间点我决定把App所有的代码都放在GitHub上,方便大家学习。也欢迎有兴趣的小伙伴一起参与。

框架

使用Abp框架,我之前写过如何 将Abp移植进.NET MAUI项目,本项目也是按照这篇博文完成项目搭建。

这次的项目,主要通过原型和工厂模式建设基于模板的笔记内容。

没有使用过多的跨平台特性,如果需要了解更多MAUI跨平台知识,请参考之前音乐播放器系列文章。

定义

  • Note - 笔记,可以成整页打开的内容
  • NoteTemplate - 笔记模板,或称为场景,是可以快速创建笔记的模板
  • NoteSegment - 笔记片段,它是一个笔记(Note)的组成
  • NoteSegmentTemplate - 笔记片段模板,对应场景中可快速创建笔记片段的模板
  • NoteSegmentPayload - 笔记片段负载,存储具体笔记片段的内容
  • NoteSegmentService - 笔记片段服务类,为笔记片段,或笔记片段模板提供增删改等具体的业务逻辑
  • NoteSegmentServiceFactory - 笔记片段服务工厂,为笔记片段服务类提供工厂方法

核心类

INoteSegment:它是笔记片段的抽象类,模板类NoteSegmentTemplate和笔记片段类NoteSegment都实现了INoteSegment

在这里插入图片描述

它包含了笔记片段的属性,如标题、颜色、图标、是否隐藏、是否可删除、排序、状态、类型等。同时它关联一个笔记片段负载类INoteSegmentPayload

public interface INoteSegment
{string Color { get; set; }string Desc { get; set; }string Icon { get; set; }bool IsHidden { get; set; }bool IsRemovable { get; set; }int Rank { get; set; }string Status { get; set; }string Title { get; set; }string Type { get; set; }INoteSegmentPayload GetNoteSegmentPayload(string key);INoteSegmentPayload GetOrSetNoteSegmentPayload(string key, INoteSegmentPayload noteSegmentPayload);void SetNoteSegmentPayload(INoteSegmentPayload noteSegmentPayload);
}

INoteSegementService:凡事摘要拥有不同的笔记类型,如:时间戳片段,文本片段,文件片段等,App中可以通过添加片段按钮查看所有类型。

在这里插入图片描述

这些片段通过片段服务类(NoteSegementService)来描述该如何存储,使用Payload中的数据。

不同的片段类型,通过不同的片段服务类来实现。比如,在时间戳片段中,我们要存储当前时间和计算倒计时,而文件片段中,我们要存储文件路径,文件名,文件大小,文件类型等信息。

这些都是通过片段服务类来实现的。

在这里插入图片描述

具体类型如下:

类型描述
DateTimeSegmentService时间戳片段服务类
KeyValueSegmentService数值片段服务类
FileSegmentService文件片段服务类
TextSegmentService文本片段服务类
TodoSegmentService待办片段服务类
WeatherSegmentService天气片段服务类
LocationSegmentService地点片段服务类
TimerSegmentService闹钟片段服务类
ContactSegmentService联系人片段服务类
VoiceSegmentService录音片段服务类
MediaSegmentService媒体片段服务类
ScriptSegmentService绘制片段服务类
DocumentSegmentService文件片段服务类

片段服务类包含了一个INoteSegment,它是当前的笔记片段对象

在这里插入图片描述

INoteSegmentServiceFactory:

片段服务类的工厂类,除此之外还有一个INoteSegmentTemplateServiceFactory,他们都是根据笔记片段,或者笔记模板中的片段类型创建对应的片段服务类。

在这里插入图片描述

用于笔记的片段服务类的工厂类:

public interface INoteSegmentServiceFactory: ISingletonDependency
{INoteSegmentService GetNoteSegmentService(NoteSegment noteSegment);
}

用于笔记模板的片段服务类的工厂类

public interface INoteSegmentTemplateServiceFactory: ISingletonDependency
{INoteSegmentService GetNoteSegmentService(NoteSegmentTemplate noteSegmentTemplate);
}

NoteSegmentService作为笔记片段服务的基类,它继承了ViewModelBase,实际上服务基类是各笔记片段视图层的ViewModel,视图界面元素通过绑定服务类中的属性来显示或更新数据。

在这里插入图片描述

每一种服务类都对应的一个视图。渲染时,Xaml通过NoteSegmentDataTemplateSelector模板选择器来选择对应的视图。有关界面部分将在另一篇文章介绍。

项目地址

GitHub:MatoProductivity

http://www.lryc.cn/news/402634.html

相关文章:

  • VisualRules-Web案例展示(一)
  • 使用Docker 实现 MySQL 循环复制(三)
  • Spring如何管理Mapper
  • NFS存储、API资源对象StorageClass、Ceph存储-搭建ceph集群和Ceph存储-在k8s里使用ceph(2024-07-16)
  • 「Vue组件化」封装i18n国际化
  • 【Git远程操作】理解分布式管理 | 创建远程仓库
  • OJ-0718
  • python抓包 -- 用wireshark抓包、解析--scapy、PyShark
  • uni-app开发日志:unicloud使用时遇到的问题解决汇总(不断补充)
  • 插入排序算法详解
  • parallel 详细解析 Java 8 Stream API 中的 parallel 方法
  • 不同业务场景下通过mars3d实现绕点旋转效果
  • 重塑水利未来:智慧水利解决方案的探索与实践,从物联网、大数据到人工智能,科技如何赋能水利行业,实现智慧化管理与决策
  • IO、进程、线程03
  • 算法力扣刷题记录 五十二【617.合并二叉树】
  • Java中的ArrayList和LinkedList有什么区别?
  • Linux C++ 058-设计模式之解释器模式
  • MDK5没有DeviceName
  • 在LabVIEW中实现图像矫正
  • Apache httpd-vhosts.conf 配置详解(附Demo)
  • 活动回顾 | AutoMQ 联合 GreptimeDB 共同探讨新能源汽车数据基础设施
  • 格式工厂转换视频分辨率
  • ReAct 大模型提示框架
  • JavaEE:Lombok工具包的使用以及EditStarter插件的安装
  • 基于纹理和统计图像特征集成的计算机辅助乳腺癌检测
  • Java基础 - 简介和配置环境变量
  • 水域救援装备的详细简介_鼎跃安全
  • 二、BIO、NIO、直接内存与零拷贝
  • 生成式AI的发展方向:Chat vs Agent
  • 吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.9-2.10