C# 自定义字段的设计与实现 - 可以应对不同的实体对象
自定义字段又叫做“开放模型”,客户可以根据自已的需求,为某些实体自由添加需要的字段,实现个性化定制。
如现有一套CRM系统,客户模块中客户信息,需要实现不同行业,不同业态都可以个性化需求。
那我们知道客户信息表Customer, 有 姓名,性别,电话,地址等基本通用属性,但如药疗行业客户需要记录体重,血压等,而运输行业的客户更关注货物品类,产量等,而又如快速消费品行业关注客户的爱好,年龄,星座啊,这些问题该如何处理呢?
对自定义字段的类型设计
主要包括:文本框(TextType), 数字框(NumberType),下拉列表框(EnumType),日期选择器(Datetime)。并能对这些属性做默认设置或选项设置。
自定义字段的扩展设计
是否设置字段默认值;字段填写的校验规则(例如校验长度、格式等)。
表结构设计
有些情况下要配合实体模板,控制一些自定义字段只为某些实体显示,那么数据库设计需要灵活的支持。CustomField表中的Category可以支持不同的Entity。Type区分不同的字段类型。Settings存储不同类型字段的一些配置项,可以以Json字符串格式存储。
UI 上的实现(截图)
custom filed list page:
custom filed edit/add page:
在Customer编辑页面上的使用:
代码实现的细节这里就不再展示。
实现自定义数据的行展示(行转列)
sql脚本如下:
declare @customFieldNames nvarchar(max) set @customFieldNames = '' select @customFieldNames = @customFieldNames + ',' + [Name] from [CustomField] set @customFieldNames = right(@customFieldNames, len(@customFieldNames) - 1) --select @customFieldNames set @customFieldNames = 'select a.* from (SELECT c.*, cf.[Name] as cfname, cc.[Value] FROM [Customer] AS c LEFT JOIN [CustomerCustomField] AS cc ON c.CustomerId = cc.CustomerId LEFT JOIN [CustomField] AS cf ON cc.CustomFieldId = cf.CustomFieldId) t pivot (max([Value]) for [cfname] in('+@customFieldNames+')) as a' exec(@customFieldNames)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)