Bili.Uwp架构演进史:从初代版本到现代UI的蜕变
【免费下载链接】Bili.Uwp 适用于新系统UI的哔哩 项目地址: 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)
核心架构设计
初代版本聚焦基础功能实现,采用简单的分层架构:
- 数据访问层:通过Lib.Interfaces定义基础服务接口
- 业务逻辑层:Lib.Implementation提供具体实现
- 表现层:App目录包含XAML页面与基础交互逻辑
应用入口点App.xaml.cs展示了早期初始化流程:
public App()
{
InitializeComponent();
DIFactory.RegisterAppRequiredServices(); // 依赖注入注册
Suspending += OnSuspending;
UnhandledException += OnUnhandledException;
Locator.Instance.GetService<IAppToolkit>().InitializeTheme();
}
关键技术挑战
- 多设备适配:通过Package.appxmanifest定义设备兼容性
<TargetDeviceFamily Name="Windows.Universal"
MinVersion="10.0.18362.0"
MaxVersionTested="10.0.22000.0" />
-
UI响应式设计:早期采用简单的VisualState管理不同尺寸设备的布局适配
-
数据交互:基础HTTP请求封装在HttpProvider中,实现与B站API的基础通信
初代版本奠定了项目基础架构,但在模块化程度和代码复用方面存在明显局限,UI组件与业务逻辑耦合度较高。
中期演进:模块化与MVVM架构(2021-2022)
架构升级重点
2021年起,项目启动架构重构,核心目标是实现:
- 依赖注入容器化:开发DI.Container实现服务自动注册与解析
- MVVM模式落地:分离视图与业务逻辑,引入ViewModels层
- 模块化设计:按功能拆分独立模块,如Live、Pgc等专项服务
关键模块设计
- 依赖注入系统
自定义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
{
// 服务解析逻辑
}
}
- 视图模型抽象
ViewModels.Interfaces定义基础VM接口:
public interface IInitializeViewModel
{
Task InitializeAsync();
bool IsInitialized { get; }
}
public interface IIncrementalViewModel : IInitializeViewModel
{
bool HasMoreItems { get; }
Task LoadMoreAsync();
}
- 数据适配层
Adapter层实现API数据到本地模型的转换:
- VideoAdapter:视频数据处理
- LiveAdapter:直播数据适配
- UserAdapter:用户信息转换
现代架构:UI/UX革新与性能优化(2022-至今)
UI架构升级
随着Windows 11发布,项目启动UI现代化改造,重点包括:
-
设计语言更新:采用Fluent Design System,实现毛玻璃效果、动态色彩等现代UI元素
-
多窗口支持:Workspace模块实现多实例与窗口管理:
// MainWindow.xaml.cs
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
ExtendsContentIntoTitleBar = true;
SetTitleBar(AppTitleBar);
}
}
- 控件库重构:Controls目录包含丰富的自定义控件:
- DynamicModule:动态内容展示
- UserAvatar:用户头像控件
- SearchSuggestBox:搜索建议框
性能优化策略
- 增量加载:实现IIncrementalControl接口,优化列表滚动性能
public interface IIncrementalControl
{
bool HasMoreItems { get; set; }
ICommand LoadMoreCommand { get; }
}
-
数据缓存:Toolkit提供缓存管理工具,减少重复网络请求
-
后台任务:DynamicNotifyTask处理推送通知与后台更新
架构演进可视化
模块依赖关系
界面演进对比
初代界面(左)与现代界面(右)的视觉对比:
Xbox版本界面展示了跨设备适配能力:
核心技术亮点总结
-
跨设备兼容性:通过单一代码库支持桌面与Xbox设备
-
模块化架构:各功能模块独立封装,如FavoriteProvider专注收藏功能
-
自定义控件库:丰富的UI组件库实现一致的视觉体验
-
灵活的主题系统:支持明暗主题与高对比度模式:
<!-- 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的哔哩 项目地址: https://gitcode.com/GitHub_Trending/bi/Bili.Uwp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





