30

核心概念

简介

Known 框架是一个现代化的软件开发框架,旨在通过服务分层、插件机制、组件化前端和数据访问解耦等核心设计理念,提供灵活且可扩展的解决方案。本文档将深入探讨这些设计理念及其在项目中的具体体现。

项目结构

Known 框架的项目结构清晰,主要分为以下几个部分:

  1. Known:核心模块,包含框架的主要功能和服务。

    • Config.cs:全局配置管理。
    • ServiceBase.cs:服务基类,提供通用的数据操作方法。
    • Database.cs:数据访问层。
  2. Known.Core:核心业务逻辑模块。

    • ApiFeatureProvider.cs:API 功能提供者。
    • WebApi.cs:Web API 实现。
  3. Plugins:插件模块,支持动态扩展。

    • Known.Admin:管理插件。
    • Known.Cells:Excel 处理插件。
  4. Shared:共享模块,包含公共工具和基础类。

    • Context.cs:系统上下文管理。
    • Database.cs:数据库操作工具。
  5. Sample:示例项目,展示框架的使用方式。

项目结构图

classDiagram
    class Known {
        +Config.cs
        +ServiceBase.cs
        +Database.cs
    }
    class Known.Core {
        +ApiFeatureProvider.cs
        +WebApi.cs
    }
    class Plugins {
        +Known.Admin
        +Known.Cells
    }
    class Shared {
        +Context.cs
        +Database.cs
    }
    class Sample {
        +Sample.Web
        +Sample.Wasm
    }
    Known --> Shared
    Known.Core --> Known
    Plugins --> Known
    Sample --> Known

核心组件

1. Config.cs

Config.cs 是框架的全局配置管理类,负责管理系统的运行时配置。主要功能包括:

  • 定义全局常量(如 AutoBizIdPrefix)。
  • 管理菜单、操作按钮等系统资源。
  • 提供插件机制的支持。

关键方法:

  1. AddApp:初始化应用程序模块。
  2. InitAssembly:加载程序集并初始化相关资源。
  3. AddActions:加载操作按钮配置。

代码示例:

public static void AddApp(Assembly assembly)
{
    if (App.IsModule)
    {
        Modules.AddItem("0", Constants.BaseData, "基础数据", "database", 1);
        Modules.AddItem("0", Constants.System, "系统管理", "setting", 99);
    }
    Version = new VersionInfo(App.Assembly);
    InitAssembly(App.Assembly);
    AddModule(assembly);
}

2. ServiceBase.cs

ServiceBase.cs 是服务基类,提供通用的数据操作方法,如查询、保存和删除数据。

关键方法:

  1. QueryModelsAsync:异步查询数据。
  2. DeleteModelsAsync:异步删除数据。
  3. SaveModelAsync:异步保存数据。

代码示例:

protected static Task<PagingResult<T>> QueryModelsAsync<T>(string key, PagingCriteria criteria, Func<List<T>, List<T>> filter = null)
{
    var result = AppData.QueryModels(key, criteria, filter);
    return Task.FromResult(result);
}

3. Context.cs

Context.cs 是系统上下文类,用于管理用户会话和请求/响应交互。

关键属性:

  1. CurrentUser:当前用户信息。
  2. IsMobile:是否为移动端。
  3. Language:当前语言设置。

代码示例:

public class Context
{
    public UserInfo CurrentUser { get; set; }
    public bool IsMobile { get; set; }
    public Language Language { get; }
}