从源码到界面:Tai项目架构设计全解析

从源码到界面:Tai项目架构设计全解析

【免费下载链接】Tai 👻 在Windows上统计软件使用时长和网站浏览时长 【免费下载链接】Tai 项目地址: https://gitcode.com/GitHub_Trending/ta/Tai

Tai项目是一款在Windows上统计软件使用时长和网站浏览时长的工具,通过精巧的架构设计实现了从系统监控到数据展示的完整流程。本文将深入剖析其代码组织结构、核心功能模块及界面交互设计,帮助开发者全面理解项目实现原理。

项目整体架构

Tai采用分层架构设计,主要包含核心功能层、数据访问层、界面展示层和扩展组件四大部分。解决方案文件Tai.sln定义了四个主要项目:Core(核心功能)、UI(用户界面)、TaiBug(调试工具)和Updater(更新组件),这种模块化划分确保了各功能单元的低耦合和高内聚。

架构分层概览

mermaid

核心模块路径:

核心功能模块解析

应用状态管理

应用状态管理是Tai的核心功能之一,通过AppState.cs类实现全局状态跟踪。该类采用单例模式设计,维护应用生命周期中的关键状态变量,包括监控状态、数据采集开关和用户配置变更标志等。

状态管理时序图:

mermaid

系统监控服务

系统监控是Tai实现功能的基础,主要通过AppObserver.csProcessHelper.cs实现。监控服务采用Windows API钩子技术,实时捕获应用窗口激活、进程创建和销毁事件,并通过Win32API.cs封装的系统调用获取窗口标题、进程路径等详细信息。

关键监控流程代码位于Main.cs的Run方法中,启动时依次初始化数据库自检、应用信息加载和分类数据加载:

public async void Run()
{
    await Task.Run(() =>
     {
         CreateDirectory();

         // 数据库自检
         using (var db = new TaiDbContext())
         {
             db.SelfCheck();
         }

         // 加载app信息
         appData.Load();

         // 加载分类信息
         categories.Load();

         AppState.IsLoading = false;
     });

    // 加载应用配置
    appConfig.Load();
    config = appConfig.GetConfig();
    UpdateConfigIgnoreProcess();
    UpdateConfigProcessWhiteList();

    // 初始化过滤器
    _webFilter.Init();

    // 启动主服务
    Start();

    OnStarted?.Invoke(this, EventArgs.Empty);
}

监控服务默认忽略系统关键进程,如资源管理器、任务管理器等,定义在Main.cs的DefaultIgnoreProcess数组中:

private readonly string[] DefaultIgnoreProcess = new string[] {
    "Tai",
    "SearchHost",
    "Taskmgr",
    "ApplicationFrameHost",
    "StartMenuExperienceHost",
    "ShellExperienceHost",
    "OpenWith",
    "Updater",
    "LockApp",
    "dwm",
    "SystemSettingsAdminFlows"
};

数据采集与存储

Tai采用SQLite数据库存储监控数据,通过TaiDbContext.cs实现数据访问抽象。数据库连接管理采用单例模式,确保多线程环境下的连接安全。数据模型定义在Core/Models/Db/目录下,包括网站浏览记录(WebBrowseLogModel.cs)、应用使用时长(DailyLogModel.cs)等关键实体。

数据持久化流程主要通过Database.cs实现,提供CRUD操作的统一接口。特别值得注意的是,Tai实现了数据缓存机制,通过SiteCache.cs减少数据库访问频率,提升系统性能。

时间统计服务

时间统计是Tai的核心功能,由AppTimerServicer.cs实现。该服务通过定时器记录当前活动窗口的使用时长,当窗口焦点变化或达到统计间隔时,触发数据保存事件。时间统计精度可通过配置文件调整,默认统计间隔为60秒。

时间更新事件处理代码:

private void _appTimer_OnAppDurationUpdated(object sender, Event.AppDurationUpdatedEventArgs e)
{
    UpdateAppDuration(e);
}

private void UpdateAppDuration(AppDurationUpdatedEventArgs e)
{
    if (e == null) return;

    try
    {
        var app = e.App;
        int duration = e.Duration;
        DateTime startTime = e.ActiveTime;

        bool isCheck = IsCheckApp(app.Process, app.Description, app.ExecutablePath);
        if (isCheck)
        {
            // 更新统计时长
            data.UpdateAppDuration(app.Process, duration, startTime);
            // 关联进程更新
            HandleLinks(app.Process, duration, startTime);
            OnUpdateTime?.Invoke(this, null);
            // 自动分类
            DispatchCateogry(app.Process, app.ExecutablePath);
        }
    }
    catch (Exception ex)
    {
        Logger.Error(ex.ToString());
    }
}

数据模型设计

Tai的数据模型采用领域驱动设计思想,将业务概念直接映射为代码实体。核心数据模型主要分为三类:应用数据模型、网站数据模型和配置数据模型。

应用数据模型

应用数据模型定义在Core/Models/AppModel.cs中,包含应用名称、描述、可执行路径、图标文件路径和分类ID等字段。应用监控事件通过AppObserverEventArgs.cs传递,包含窗口标题、进程ID和活动时间等关键信息。

网站数据模型

网站数据模型包括WebSiteModel.cs(网站基本信息)和WebBrowseLogModel.cs(浏览记录)。网站数据采集通过Chrome浏览器扩展WebExtensions/Chrome/service-worker.js实现,采用WebSocket与主程序通信,实时传输浏览记录。

配置数据模型

配置数据模型集中在Core/Models/Config/目录下,包括GeneralModel.cs(通用设置)和BehaviorModel.cs(行为设置)等。配置服务通过AppConfig.cs提供统一访问接口,支持配置变更的实时监听。

用户界面设计

Tai的用户界面采用WPF技术实现,遵循MVVM设计模式,将界面逻辑与业务逻辑分离。主窗口MainWindow.xaml采用现代化侧边栏导航设计,通过Navigation.xaml控件实现功能模块切换。

界面组件架构

UI层采用自定义控件库设计,所有控件均继承自TPage.cs基类,确保样式统一和行为一致。核心控件包括:

界面主题支持动态切换,通过ThemeServicer.cs管理主题资源,实现明暗主题的无缝切换。

数据可视化实现

数据可视化是Tai界面的核心功能,通过Charts.cs实现多种图表展示,包括柱状图(应用使用时长)、饼图(分类占比)和雷达图(使用模式分析)。图表控件支持交互操作,如点击查看详情和时间范围筛选。

图表数据绑定示例:

<control:Charts 
    x:Name="AppUsageChart"
    Type="Column"
    Data="{Binding AppUsageData}"
    Title="应用使用时长统计"
    SubTitle="过去7天"
    Margin="10"/>

响应式布局设计

Tai界面支持响应式设计,通过PageContainer.xaml控件自动适配不同窗口尺寸。导航栏在窗口宽度小于800px时自动折叠,通过Navigation.xaml.cs中的SizeChanged事件处理实现自适应逻辑。

Web扩展集成

Tai通过浏览器扩展实现网站浏览数据采集,目前支持Chrome及兼容内核浏览器。扩展组件位于WebExtensions/Chrome/目录,主要包含:

  • 清单文件:manifest.json - 声明扩展权限和资源
  • 内容脚本:捕获网页标题和URL变化
  • 后台服务:service-worker.js - 管理WebSocket连接和数据发送

扩展与主程序的通信采用WebSocket协议,通过WebSocketEvent.cs处理消息接收,实现浏览数据的实时传输。

总结与扩展

Tai项目通过精心的架构设计,实现了Windows平台下应用和网站使用时长的精确统计。其分层架构设计确保了功能扩展的灵活性,模块化组件便于维护和升级。未来可以从以下方面进行扩展:

  1. 多平台支持:基于.NET Core重构核心模块,实现跨平台兼容
  2. 高级数据分析:引入机器学习算法,提供使用习惯分析和预测
  3. 云同步功能:添加用户账户系统,实现多设备数据同步
  4. 更多扩展支持:开发Firefox和Edge浏览器扩展,扩大适用范围

项目开发文档:README.md 完整源码地址:https://gitcode.com/GitHub_Trending/ta/Tai

通过本文的解析,相信开发者能够深入理解Tai的架构设计和实现原理,为二次开发和功能扩展提供基础。项目的模块化设计和清晰的代码结构,也为学习Windows应用开发和WPF界面设计提供了良好的参考范例。

【免费下载链接】Tai 👻 在Windows上统计软件使用时长和网站浏览时长 【免费下载链接】Tai 项目地址: https://gitcode.com/GitHub_Trending/ta/Tai

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

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

抵扣说明:

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

余额充值