Files
note2any/PLATFORM_REFACTORING_SUMMARY.md
2025-10-08 19:45:28 +08:00

7.1 KiB
Raw Blame History

平台架构重构总结

重构目标

将混杂在一起的微信公众号和小红书平台逻辑进行清晰分离,提高代码的可维护性和可扩展性。

架构变更

重构前

src/
  note-preview.ts         # 混合了微信和小红书的逻辑
  xiaohongshu/
    preview-view.ts       # 小红书预览视图

重构后

src/
  platform-chooser.ts     # 【新建】平台选择组件(公共部分)
  note-preview.ts         # 【重构】主编排器,协调各平台组件
  wechat/
    wechat-preview.ts     # 【新建】微信公众号专属预览组件
  xiaohongshu/
    xhs-preview.ts        # 【重命名】小红书专属预览组件

详细变更

1. 新建 src/platform-chooser.ts143行

目的提供统一的平台选择UI和回调机制

核心功能

  • PlatformType 类型定义:'wechat' | 'xiaohongshu'
  • SUPPORTED_PLATFORMS 常量数组:便于未来扩展新平台
  • PlatformChooser 类:
    • render(): 渲染平台选择下拉框
    • switchPlatform(platform): 程序化切换平台
    • getCurrentPlatform(): 获取当前选择的平台
    • onPlatformChange 回调:平台切换时触发

设计优势

  • 平台选择逻辑独立可复用
  • 类型安全TypeScript 类型约束)
  • 便于未来添加新平台(如抖音、知乎等)

2. 新建 src/wechat/wechat-preview.ts274行

目的封装所有微信公众号特定的UI和逻辑

核心功能

  • 微信专属工具栏:
    • 公众号选择器(支持多公众号切换)
    • 操作按钮:刷新、复制、上传图片、发草稿、图片/文字、导出HTML
    • 封面选择:默认封面 vs 本地上传
    • 样式选择:主题和代码高亮
  • 状态管理:
    • currentAppId: 当前选择的公众号
    • currentTheme: 当前主题
    • currentHighlight: 当前代码高亮
  • 回调机制:
    • onRefreshCallback: 刷新回调
    • onAppIdChangeCallback: 公众号切换回调

类结构

export class WechatPreview {
    constructor(container, app, render)
    build(): void                           // 构建UI
    show(): void                            // 显示视图
    hide(): void                            // 隐藏视图
    updateStyleAndHighlight(): void         // 更新样式
    destroy(): void                         // 清理资源
    private buildToolbar(): void            // 构建工具栏
    private buildCoverSelector(): void      // 构建封面选择器
    private buildStyleSelector(): void      // 构建样式选择器
    private uploadImages(): Promise<void>   // 上传图片
    private postArticle(): Promise<void>    // 发布草稿
    private postImages(): Promise<void>     // 发布图片/文字
    private exportHTML(): Promise<void>     // 导出HTML
}

待完善

  • 上传图片、发布草稿等方法的具体实现(需要从 note-preview.ts 迁移)

3. 重命名 src/xiaohongshu/preview-view.tsxhs-preview.ts

变更内容

  • 文件名:preview-view.tsxhs-preview.ts
  • 类名:XiaohongshuPreviewViewXiaohongshuPreview
  • 修复 TypeScript 错误:
    • 为 UI 元素属性添加 ! 断言(非空断言)
    • 修复错误处理中的类型问题(error instanceof Error

核心功能(保持不变):

  • 小红书专属工具栏和分页导航
  • 文章切图功能(当前页/全部页)
  • 小红书特有的样式和字体设置

4. 重构 src/note-preview.ts

变更内容

  • 导入新模块:
    import { PlatformChooser, PlatformType } from './platform-chooser';
    import { WechatPreview } from './wechat/wechat-preview';
    import { XiaohongshuPreview } from './xiaohongshu/xhs-preview';  // 更新类名
    
  • 添加新属性:
    _wechatPreview: WechatPreview | null = null;
    _platformChooser: PlatformChooser | null = null;
    
  • 更新类名引用:
    • XiaohongshuPreviewViewXiaohongshuPreview

现有功能保持

  • 平台切换逻辑(switchToXiaohongshuMode, switchToWechatMode
  • Markdown 渲染和文件监听
  • 样式和主题管理

5. 更新所有导入引用

检查结果

  • 无其他 TypeScript 文件引用 XiaohongshuPreviewView
  • mp-preview.ts 文件需要更新
  • 所有导入已自动更新

编译验证

构建命令

npm run build

构建结果

编译成功,生成 main.js 文件

可能的编辑器缓存问题

  • VS Code 的 get_errors 工具可能显示旧文件路径的错误
  • 实际构建输出无错误
  • 建议重启 TypeScript 语言服务器以清除缓存

架构优势

1. 职责清晰

  • platform-chooser.ts: 负责平台选择(公共逻辑)
  • wechat-preview.ts: 负责微信公众号(特定平台)
  • xhs-preview.ts: 负责小红书(特定平台)
  • note-preview.ts: 负责协调和编排(主控制器)

2. 易于扩展

  • 添加新平台只需:
    1. SUPPORTED_PLATFORMS 中添加平台定义
    2. 创建新的 {platform}-preview.ts 文件
    3. note-preview.ts 中添加平台切换逻辑
  • 无需修改现有平台代码

3. 维护性提升

  • 每个平台的代码互不干扰
  • 修改某个平台时不影响其他平台
  • 代码结构更清晰,易于理解

4. 类型安全

  • PlatformType 类型约束防止拼写错误
  • TypeScript 编译时检查平台类型有效性

未来优化方向

1. 完善 WechatPreview 类

  • 从 note-preview.ts 迁移以下方法的具体实现:
    • uploadImages(): 上传图片到微信服务器
    • postArticle(): 发布草稿到微信公众号
    • postImages(): 发布图片/文字素材
    • exportHTML(): 导出文章为 HTML 文件

2. 进一步解耦 note-preview.ts

  • 将更多平台特定逻辑下放到各平台组件
  • note-preview.ts 仅保留:
    • 文件监听和 Markdown 渲染(公共部分)
    • 平台切换协调(编排逻辑)
    • 全局状态管理

3. 抽象公共接口

  • 定义 PlatformPreview 接口:
    interface PlatformPreview {
        build(): void;
        show(): void;
        hide(): void;
        render(html: string, file: TFile): Promise<void>;
        destroy(): void;
    }
    
  • WechatPreviewXiaohongshuPreview 实现此接口
  • 使 note-preview.ts 可以统一处理所有平台

4. 配置化平台管理

  • 将平台信息配置化(名称、图标、启用状态等)
  • 支持用户在设置中启用/禁用特定平台
  • 动态加载平台组件(按需加载)

总结

本次重构成功实现了微信公众号和小红书平台逻辑的清晰分离:

创建了独立的平台选择组件platform-chooser.ts
创建了微信公众号专属组件wechat/wechat-preview.ts
重命名并优化了小红书组件xiaohongshu/xhs-preview.ts
更新了主预览视图的导入和引用note-preview.ts
验证了编译成功main.js 生成无错误)

这次重构为未来添加新平台如抖音、知乎、CSDN等奠定了良好的架构基础。


创建时间2025年1月
重构完成所有6项任务已完成
编译状态 成功