【编程】(1)-跨平台跨语言C#、Java、鸿蒙ArkTS三端通用实体接口

【编程】(1)-跨平台跨语言C#、Java、鸿蒙ArkTS三端通用实体接口

咏方舟-长江支流 2026-07-20

前言

最近在做一个轻量级框架,准备开源发布到Git,先在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# 端

csharp 复制代码
using System;

namespace UserBaoTech.Foundation.Entities
{
    /// <summary>
    /// 实体接口 IEntity 是用宝框架的底层保留 ID 做增删改的契约,表示该类是一个领域实体,实体基接口(所有领域实体必须实现)。
    /// 泛型设计,不仅让主键可以是字符、数字、GUID,也可以支持组合主键。
    /// Java、鸿蒙 ArkTS、C# 三端通用。
    /// </summary>
    /// <typeparam name="TKey">主键类型</typeparam>
    public interface IEntity<TKey>
    {
        TKey Id { get; set; }
    }

    /// <summary>
    /// 默认主键为 string 的实体接口(大部分场景使用)
    /// </summary>
    public interface IEntity : IEntity<string>
    {
    }
}

Java 端

java 复制代码
package com.userbaotech.foundation.entities;

/**
 * 实体接口 IEntity 是框架的底层保留 ID 做增删改的契约。
 * 泛型设计,主键可以是 String、Integer、Long、UUID 或自定义复合类型。
 * C#、Java、鸿蒙 ArkTS 三端通用。
 */
public interface IEntity<TKey> {
    TKey getId();
    void setId(TKey id);
}

/**
 * 默认主键为 String 的实体接口
 */
public interface IEntity extends IEntity<String> {
}

鸿蒙 ArkTS 端

注意,鸿蒙ArkTS,就不要这么写的,ArkTS要接口、类、方法上支持默认处理方式。动动手试试吧,实践最重要。

typescript 复制代码
/**
 * 实体接口 IEntity 是框架的底层保留 ID 做增删改的契约。
 * 泛型设计,主键可以是 string、number、UUID 或自定义复合类型。
 * C#、Java、鸿蒙 ArkTS 三端通用。
 */
export interface IEntity<TKey> {
    id: TKey;
}

/**
 * 默认主键为 string 的实体接口
 */
export interface IEntity extends IEntity<string> {
}

ArkTS 也支持默认泛型参数,并且支持默认参数:

typescript 复制代码
export interface IEntity<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> 的类,无论它是静态实体还是动态实体,都可以无缝接入用宝框架的增删改查体系。

后续预告

三端通用接口系列持续更新:

敬请关注。


本文链接:https://blog.csdn.net/flygoldfish/article/details/163055422?spm=1001.2014.3001.5501 欢迎转载。

--

相关推荐
Wang's Blog2 分钟前
Java 项目部署之 Docker工具快速入门: Docker 架构拆解:镜像、容器、守护进程与 Registry
java·docker·架构
栗子~~4 分钟前
SpringCloud Gateway 基于 Nacos 实现动态路由
java·spring cloud·gateway
FYKJ_201011 分钟前
django个性化新闻推荐35173-计算机课程设计、毕业设计
java·spring boot·后端·python·架构·django·课程设计
李福春11 分钟前
技术思考问题2:AI 编程高效的关键,是更强模型还是更清晰的问题定义?
ai编程·工程效能·vibe coding·深圳同盟·腾讯云架构师技术同盟·能力圈·检查清单
计算机毕设定制辅导-无忧学长20 分钟前
《校园食堂在线订餐小程序的设计与实现》
java·vue.js·spring boot·微信小程序·uniapp·校园食堂在线订餐小程序
夜之眷属26 分钟前
服务启动即崩:InetAddress.getLocalHost() 抛 UnknownHostException 排查记
java·运维·后端·docker
IT研究室28 分钟前
最新计算机毕业设计选题推荐-基于spring boot的食品安全信息管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
小虎AI生活29 分钟前
AI 替掉重复劳动后,把人转向获客侧的实操方法(附提示词模板)
aigc·ai编程
CV工程师丁Sir1 小时前
# ArkWeb 手记 03|本地资源加载与 $rawfile 路径踩坑
harmonyos
Sayai1 小时前
MCP Server 开发实战:Spring AI 把后端日志查询暴露给 AI Agent(7 条设计原则与踩坑实录)
java·人工智能·ai agent·spring ai·mcp