【编程】(1)-跨平台跨语言C#、Java、鸿蒙ArkTS三端通用实体接口
咏方舟-长江支流 2026-07-20
前言
最近在做一个轻量级框架,准备开源发布到Git 以及csdn代码仓 https://gitcode.com/ZeroORM ,先在csdn上首发把实现整理一遍。最初想做到跨平台——用 .NET Standard 2.0,只引用 System.Text.Json,它能用于 .NET 各种框架,也能编译运行在各大操作系统平台。
但跨语言呢?我选择了 C# 7.3(不超过 C# 8 语法),应用基本数据类型。当然,像List<T>这种,会有应用技巧,后面会说。
核心设计在三个语言中都有对应的实现方式,且语义完全一致。下面设计 C# 接口,拷到 Java、ArkTS 保持接口和类型完全一致,因此从一个开发语言转到另一个开发语言移植时,基本不用改业务代码:
大家只要记得一句话:鸿蒙ArkTS来自TypeScript,而TypeScript是c#之父安德斯负责的,所以基本上c#代码拷过去直接用,但是要注意细节。
C# 端
usingSystem;namespaceUserBaoTech.Foundation.Entities{/// <summary>/// 作者:长江支流 https://github.com/zeroorm、https://gitcode.com/ZeroORM/// 实体接口IEntity是用宝框架的底层保留ID做增删改的契约,表示该类是一个领域实体,实体基接口(所有领域实体必须实现)。///当然泛型设计,不仅让主键可以是字符、数字、GUID,也可以支持组合主键。/// Java、鸿蒙、c#三端通用。/// </summary>/// <typeparam name="TKey">主键类型</typeparam>publicinterfaceIEntity<TKey>{TKeyId{get;set;}}/// <summary>/// 默认主键为 string 的实体接口(大部分场景使用)/// </summary>publicinterfaceIEntity:IEntity<string>{}}Java 端
packagecom.userbaotech.foundation.entities;/** * 实体接口 IEntity 是框架的底层保留 ID 做增删改的契约。 * 泛型设计,主键可以是 String、Integer、Long、UUID 或自定义复合类型。 * C#、Java、鸿蒙 ArkTS 三端通用。 */publicinterfaceIEntity<TKey>{TKeygetId();voidsetId(TKeyid);}/** * 默认主键为 String 的实体接口 */publicinterfaceIEntityextendsIEntity<String>{}鸿蒙 ArkTS 端
注意,鸿蒙ArkTS,就不要这么写的,ArkTS要接口、类、方法上支持默认处理方式。动动手试试吧,实践最重要。
/** * 实体接口 IEntity 是框架的底层保留 ID 做增删改的契约。 * 泛型设计,主键可以是 string、number、UUID 或自定义复合类型。 * C#、Java、鸿蒙 ArkTS 三端通用。 */exportinterfaceIEntity<TKey>{id:TKey;}/** * 默认主键为 string 的实体接口 */exportinterfaceIEntityextendsIEntity<string>{}ArkTS 也支持默认泛型参数,并且支持默认参数:
exportinterfaceIEntity<TKey=string>{id:TKey;}设计要点
| 特性 | 说明 |
|---|---|
| 泛型主键 | 支持string、int、long、Guid,甚至自定义复合主键类型 |
| 默认字符串主键 | IEntity : IEntity<string>覆盖 95% 以上场景,无需显式指定泛型参数 |
| 三端一致 | 接口名、属性名、方法名三端完全相同,移植时只改语法符号 |
| 最小契约 | 只保留Id,不包含CreatedAt、UpdatedAt、IsDeleted等系统字段,由业务层按需扩展 |
| 跨语言移植 | C# 代码直接复制到 Java/ArkTS,接口定义不改,只改语法 |
为什么只保留Id?
IEntity<TKey>是整个数据访问层的基石契约——增删改查必须有主键,这是数据操作的最基本要求。把CreatedAt、UpdatedAt、IsDeleted移出基接口,是为动态实体(如 XML 驱动的实体)留出完全自由的扩展空间。
如果基接口包含了这些字段,动态实体就不得不“假装”拥有它们,即使它们并不存在于 XML 配置中。只保留Id,意味着任何实现了IEntity<TKey>的类,无论它是静态实体还是动态实体,都可以无缝接入用宝框架的增删改查体系。
后续预告
三端通用接口系列持续更新:
- 第(1)篇:三端通用实体接口
IEntity<TKey>✅ - 第(2)篇:三端通用ORM提供者接口
IOrmProvider<TKey>✅ - 第(3)篇:三端通用数据字典接口
IDataDictionary - 第(4)篇:三端通用数据列表接口
IDataList - 第(5)篇:三端通用数据访问执行器
IDataAccessExecutor
敬请关注。
本文链接:https://blog.csdn.net/flygoldfish/article/details/163055422?spm=1001.2014.3001.5501 欢迎转载。
–