做app和做網(wǎng)站區(qū)別常用網(wǎng)站推廣方法及資源
文章目錄
- 前言
- 框架
- 定義
- 核心類
- 項目地址
系列文章:
[MAUI 項目實戰(zhàn)] 筆記App(一):程序設計
[MAUI 項目實戰(zhàn)] 筆記App(二):數(shù)據(jù)庫設計
前言
有人說現(xiàn)在記事類app這么多,市場這么卷,為什么還想做一個筆記類App?
一來,去年小孩剛出生,需要一個可以記錄喂奶時間的app,發(fā)現(xiàn)市面上沒有一款app能夠在兩步內(nèi)簡單記錄一個時間,可能iOS可以通過備忘錄配合捷徑做到快速記錄,但是安卓上就沒有類似的app。
二是,自去年做的音樂播放器以來,很長一段時間我在博客上的XF,MAUI都是在介紹局部的功能,[MAUI 項目實戰(zhàn)]專題也很長沒更新了,這次通過筆記類App做一次完整項目,包括如何上架MAUI應用等內(nèi)容一并更新了。
一開始用MAUI簡單做了一個功能,就記錄喂奶量 + 喂奶時間 + 提醒。后期逐步做成一個可以動態(tài)添加摘要片段的功能。取名為《凡事摘要》。
目前安卓版本已發(fā)布打包,并上架騰訊應用商城:凡事摘要,iOS版本的部分頁面還有問題需要調(diào)試,最近比較忙,我會抽出時間繼續(xù)完善。在這個時間點我決定把App所有的代碼都放在GitHub上,方便大家學習。也歡迎有興趣的小伙伴一起參與。
框架
使用Abp框架,我之前寫過如何 將Abp移植進.NET MAUI項目,本項目也是按照這篇博文完成項目搭建。
這次的項目,主要通過原型和工廠模式建設基于模板的筆記內(nèi)容。
沒有使用過多的跨平臺特性,如果需要了解更多MAUI跨平臺知識,請參考之前音樂播放器系列文章。
定義
- Note - 筆記,可以成整頁打開的內(nèi)容
- NoteTemplate - 筆記模板,或稱為場景,是可以快速創(chuàng)建筆記的模板
- NoteSegment - 筆記片段,它是一個筆記(Note)的組成
- NoteSegmentTemplate - 筆記片段模板,對應場景中可快速創(chuàng)建筆記片段的模板
- NoteSegmentPayload - 筆記片段負載,存儲具體筆記片段的內(nèi)容
- NoteSegmentService - 筆記片段服務類,為筆記片段,或筆記片段模板提供增刪改等具體的業(yè)務邏輯
- NoteSegmentServiceFactory - 筆記片段服務工廠,為筆記片段服務類提供工廠方法
核心類
INoteSegment:它是筆記片段的抽象類,模板類NoteSegmentTemplate和筆記片段類NoteSegment都實現(xiàn)了INoteSegment
它包含了筆記片段的屬性,如標題、顏色、圖標、是否隱藏、是否可刪除、排序、狀態(tài)、類型等。同時它關聯(lián)一個筆記片段負載類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中的數(shù)據(jù)。
不同的片段類型,通過不同的片段服務類來實現(xiàn)。比如,在時間戳片段中,我們要存儲當前時間和計算倒計時,而文件片段中,我們要存儲文件路徑,文件名,文件大小,文件類型等信息。
這些都是通過片段服務類來實現(xiàn)的。
具體類型如下:
類型 | 描述 |
---|---|
DateTimeSegmentService | 時間戳片段服務類 |
KeyValueSegmentService | 數(shù)值片段服務類 |
FileSegmentService | 文件片段服務類 |
TextSegmentService | 文本片段服務類 |
TodoSegmentService | 待辦片段服務類 |
WeatherSegmentService | 天氣片段服務類 |
LocationSegmentService | 地點片段服務類 |
TimerSegmentService | 鬧鐘片段服務類 |
ContactSegmentService | 聯(lián)系人片段服務類 |
VoiceSegmentService | 錄音片段服務類 |
MediaSegmentService | 媒體片段服務類 |
ScriptSegmentService | 繪制片段服務類 |
DocumentSegmentService | 文件片段服務類 |
片段服務類包含了一個INoteSegment,它是當前的筆記片段對象
INoteSegmentServiceFactory:
片段服務類的工廠類,除此之外還有一個INoteSegmentTemplateServiceFactory,他們都是根據(jù)筆記片段,或者筆記模板中的片段類型創(chuàng)建對應的片段服務類。
用于筆記的片段服務類的工廠類:
public interface INoteSegmentServiceFactory: ISingletonDependency
{INoteSegmentService GetNoteSegmentService(NoteSegment noteSegment);
}
用于筆記模板的片段服務類的工廠類
public interface INoteSegmentTemplateServiceFactory: ISingletonDependency
{INoteSegmentService GetNoteSegmentService(NoteSegmentTemplate noteSegmentTemplate);
}
NoteSegmentService作為筆記片段服務的基類,它繼承了ViewModelBase
,實際上服務基類是各筆記片段視圖層的ViewModel,視圖界面元素通過綁定服務類中的屬性來顯示或更新數(shù)據(jù)。
每一種服務類都對應的一個視圖。渲染時,Xaml通過NoteSegmentDataTemplateSelector模板選擇器來選擇對應的視圖。有關界面部分將在另一篇文章介紹。
項目地址
GitHub:MatoProductivity