主进程主要对象类图
本文依据当前 src/main.ts 和 src/main/ 实现,展示主要对象、职责及生命周期关系。
省略工具函数、数据传输类型和大部分私有方法,不包含渲染进程对象和托管同步服务端。
1. 入口与共享服务
src/main.ts 是装配入口,没有对应的应用类。
图中的 MainProcess 代表入口模块,WindowSession 是工厂返回的闭包对象,IpcHandlers 代表注册函数。
这些节点不是源码中额外存在的类。
classDiagram
direction TB
class MainProcess {
<<module>>
appReady()
beforeQuit()
}
class WindowSession {
<<factoryObject>>
createAppWindow()
getWorkspaceManager()
getWorkspaceTargets()
saveBeforeQuit()
}
class BrowserWindow {
<<Electron>>
}
class WorkspaceManager
class WorkspaceStateStore
class IpcHandlers {
<<registrationFunctions>>
registerIpcHandlers()
registerWorkspaceHandlers()
registerSyncHandlers()
}
class FileAccess {
grantDocument()
assertDocument()
}
class DocumentWatcher {
watch()
ignoreOwnWrite()
cancelOwnWrite()
}
class RecoveryStore {
load()
save()
}
class DeepSeekService {
saveKey()
ask()
}
class CommandHistoryStore {
read()
update()
}
class AppLog {
flush()
}
MainProcess *-- WindowSession : 创建
MainProcess --> WorkspaceStateStore : 初始化单例
MainProcess *-- FileAccess
MainProcess *-- DocumentWatcher
MainProcess *-- RecoveryStore
MainProcess *-- DeepSeekService
MainProcess *-- CommandHistoryStore
MainProcess *-- AppLog : installAppLogging
MainProcess ..> IpcHandlers : 注入服务并注册
WindowSession "1" *-- "0..*" BrowserWindow : 笔记窗口
WindowSession "1" *-- "0..*" WorkspaceManager : 每窗口创建
BrowserWindow "1" -- "1" WorkspaceManager : 笔记窗口映射
WindowSession ..> WorkspaceStateStore : 回调保存打开列表
IpcHandlers ..> WindowSession : 回调定位请求窗口
IpcHandlers ..> FileAccess : 文档授权检查
IpcHandlers ..> DocumentWatcher : 监听与自身写入抑制
IpcHandlers ..> RecoveryStore : 草稿保存与同步保护
IpcHandlers ..> WorkspaceManager : 文件和笔记库操作
- 每个笔记主窗口拥有一个
WorkspaceManager;未打开笔记库时,其rootPath为null。 FileAccess、DocumentWatcher、RecoveryStore和状态存储在进程内共享。- 文档变化由
DocumentWatcher回调交给入口,更新大纲并向窗口发送files:external-change。 - 退出时保存窗口会话、等待剪贴板收集任务并刷新日志;窗口关闭时释放对应笔记库资源。
2. 笔记库与本地状态
classDiagram
direction LR
class WorkspaceManager {
rootPath
repositoryId
filePaths
open()
close()
scan()
rename()
move()
search()
}
class WorkspaceStateStore {
<<singleton>>
initialize()
getInstance()
loadFromDisk()
publicState()
setOpenWorkspaces()
}
class RepositoryUiStateStore {
stateFor()
remove()
}
class RepositoryFavoriteStore {
favorites()
}
class ManagedPathStore
class OutlineIndexStore
class WorkspaceLock {
<<interface>>
}
class WorkspaceQueryMethods {
<<methodGroup>>
}
WorkspaceManager --> WorkspaceStateStore : 共享应用状态
WorkspaceManager --> RepositoryUiStateStore : 注入的界面状态存储
WorkspaceManager --> RepositoryFavoriteStore : 注入的收藏存储
WorkspaceManager *-- "0..1" ManagedPathStore : 打开笔记库时创建
WorkspaceManager *-- "0..1" OutlineIndexStore : 打开笔记库时创建
WorkspaceManager --> "0..1" WorkspaceLock : 获取与释放独占锁
WorkspaceManager ..> WorkspaceQueryMethods : 原型方法装配
WorkspaceStateStore管理全局设置、最近项目和窗口恢复所需的笔记库列表。RepositoryUiStateStore、RepositoryFavoriteStore由入口创建并共享,按笔记库隔离其数据。ManagedPathStore记录已管理路径,OutlineIndexStore管理笔记库标题索引。WorkspaceQueryMethods的方法复制到WorkspaceManager.prototype,不是继承或另建服务实例。
3. 同步对象
classDiagram
direction TB
class SyncHandlers {
<<registrationFunction>>
registerSyncHandlers()
}
class SyncManager {
hostedClients
login()
logout()
overview()
hostedClient()
}
class AutoSyncScheduler {
configure()
tick()
stop()
}
class PreferenceSync {
tick()
stop()
}
class FavoriteSync {
tick()
stop()
}
class DirtyDocumentRegistry {
update()
pathsForRoot()
delete()
}
class SyncConfigStore
class SyncCredentialStore
class SyncDeviceIdentityStore
class SyncClient {
rootPath
libraryId
deviceId
initialize()
}
class SyncRemote {
<<interface>>
applyOperation()
pull()
historyPage()
}
class HostedSyncRemote
class SyncStateStore
class SyncHistoryStore
class SyncLogStore
class ManagedPathStore
SyncHandlers ..> SyncManager : 按需创建并缓存
SyncHandlers ..> AutoSyncScheduler : 创建与停止
SyncHandlers ..> PreferenceSync : 配置存在时创建
SyncHandlers ..> FavoriteSync : 收藏存储存在时创建
SyncHandlers --> DirtyDocumentRegistry : 共享登记表与受保护路径
AutoSyncScheduler ..> SyncManager : 注入回调执行同步
PreferenceSync ..> SyncManager : 回调获取远端上下文
FavoriteSync ..> SyncManager : 回调获取远端上下文
SyncManager *-- SyncConfigStore
SyncManager *-- SyncCredentialStore
SyncManager *-- SyncDeviceIdentityStore
SyncManager "1" *-- "0..*" SyncClient : 按账户和笔记库缓存
SyncManager ..> HostedSyncRemote : 创建远端对象
SyncClient --> "0..1" SyncRemote : remote
HostedSyncRemote ..|> SyncRemote : 结构类型契约
SyncClient *-- SyncStateStore
SyncClient *-- SyncHistoryStore
SyncClient *-- ManagedPathStore
SyncStateStore *-- SyncLogStore
SyncManager是应用侧同步入口,首次需要服务时加载;设置或收藏的启动同步也可能触发加载。AutoSyncScheduler通过注入回调选择当前窗口及后台笔记库,不直接持有管理器字段。PreferenceSync同步用户设置和快捷键,FavoriteSync同步收藏。- 两者通过回调获取远端上下文,不通过文档
SyncClient传输数据。
- 两者通过回调获取远端上下文,不通过文档
DirtyDocumentRegistry汇总窗口内未保存路径;同步处理器还读取RecoveryStore的恢复草稿。- 两种路径共同构成自动同步写盘前的保护范围。
SyncClient持有单个笔记库的同步状态、历史缓存、已管理路径和远端接口。- 文件、传输、合并、恢复、自动同步等方法组在
client/index.ts装配到原型。 SyncManagerLibraryMethods同样通过原型装配扩展SyncManager,不是继承关系。
- 文件、传输、合并、恢复、自动同步等方法组在
- 两处
ManagedPathStore是不同实例,访问同一笔记库的已管理路径清单。
4. 导出与辅助能力
classDiagram
direction LR
class PublishExporter {
publish()
publishAll()
remove()
}
class DocumentExporter {
generate()
write()
batch()
}
class PublishRenderer {
render()
close()
}
class ClipboardCollector {
start()
pause()
stop()
}
class ClipboardHandlers {
<<registrationFunction>>
registerClipboardCollector()
}
class VoiceHandlers {
<<registrationFunction>>
registerVoiceHandlers()
}
class VoiceService
class VoiceRecordings
PublishExporter ..> PublishRenderer : renderFragment 回调
DocumentExporter --> PublishRenderer : 注入 renderer
ClipboardHandlers ..> ClipboardCollector : 创建并桥接 IPC
VoiceHandlers ..> VoiceService : 按需创建
VoiceHandlers ..> VoiceRecordings : 按需创建
PublishExporter输出静态笔记页面,DocumentExporter输出 PDF / DOCX,共用发布渲染能力。- 剪贴板收集器在进程内共享,通过注册层连接文件授权、窗口和文档监听服务。
- 语音处理器由通用 IPC 注册入口加载,首次相关操作时才创建服务或录音存储。
- 片段窗口、快速命令窗口、全局热键及和弦输入使用工厂控制器,未展开其内部对象。
5. 图例与源码入口
*--:创建并管理生命周期。-->:持有或使用关联对象。..>:调用、创建或通过回调依赖;不表示持有实例字段。..|>:实现接口契约;本项目的远端接口采用 TypeScript 结构类型。- 数字标注为对象数量;未标数量的关系不表达严格基数。
- 图中方法省略参数、返回类型和可见性,仅作为源码定位提示。
| 对象或模块 | 源码 |
|---|---|
| 入口装配 | main.ts |
| 窗口与笔记库映射 | window-session.ts |
| 笔记库与查询装配 | workspace-manager.ts |
| 全局状态 | workspace-state-store.ts |
| 通用 IPC 与语音入口 | ipc-handlers.ts |
| 笔记库 IPC | workspace-handlers.ts |
| 同步装配与自动任务 | sync-handlers.ts |
| 同步管理器 | sync/manager.ts |
| 同步客户端与方法组装配 | sync/client/index.ts |
| 客户端状态与历史初始化 | sync/client/local.ts |
| 静态发布 | publish-export.ts |
| 文档导出 | document-export.ts |
| 共享渲染器 | publish-renderer.ts |
| 剪贴板收集装配 | clipboard-collector-ipc.ts |
| 语音服务装配 | voice-handlers.ts |
