NEWS
资讯
专注于医教研应用开发与服务,提供医疗科研机构信息智能化定制开发智能信息发布、科研数据备案、视力 筛查平台、医院服务终端...,帮助企业优化连接、巩固安全并实现可持续发展

南方网景信息管理系统(SnIMS)技术分析报告

发布时间:2026-03-28

以下内容由LLM大模型详细审阅整个项目源代码后,给出的技术分析报告:

SnIMS 框架核心代码结构分析报告

一、框架概述

SnIMS (SouthNet Information Management System) 是一个基于 .NET 的信息管理系统/数据管理系统框架。该框架从 .NET Framework 4.8 升级而来,现已支持 .NET 4.8 和 .NET 8.0 双框架,实现了跨平台(Windows/Linux)和跨数据库的支持。

官网www.veelink.net




二、项目结构

e:\ProjectBak\AI Coding\Demo2├── SnIMS.Common/           # 公共工具类库
├── SnIMS.Model/            # 实体模型层(含 ORM 导航属性)
├── SnIMS.IDAL/             # 数据访问层接口
├── SnIMS.Factory/          # 工厂类(依赖注入)
├── SnIMS.BLL/              # 业务逻辑层
├── SnIMS.Engine/           # 系统数据引擎(核心处理)
├── SnIMS.Component/        # .NET 8.0 前端组件(TagHelper)
├── SnIMS.Control/          # .NET 4.8 前端控件(WebControl)
├── SnIMS.Service/          # .NET 8.0 Web 前端项目
├── SnIMS.Web/              # .NET 4.8 Web 前端项目
├── SnIMS.Code/             # 代码生成器
├── SnIMS.SqlSugarDAL/      # SqlSugar ORM 数据访问层
├── SnIMS.SqlserverDAL/     # SQL Server 原生 DAL
├── SnIMS.MySqlDAL/         # MySQL 原生 DAL
├── SnIMS.OracleDAL/        # Oracle 原生 DAL
├── SnIMS.PostgreSqlDAL/    # PostgreSQL 原生 DAL
├── SnIMS.DmdbDAL/          # 达梦数据库 DAL
├── SnIMS.SQLiteDAL/        # SQLite 原生 DAL
├── SnIMS.OledbDAL/         # OleDb 通用 DAL
├── SnIMS.ApiDAL/           # API 接口 DAL(远程数据访问)
├── SnIMS.EntityFrameworkDAL/ # EF ORM(已弃用)
├── SnIMS.Tool/             # 工具类
└── SnIMS.Update/           # 自动升级应用 

三、各层详细分析

1. SnIMS.Common - 公共工具类库

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.Common\

这是框架的核心基础类库,包含以下模块:

1.1 DataHelper(数据转换)

  • DataCommon.cs: 实体对象操作工具

    • CopyToModel<T>(): 实体复制
    • FetchToModel<TSource, TTarget>(): 实体间属性提取
    • FetchToDataRow<T>(): 实体填充 DataRow
    • ModelToExpression<T>(): 实体转 LINQ 表达式
    • SetProperty<T>(): 动态设置属性值
  • DataTrans.cs: 数据类型转换(DataTable/List/Json/实体互转)

    • DataTableToList<T>(): DataTable 转 List
    • ListToDataTable<T>(): List 转 DataTable
    • DataTableToJson(): DataTable 转 JSON
    • ModelToString(): 实体转 JSON 字符串
  • JsonData.cs: 自定义 JSON 数据处理类(类似 LitJson)

1.2 DbHelper(数据库辅助)

  • SqlHelper.cs: SQL Server 原生 ADO.NET 操作类

    • 支持事务、存储过程、批量操作
    • 包含调试日志和错误日志功能
  • SqlSugarHelper.cs: SqlSugar ORM 封装

    • 支持多数据库(SQL Server/MySQL/Oracle/PostgreSQL/达梦/SQLite)
    • 提供 Queryable<T>()Insertable<T>()Updateable<T>()Deleteable<T>() 等链式操作
  • ApiHelper.cs: API 远程数据访问

    • 支持 Token 认证、签名验证
    • 提供统一的 API 调用接口
  • 其他数据库辅助类:

    • MySqlHelper.csOracleHelper.csOleDbHelper.csRedisHelper.cs

1.3 StringHelper(字符串处理)

  • StringHandle.cs: 字符串扩展方法

    • ToStr()ToInt()ToDateTime()ToJsonData() 等类型转换
    • IsEmpty()NotEmpty() 空值判断
    • AddString()DelString() 字符串集合操作
  • Filter.cs: 数据过滤和转换

    • HTML 标签过滤 (HtmlEnc()HtmlCheck())
    • 中文数字转换
    • 类型安全转换
  • Validator.cs: 数据验证

    • 邮箱、IP、密码强度验证
    • 中文字符检测

1.4 SecurityHelper(安全加密)

  • EncryptUtils.cs: 综合加密工具

    • Base64、MD5、DES、3DES、RSA 加密解密
    • 支持 Java/.NET 密钥格式转换
  • AuthCode.cs: 双因素认证(Google Authenticator)

    • 生成二维码、验证动态码
  • 其他DESEncryp.csMD5.cs

1.5 PageHelper(页面/HTTP 处理)

  • HttpHandle.cs: HTTP 请求处理

    • GET/POST/PUT/DELETE/DOWNLOAD
    • 支持文件上传下载
    • 异步请求支持
  • WebContext.cs: Web 上下文封装

  • RequestHandle.cs: 请求处理

  • HttpServer.cs: HTTP 服务器

1.6 StatHelper(统计/缓存)

  • DataCache.cs: 数据缓存(支持 .NET 4.8 和 8.0)

    • 基于 HttpRuntime.Cache (.NET 4.8) 或 IMemoryCache (.NET 8.0)
    • 支持模糊搜索缓存键
  • DbCache.cs: 数据库缓存层

1.7 FileHelper(文件操作)

  • FileControl.cs: 文件/文件夹操作

    • 创建、删除、复制、移动
    • 文件编码检测
    • 文件搜索
  • ConfigManager.cs: 配置文件管理

  • Zip.cs: 压缩/解压

  • FtpHelper.cs: FTP 操作

1.8 其他模块

  • DocumentHelper/ExcelOperate.cs: Excel 操作
  • EmailHelper/Smtp.cs: 邮件发送
  • JsHelper/: JSON 序列化(LitJson 风格)
  • LogHelper/Debug.cs: 日志记录

2. SnIMS.Model - 实体模型层

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.Model\

实体类使用 SqlSugar ORM 特性标注,支持导航属性。

实体类特性示例(以 Member.cs 为例):

[Table("Member")]
public class Member
{
    [Description("ID")]
    [Key]
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int? MemberID { get; set; }

    [Description("名字")]
    [StringLength(50)]
    public string Name { get; set; }

    // 跨表文本字段(自动填充关联表名称)
    [SugarColumn(IsIgnore = true)]
    [Description("用户组_文本")]
    public string MemberClassID_MemberClass_Name { get; set; }

    // ORM 导航属性(多对一)
    [Navigate(NavigateType.ManyToOne, nameof(MemberClassID), nameof(SnIMS.Model.MemberClass.MemberClassID))]
    public virtual MemberClass MemberClassID_MemberClass { get; set; }

    // 跨表查询配置
    [JoinTable("MemberClass:MemberClassID:Name")]
    public int? MemberClassID { get; set; }
} 

特点:

  • 使用 [Table][SugarColumn][Navigate][JoinTable] 等特性
  • 支持一对多、多对一导航
  • 自动生成跨表文本字段

3. SnIMS.IDAL - 数据访问层接口

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.IDAL\

定义数据访问的标准接口,实现数据库无关性。

接口示例(IMember.cs):

public interface IMember
{
    int GetMaxId();
    bool Exists(SnIMS.Model.Member model);
    int Add(SnIMS.Model.Member model);
    int Update(SnIMS.Model.Member model);
    int Update(SnIMS.Model.Member mod_update, string Include, SnIMS.Model.Member mod_search);
    int Delete(string Set, string Value);
    int Delete(SnIMS.Model.Member model, string Include);
    SnIMS.Model.Member GetModel(int MemberID);
    string GetString(string get, string set, string value);
    DataTable GetList(SnIMS.Model.Member model, int? top, string key, string include, string order, 
                      int? PageIndex, int? PageSize, string Selects, string Joins);
    int GetCount(SnIMS.Model.Member model, string Key, string Include, string Joins, string Selects);
    object GetFunctResult(string FuncName, string ParaValue, SnIMS.Model.Member model, 
                          string Key, string Include, string Joins, string Selects, bool isSingle);
} 

I_SqlSugar.cs - ORM 通用接口:

public interface I_SqlSugar : IDisposable
{
    IQueryable<T> GetList<T>() where T : class, new();
} 

4. SnIMS.Factory - 工厂层

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.Factory\

通过反射动态创建 DAL 实例,实现依赖注入。

工厂类示例(FMember.cs):

public class FMember
{
    public static SnIMS.IDAL.IMember CreateMember()
    {
        string CacheKey = "Member";
        object objType = DataAccess.CreateObject(CacheKey);
        return (SnIMS.IDAL.IMember)objType;
    }
} 

F_SqlSugar.cs:

public static class F_SqlSugar
{
    public static SnIMS.IDAL.I_SqlSugar CreateSqlSugar()
    {
        // 根据配置动态选择 SqlSugarDAL 或 Common.DbHelper.SqlSugarHelper
        object objType = DataAccess.CreateObject("SnIMS.Common.DbHelper", "SqlSugarHelper");
        return (SnIMS.IDAL.I_SqlSugar)objType;
    }
} 

5. SnIMS.BLL - 业务逻辑层

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.BLL\

封装业务逻辑,调用 DAL 层接口。

业务类示例(Member.cs):

public class Member
{
    private readonly SnIMS.IDAL.IMember dal = FMember.CreateMember();
    public readonly SnIMS.IDAL.I_SqlSugar sqlSugar = F_SqlSugar.CreateSqlSugar();

    // 缓存操作
    public void InitCache(int top = 1000);
    public SnIMS.Model.Member GetCache(int id);
    public List<SnIMS.Model.Member> GetCache(Func<SnIMS.Model.Member, bool> predicate);
    public int AddCache(int id);
    public int DeleteCache(int id);
    public void UpdateCache(int id);
    public void ClearCache();

    // CRUD 操作
    public int GetMaxId();
    public bool Exists(Action<SnIMS.Model.Member> setModel);
    public int Add(SnIMS.Model.Member model);
    public int Update(SnIMS.Model.Member model);
    public int Delete(string Set, string Value);
    public SnIMS.Model.Member GetModel(int MemberID);
    public DataTable GetTable(...);
    public List<SnIMS.Model.Member> GetList(...);
} 

特点:

  • 支持本机缓存(DbCache)
  • 使用工厂模式创建 DAL 实例
  • 提供 Lambda 表达式查询支持

6. SnIMS.Engine - 系统数据引擎

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.Engine\

这是框架的核心引擎,提供数据访问、模板渲染、权限控制等功能。

6.1 Data 类(如 MemberData.cs, MenuData.cs)

每个表对应一个 Data 类,提供高级数据访问功能:

public class MemberData : ControlBasic
{
    // 获取数据库结构
    public static JsonData GetDataStruct(string[] Cols = null, string ConfigType = null);

    // 读取数据实体(含跨表文本)
    public static SnIMS.Model.Member GetModel(int id);

    // 获取分页数据列表
    public static DataTable GetList(SnIMS.Model.Member model, int? top, string key, 
                                    string include, string order, int? PageIndex, int? PageSize,
                                    string Selects, string Joins, string SearchKey, bool AutoPage);

    // 获取列表(自动填充关联实体)
    public static List<SnIMS.Model.Member> GetLists(...);
} 

跨表文本自动填充:

// 自动添加 MemberClassID_MemberClass_Name 字段
dt.Columns.Add("MemberClassID_MemberClass_Name", Type.GetType("System.String"));
MemberClassID_MemberClass = TemplateHandle.GetMainTable("MemberClass", 
    Filter.GetArrFromTable(dt, "MemberClassID"), "MemberClassID,Name", false); 

6.2 ControlBasic.cs - 控件基类

支持 .NET 4.8 和 8.0 双框架:

#if NET48
    public class ControlBasic : CompositeControl
#else
    public class ControlBasic : TagHelper
#endif
{
    // 主要配置
    public string ControlTag { get; set; } = "v-serv";
    public int? DisplayType { set; get; } = 2; // 0=文章,1=单页,2=表格,3=多列表格

    // 布局分页
    public int CellColumn { get; set; } = 1;
    public int? TopNum { set; get; }

    // 数据筛选
    public bool SysPower { set; get; } = false; // 是否根据权限读取
    public bool SysAdmin { set; get; } = false; // 后台/前台
    public bool SysPass { set; get; } = false; // 忽略审核条件

    // 模板
    public string MainTemplate { get; set; }
    public string ItemTemplate { get; set; }
    public string FootTemplate { get; set; }
} 

6.3 TemplateHandle.cs - 模板处理

Razor 动态模板编译:

public static string RenderRazor(string template, object model)
{
    RazorLightEngine _engine = new RazorLightEngineBuilder()
        .UseMemoryCachingProvider()
        .DisableEncoding()
        .Build();
    string result = _engine.CompileRenderStringAsync(
        template.GetHashCode().ToString(), template, model).Result;
    return result;
} 

模板标签解析:

public static Dictionary<string, string> GetTemplates(string content)
{
    var templateNames = new[] { "MainTemplate", "TopTemplate", "ItemTemplate", 
                                "ItemInTemplate", "FootTemplate", "MiddleTemplate", 
                                "CellTopTemplate", "CellFootTemplate" };
    // 提取各模板内容
} 

翻译功能:

public static string Trans(string input, string code = null)
{
    // 根据 LanguageClass 和 Language 表实现多语言翻译
} 

6.4 AdminHandle.cs - 后台管理处理

  • GetJoinId(): 简单添加数据
  • CheckThisUser(): 用户验证
  • UpdateFileOrder_Admin(): 文件排序更新

7. SnIMS.Component / SnIMS.Control - 前端组件

位置:

  • e:\ProjectBak\AI Coding\Demo2\SnIMS.Component\ (.NET 8.0)
  • e:\ProjectBak\AI Coding\Demo2\SnIMS.Control\ (.NET 4.8)

每个表对应一个控件类,使用 TagHelper (.NET 8) 或 WebControl (.NET 4.8)。

组件示例(MemberControl.cs):

[HtmlTargetElement("MemberControl")]
[RestrictChildren("MainTemplate", "TopTemplate", "ItemTemplate", "ItemInTemplate", 
                  "FootTemplate", "MiddleTemplate", "CellTopTemplate", "CellFootTemplate")]
public class MemberControl : ControlBasic
{
    // 业务属性(自动生成)
    [Browsable(true)]
    [Category("5-自动生成")]
    [Description("名字")]
    public string Name { get; set; }

    [Browsable(true)]
    [Category("5-自动生成")]
    [Description("用户组")]
    public int? MemberClassID { get; set; }

    // 数据源
    public List<SnIMS.Model.Member> DataItems { get; set; }

    // 渲染逻辑
    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        // 构建查询条件
        // 渲染模板
        // 输出 HTML
    }
} 

使用示例(Razor 视图):

<MemberControl MemberClassID="1" DisplayType="2">
    <MainTemplate>
        <table>
            <ItemTemplate>
                <tr>
                    <td>{{Name}}</td>
                    <td>{{MemberClassID_MemberClass_Name}}</td>
                </tr>
            </ItemTemplate>
        </table>
    </MainTemplate>
</MemberControl> 

8. DAL 层实现

8.1 SqlSugarDAL(ORM 实现)

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.SqlSugarDAL\

使用 SqlSugar ORM 实现数据访问:

public class Member : IMember
{
    public int Add(SnIMS.Model.Member model)
    {
        var insert = SqlSugarHelper.ModelToInsert(model);
        return insert.IgnoreColumns(ignoreNullColumn: true).ExecuteReturnIdentity();
    }

    public int Update(SnIMS.Model.Member model)
    {
        var update = SqlSugarHelper.ModelToUpdate(model);
        return update.IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
    }

    public DataTable GetList(SnIMS.Model.Member model, int? Top, string Key, string Include, 
                             string Order, int? PageIndex, int? PageSize, string Selects, string Joins)
    {
        var query = SqlSugarHelper.ModelToQuery(model, "Member");
        
        if (Key.NotEmpty())
        {
            query = SqlSugarHelper.AddSearchKey(query, Selects, Key);
        }
        
        if (Include.NotEmpty())
        {
            query = query.Where(SqlBuilder.FixCond(Include));
        }
        
        // 排序、分页
        return query.ToDataTable();
    }
} 

8.2 SqlserverDAL(原生 ADO.NET 实现)

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.SqlserverDAL\

使用原生 ADO.NET 和 SqlHelper:

public class Member : IMember
{
    public int Add(SnIMS.Model.Member model)
    {
        StringBuilder strSql = new StringBuilder();
        strSql.Append("INSERT INTO [Member] (......) values (......);SELECT SCOPE_IDENTITY();");
        return Filter.ToInt(SqlHelper.ExecuteSqlRes(strSql.ToString()));
    }

    public bool Exists(SnIMS.Model.Member model)
    {
        StringBuilder strSql = new StringBuilder();
        strSql.Append("SELECT COUNT(1) FROM [Member] WHERE 1=1");
        // 动态拼接条件
        if (model.Name != null)
        {
            strSql.Append(" AND [Name]='" + Filter.CheckSQL(model.Name) + "'");
        }
        return SqlHelper.Exists(strSql.ToString());
    }
} 

8.3 其他 DAL

  • MySqlDAL: MySQL 原生实现
  • OracleDAL: Oracle 原生实现
  • PostgreSqlDAL: PostgreSQL 原生实现
  • DmdbDAL: 达梦数据库原生实现
  • SQLiteDAL: SQLite 原生实现
  • OledbDAL: OleDb 通用实现
  • ApiDAL: 通过 API 远程访问数据
  • EntityFrameworkDAL: EF ORM(已弃用)

9. SnIMS.Code - 代码生成器

位置e:\ProjectBak\AI Coding\Demo2\SnIMS.Code\

基于 ASP.NET Web Forms 的代码生成器,可生成:

  • Model 实体类(含 ORM 特性)
  • IDAL 接口
  • Factory 工厂类
  • BLL 业务逻辑类
  • DAL 数据访问类(支持多种数据库)
  • Component/Control 前端组件

生成器特点:

  • 读取数据库表结构
  • 自动生成完整的 CRUD 代码
  • 支持导航属性配置
  • 支持跨表文本字段生成

10. SnIMS.Web / SnIMS.Service - 前端项目

SnIMS.Web (.NET 4.8)

  • Web Forms 项目
  • 使用 .master 母版页
  • 目录结构:
    • Admin/: 后台管理页面
    • UserCneter/: 用户中心
    • AJAX/: AJAX 接口
    • Api/: API 接口
    • Template/: 模板文件

SnIMS.Service (.NET 8.0)

  • ASP.NET Core MVC/Razor Pages 项目
  • 使用 TagHelper 组件
  • 支持 Docker 部署
  • 目录结构:
    • Pages/: Razor 页面
    • Components/: 视图组件
    • Api/: API 控制器
    • wwwroot/: 静态资源

四、层间调用关系

┌─────────────────────────────────────────────────────────────┐
│                      前端层 (Web/Service)                      │
│  SnIMS.Web (.NET 4.8) / SnIMS.Service (.NET 8.0)             │
│  使用:MemberControl, MenuControl 等组件                       │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    组件层 (Component/Control)                  │
│  继承 ControlBasic,封装模板渲染和数据绑定                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      引擎层 (Engine)                          │
│  MemberData, MenuData 等 Data 类                              │
│  提供:GetDataStruct, GetModel, GetList 等方法                │
│  功能:跨表文本填充、权限控制、模板渲染                         │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    业务逻辑层 (BLL)                           │
│  Member, Menu 等业务类                                        │
│  提供:缓存管理、业务验证、事务处理                            │
│  调用:dal.Add(), dal.Update(), dal.GetList() 等             │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      工厂层 (Factory)                         │
│  FMember.CreateMember()                                      │
│  通过反射动态创建 DAL 实例                                     │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                   数据访问接口层 (IDAL)                        │
│  IMember, IMenu 等接口                                        │
│  定义标准数据访问方法                                          │
└─────────────────────────────────────────────────────────────┘
                              │
              ┌───────────────┼───────────────┐
              ▼               ▼               ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│  SqlSugarDAL    │ │ SqlserverDAL    │ │   MySqlDAL      │
│  (ORM 实现)      │ │ (ADO.NET 实现)   │ │ (ADO.NET 实现)   │
└─────────────────┘ └─────────────────┘ └─────────────────┘
              │               │               │
              └───────────────┼───────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                   数据库 (多数据库支持)                        │
│  SQL Server / MySQL / Oracle / PostgreSQL / 达梦 / SQLite    │
└─────────────────────────────────────────────────────────────┘ 

五、支持的数据库

数据库 DAL 项目 支持程度
SQL Server SnIMS.SqlserverDAL 完全支持(默认生成)
MySQL SnIMS.MySqlDAL 完全支持
Oracle SnIMS.OracleDAL 完全支持
PostgreSQL SnIMS.PostgreSqlDAL 完全支持
达梦 (DM) SnIMS.DmdbDAL 完全支持
SQLite SnIMS.SQLiteDAL 完全支持
OleDb SnIMS.OledbDAL 通用支持
API 远程 SnIMS.ApiDAL 通过 HTTP API

ORM 支持: SqlSugar(所有上述数据库)


六、前端页面引擎工作原理

1. 组件渲染流程

1. Razor 视图解析 <MemberControl> 标签
   ↓
2. 触发 MemberControl.ProcessAsync() 方法
   ↓
3. 读取组件属性(Name, MemberClassID 等)构建查询条件
   ↓
4. 调用 MemberData.GetList() 获取数据
   ↓
5. 数据填充跨表文本(如 MemberClassID_MemberClass_Name)
   ↓
6. 解析模板(MainTemplate, ItemTemplate 等)
   ↓
7. 使用 RazorLight 编译渲染模板
   ↓
8. 输出 HTML 到响应流 

2. 模板语法

<!-- 静态标签(设计时) -->
<MainTemplate>
    <table>
        <ItemTemplate>
            <tr>
                <td>{{Name}}</td>
                <td>{{MemberClassID_MemberClass_Name}}</td>
            </tr>
        </ItemTemplate>
    </table>
</MainTemplate>

<!-- 动态 Razor 语法(运行时) -->
<MainTemplate>
    @foreach(var item in Model.Data) {
        <tr>
            <td>@item.Name</td>
            <td>@item.MemberClassID_MemberClass_Name</td>
        </tr>
    }
</MainTemplate> 

3. 双框架兼容

#if NET48
    public class ControlBasic : CompositeControl  // Web Forms
    {
        protected override void RenderContents(HtmlTextWriter output) { }
    }
#else
    public class ControlBasic : TagHelper  // ASP.NET Core
    {
        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { }
    }
#endif 

七、代码生成器功能

生成内容

  1. Model 实体类

    • 表映射特性 [Table("TableName")]
    • 列映射特性 [SugarColumn]
    • 主键特性 [Key]
    • 导航属性 [Navigate]
    • 跨表文本字段
  2. IDAL 接口

    • CRUD 方法定义
    • 查询方法定义
    • 聚合函数方法
  3. Factory 工厂类

    • 反射创建 DAL 实例
    • 缓存管理
  4. BLL 业务类

    • 缓存操作方法
    • 业务逻辑方法
    • 调用 DAL 接口
  5. DAL 实现类

    • SqlSugar ORM 实现
    • ADO.NET 原生实现(多数据库)
  6. Component/Control 组件

    • TagHelper (.NET 8) 或 WebControl (.NET 4.8)
    • 属性窗口设计支持
    • 模板渲染逻辑

生成器配置

  • 读取数据库表结构
  • 配置主键、外键关系
  • 配置跨表查询字段
  • 选择生成的数据库类型

八、内置工具类和业务模块

8.1 工具类汇总

类别 类名 功能
数据转换 DataCommon, DataTrans 实体/DataTable/JSON 互转
数据库 SqlHelper, SqlSugarHelper 数据库操作
字符串 StringHandle, Filter, Validator 字符串处理、验证
加密 EncryptUtils, AuthCode, MD5 加密解密、双因素认证
文件 FileControl, Zip, FtpHelper 文件操作、压缩、FTP
HTTP HttpHandle, WebContext HTTP 请求、上下文
缓存 DataCache, DbCache 数据缓存
日志 Debug 日志记录
Excel ExcelOperate Excel 操作
邮件 Smtp 邮件发送

8.2 业务模块

框架预置了以下业务模块(每个模块包含完整的 Model/BLL/DAL/Component):

模块 说明
Member 会员管理
MemberClass 会员分类
Menu 菜单管理
Power 权限管理
PowerClass 权限分类
Company 公司管理
CompanyDep 部门管理
Area 地区管理
Article 文章管理
ArticleClass 文章分类
Files 文件管理
Config 系统配置
Language 多语言
Chat 聊天功能
ChatGroup 群组
Tasks 任务管理
WorkStep 工作流
SMS 短信
Pay 支付
News 新闻
Ad 广告
Template 模板管理
OpenApi 开放 API
DataLog 数据日志
Visited/Visitor 访问统计
更多模块

九、框架设计模式和架构特点

9.1 设计模式

  1. 工厂模式 (Factory Pattern)

    • SnIMS.Factory 动态创建 DAL 实例
    • 支持运行时切换数据库实现
  2. 抽象工厂模式 (Abstract Factory)

    • IDAL 定义抽象接口
    • 多个 DAL 实现(SqlSugar/SqlServer/MySql 等)
  3. 依赖注入 (Dependency Injection)

    • BLL 通过工厂注入 DAL
    • 支持控制反转
  4. 模板方法模式 (Template Method)

    • ControlBasic 定义渲染流程
    • 子类实现具体业务逻辑
  5. 策略模式 (Strategy Pattern)

    • 多数据库实现可互换
    • 通过配置选择策略
  6. 单例模式 (Singleton)

    • 缓存管理类
    • 配置管理类
  7. 仓储模式 (Repository Pattern)

    • DAL 层作为数据仓储
    • BLL 层封装业务逻辑

9.2 架构特点

  1. 分层架构

    • 清晰的分层:Model → IDAL → Factory → BLL → Engine → Component → Web
    • 各层职责明确,便于维护
  2. 多数据库支持

    • 通过 IDAL 接口实现数据库无关性
    • 支持 8 种数据库/数据源
  3. 双框架兼容

    • 同时支持 .NET Framework 4.8 和 .NET 8.0
    • 使用条件编译实现兼容
  4. 代码生成

    • 完整的代码生成器
    • 减少重复劳动
  5. ORM 和 ADO.NET 并存

    • SqlSugar ORM 用于通用操作
    • ADO.NET 用于高性能/复杂查询
  6. 前端组件化

    • 自定义 TagHelper/WebControl
    • 模板化渲染
  7. 缓存支持

    • 本机内存缓存
    • 数据库缓存层
  8. 安全机制

    • 多种加密算法
    • 双因素认证
    • SQL 注入防护
  9. 可扩展性

    • 插件式 DAL 实现
    • 可自定义业务模块
  10. 跨平台

    • 支持 Windows 和 Linux
    • 支持 Docker 部署

十、总结

SnIMS 是一个功能完善、架构清晰的企业级信息管理系统框架。主要优势包括:

  1. 完整的分层架构: 从数据访问到前端展示,层次分明
  2. 多数据库支持: 支持主流数据库和国产数据库
  3. 双框架兼容: 同时支持 .NET 4.8 和 8.0
  4. 代码生成器: 快速生成 CRUD 代码
  5. 前端组件化: 可复用的 UI 组件
  6. 丰富的工具类: 涵盖常用功能
  7. 灵活的 ORM: SqlSugar 和 ADO.NET 并存

该框架适合需要快速开发、多数据库支持、跨平台部署的企业级应用项目。

返回列表