共用项目
概述
- 项目共用类库,包含配置、常量、枚举、实体、模型、服务接口。
- 项目
SDK
为Microsoft.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
类。
- 实体类可以在
模块管理
中根据数据模型生成。
- 实体类可以添加虚拟属性,扩展实体类,虚拟属性不会生成
Insert
和Update
语句。
// 实体类
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 }
系统配置
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);
}
}