594

共用项目

概述

  • 项目共用类库,包含配置、常量、枚举、实体、模型、服务接口。
  • 项目SDKMicrosoft.NET.Sdk
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>
    <!--引用包-->
    <ItemGroup>
        <PackageReference Include="Known" Version="2.0.10" />
    </ItemGroup>
    <!--资源文件-->
    <ItemGroup>
        <EmbeddedResource Include="Resources\actions.txt" />
        <EmbeddedResource Include="Resources\Locales\en-US.txt" />
        <EmbeddedResource Include="Resources\Locales\vi-VN.txt" />
        <EmbeddedResource Include="Resources\Locales\zh-CN.txt" />
        <EmbeddedResource Include="Resources\Locales\zh-TW.txt" />
    </ItemGroup>
</Project>

实体类

  • 实体类继承EntityBase类,如果有工作流,则继承FlowEntity类。
  • 实体类可以在模块管理中根据数据模型生成。
  • 实体类可以添加虚拟属性,扩展实体类,虚拟属性不会生成InsertUpdate语句。
// 实体类
public class TbTest : EntityBase {}

// 流程实体类
public class TbTest : FlowEntity {}

模型类

  • 模型类为前后端数据交互的复杂组合类型,相当于DTO
  • 类名约定用Info结尾,例如后台首页界面包含数量统计、图表统计、常用功能,为了前后端请求一次,将3个数据类组合成一个HomeInfo组合类。
// 模型组合类
public class HomeInfo
{
    public TestInfo1 Item1 { get; set; }
    public TestInfo2 Item2 { get; set; }
}

服务接口

  • 服务接口是定义前后端数据交互的接口。
  • 如果不采用前后端,服务接口可以忽略,前端直接调用后端服务类的实例。
  • 建议定义服务接口,代码量也没增加多少,前后端交互也比较清晰,后续切换Auto模式也很方便。
// 服务接口
public interface ITestService
{
    // 分页查询和导出
    Task<PagingResult<TbTest>> QueryTestsAsync(PagingCriteria criteria);
    // 删除数据
    Task<Result> DeleteTestsAsync(List<TbTest> models);
    // 保存表单数据
    Task<Result> SaveTestAsync(TbTest model);
    // 保存带附件的表单
    Task<Result> SaveTestAsync(UploadInfo<TbTest> info);
}

常量和枚举

  • 系统常量和枚举,在该项目中定义,前后端可以共用。
// 常量类
public class DicCategory
{
    public const string Unit = "Unit";
}

// 代码表常量类
[CodeInfo]
public class TestType
{
    public const string Item1 = "Item1";
    public const string Item2 = "Item2";
}

// 枚举1
public enum TestMode { Item1, Item2 }

系统配置

  • 系统配置类主要定义系统的ID、名称和类型等。
public static class AppConfig
{
    // 移动端菜单
    private static readonly List<MenuInfo> AppMenus =
    [
        new MenuInfo { Id = "Home", Name = "首页", Icon = "home", Target = "Tab", Url = "/app" },
        new MenuInfo { Id = "Mine", Name = "我的", Icon = "user", Target = "Tab", Url = "/app/mine" },
        new MenuInfo { Id = "Test", Name = "测试模块", Icon = "form", Target = "Menu", Color = "#1890ff", Url = "/app/test" },
        new MenuInfo { Id = "Add", Name = "功能待加", Icon = "plus", Target = "Menu", Color = "#4fa624" }
    ];

    public static string AppId => "KIMS";
    public static string AppName => "Known信息管理系统";

    public static void AddSample(this IServiceCollection services)
    {
        Console.WriteLine(AppName);
        Config.AppMenus = AppMenus;

        services.AddKnown(info =>
        {
            // 项目ID、名称、字体大小、多语言、主题、程序集
            info.Id = AppId;
            info.Name = AppName;
            //info.IsMobile = true;
            info.IsSize = true;
            info.IsLanguage = true;
            info.IsTheme = true;
            info.Assembly = typeof(AppConfig).Assembly;
            // JS路径,通过JS.InvokeAppVoidAsync调用JS方法
            info.JsPath = "./script.js";
        });

        // 添加模块
        Config.AddModule(typeof(AppConfig).Assembly);
    }
}