Bili.Uwp架构演进史:从初代版本到现代UI的蜕变

Bili.Uwp架构演进史:从初代版本到现代UI的蜕变

【免费下载链接】Bili.Uwp 适用于新系统UI的哔哩 【免费下载链接】Bili.Uwp 项目地址: https://gitcode.com/GitHub_Trending/bi/Bili.Uwp

Bili.Uwp作为哔哩哔哩的第三方UWP应用,历经多代架构迭代,从基础功能实现到现代UI设计,逐步构建起适配Windows 10/11的原生体验。本文将深入剖析其架构演进历程,展示从技术选型到模块设计的蜕变之路。

项目概述与技术选型

Bili.Uwp基于UWP(Universal Windows Platform)框架开发,是原生Windows应用,支持Windows 10/11桌面系统。项目采用分层架构设计,通过清晰的模块划分实现功能解耦。核心技术栈包括:

  • UI框架:XAML + C#,遵循MVVM模式
  • 依赖注入:自定义DI容器(DI.Container
  • 数据交互:REST API + gRPC(Models.gRPC
  • 本地存储:应用设置与缓存管理

项目结构采用经典的"基础设施-业务逻辑-表现层"三层架构,主要代码组织如下:

src/
├── Adapter/        // 数据适配层
├── App/            // 应用入口与UI
├── Lib/            // 核心服务与接口
├── Models/         // 数据模型定义
├── ViewModels/     // 视图模型
└── Workspace/      // 多窗口支持

初代架构:基础功能实现(2020-2021)

核心架构设计

初代版本聚焦基础功能实现,采用简单的分层架构:

应用入口点App.xaml.cs展示了早期初始化流程:

public App()
{
    InitializeComponent();
    DIFactory.RegisterAppRequiredServices();  // 依赖注入注册
    Suspending += OnSuspending;
    UnhandledException += OnUnhandledException;
    Locator.Instance.GetService<IAppToolkit>().InitializeTheme();
}

关键技术挑战

  1. 多设备适配:通过Package.appxmanifest定义设备兼容性
<TargetDeviceFamily Name="Windows.Universal" 
                   MinVersion="10.0.18362.0" 
                   MaxVersionTested="10.0.22000.0" />
  1. UI响应式设计:早期采用简单的VisualState管理不同尺寸设备的布局适配

  2. 数据交互:基础HTTP请求封装在HttpProvider中,实现与B站API的基础通信

初代版本奠定了项目基础架构,但在模块化程度和代码复用方面存在明显局限,UI组件与业务逻辑耦合度较高。

中期演进:模块化与MVVM架构(2021-2022)

架构升级重点

2021年起,项目启动架构重构,核心目标是实现:

  • 依赖注入容器化:开发DI.Container实现服务自动注册与解析
  • MVVM模式落地:分离视图与业务逻辑,引入ViewModels
  • 模块化设计:按功能拆分独立模块,如LivePgc等专项服务

关键模块设计

  1. 依赖注入系统

自定义DI容器Locator.cs实现服务定位:

public class Locator
{
    private static readonly Locator _instance = new Locator();
    public static Locator Instance => _instance;
    
    public T GetService<T>() where T : class
    {
        // 服务解析逻辑
    }
}
  1. 视图模型抽象

ViewModels.Interfaces定义基础VM接口:

public interface IInitializeViewModel
{
    Task InitializeAsync();
    bool IsInitialized { get; }
}

public interface IIncrementalViewModel : IInitializeViewModel
{
    bool HasMoreItems { get; }
    Task LoadMoreAsync();
}
  1. 数据适配层

Adapter层实现API数据到本地模型的转换:

现代架构:UI/UX革新与性能优化(2022-至今)

UI架构升级

随着Windows 11发布,项目启动UI现代化改造,重点包括:

  1. 设计语言更新:采用Fluent Design System,实现毛玻璃效果、动态色彩等现代UI元素

  2. 多窗口支持Workspace模块实现多实例与窗口管理:

// MainWindow.xaml.cs
public sealed partial class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();
        ExtendsContentIntoTitleBar = true;
        SetTitleBar(AppTitleBar);
    }
}
  1. 控件库重构Controls目录包含丰富的自定义控件:

性能优化策略

  1. 增量加载:实现IIncrementalControl接口,优化列表滚动性能
public interface IIncrementalControl
{
    bool HasMoreItems { get; set; }
    ICommand LoadMoreCommand { get; }
}
  1. 数据缓存Toolkit提供缓存管理工具,减少重复网络请求

  2. 后台任务DynamicNotifyTask处理推送通知与后台更新

架构演进可视化

模块依赖关系

mermaid

界面演进对比

初代界面(左)与现代界面(右)的视觉对比:

桌面截图

Xbox版本界面展示了跨设备适配能力:

Xbox截图

核心技术亮点总结

  1. 跨设备兼容性:通过单一代码库支持桌面与Xbox设备

  2. 模块化架构:各功能模块独立封装,如FavoriteProvider专注收藏功能

  3. 自定义控件库:丰富的UI组件库实现一致的视觉体验

  4. 灵活的主题系统:支持明暗主题与高对比度模式:

<!-- Theme.Dark.xaml -->
<ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Dark">
        <SolidColorBrush x:Key="SystemControlBackgroundAccentBrush" Color="#FF00A4FF"/>
        <!-- 更多颜色定义 -->
    </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

未来展望

项目已宣布哔哩助理将逐步替代现有UWP版本,预示着架构将向更轻量、更灵活的方向演进。未来可能的技术方向包括:

  • WinUI 3迁移:采用最新UI框架提升性能
  • .NET MAUI支持:扩展到更多平台
  • AI功能集成:智能推荐与内容分析

Bili.Uwp的架构演进史,既是技术栈更新的历程,也是Windows应用开发最佳实践的缩影。从基础实现到现代架构,项目不断平衡功能需求与用户体验,为第三方客户端开发提供了宝贵参考。

项目源码:GitHub_Trending/bi/Bili.Uwp 官方文档:README.md

【免费下载链接】Bili.Uwp 适用于新系统UI的哔哩 【免费下载链接】Bili.Uwp 项目地址: https://gitcode.com/GitHub_Trending/bi/Bili.Uwp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值