代码重构 —— 化繁为简

本文涉及 KISS原则,DRY原则

1 设计层面

1.1 保持架构的一致性,不要另辟新径

比如渲染场景管理中,最扁平的架构:manager / scener / object 三层。

  • 都是1对N的关系
  • 一个mgr管理一群scener,一个scener下面N个object,

一些新手会把object搞成一个,在object下面搞一层 layer,最终object的含义非常不同了,

让我也"眼前一亮",居然还能这么扩展

1.2 coding的时候,多想一步,不要无脑的直接干

比如类或者结构体,业务A一个struct,业务B一个struct。

好处:物理隔离 没有风险,不会出错,

坏处:代码碰撞,结构体膨胀,

不够简洁,同时触犯了DRY,do not repeat yourself,

2 实战

拿RHI模块来说。见过撇足的设计,耦合了大量的业务类。RHI定义了一层shader,业务模块中又大量的派生,定义出来

cpp 复制代码
XXXShader : public RHI::shader {}
YYYShader : public RHI::shader {}

不止shader,program,renderer都是配套的,无谓的封装导致结构体膨胀,代码大量冗余。一个业务3个类,N个业务 3*N的增长。

如何解决呢?

结构体本质是不同类型的集合,采用反射的形式进行抽象和提炼。

1)函数的形式:

cpp 复制代码
setUniform1f("key", v1f)
setUniform4f("key", v4f)
setUniformMat44("mvp", mat)

2)静态存储的形式

map< std::key, std::any> ,类似lua的metatable,

any在c++17之后采用,自己网上找一个就行。

3 推广

同样的道理,JNI的交互也经常遇到这类问题。

不好的设计,Java中的一个类,为了对应c++的一个类,硬生生的在JNI层又搞了一个类JXXX 类管理反射相关的信息。

cpp 复制代码
class GuideAreaLayerConfig
{
public:
    std::string day_tex;
    std::string night_tex;
    float erase_dis;
}

class JGuideAreaLayerConfig {
public:
    static jobject ToJavaObject(JNIEnv* env, const GuideAreaLayerConfig& layer_config);
    static GuideAreaLayerConfig Parse(JNIEnv* env, jobject obj);
    static void RegisterMe(JNIEnv* env);
public:
  static jclass clazz;
  static jfieldID textureDay;
  static jfieldID textureNight;
  static jfieldID eraseDis;
};
java 复制代码
class GuideAreaLayerConfig extends LayerBaseConfig {
    public GuideAreaLayerConfig() {
    }

    public float eraseDis = 3;
    public String textureDay = "";
    public String textureNight = "";
}

也可以利用反射的形式,采用map进行抽象管理,大幅度压缩代码。JNI的类型setter和getter 自有一套。

相关推荐
zdsji1 天前
从零开始物理引擎(六)- 重构完成与MVP理解
c++·算法·重构·ue5·游戏引擎
AI量化投资实验室1 天前
年化26.9%的稳健策略|polars重构因子计算引擎(python策略下载)
开发语言·python·重构
homelook1 天前
8节串联锂离子电池组可重构buck-boost均衡拓扑结构 simulink模型仿真
重构
BillKu1 天前
Vue3 + TypeScript,使用祖先传后代模式重构父传子模式
前端·javascript·重构
朴拙数科1 天前
MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构,基于2025年技术演进与产业实践
人工智能·重构
安 当 加 密2 天前
数据库勒索病毒威胁升级:企业数据安全防线如何用安当RDM组件重构
网络·数据库·重构
常达物联2 天前
RFID图书管理系统如何重构数字化仓储管理新生态
重构·rfid软件·rfid系统·rfid技术·固定资产管理
资讯分享周4 天前
破局遗留系统!AI自动化重构:从静态方法到Spring Bean注入实战
spring·重构·自动化
2401_840759764 天前
《Cangjie Magic实战手记:用Agent DSL与MCP协议重构智能物流调度系统》——一次从技术困惑到行业落地的探索之旅
重构
跨境卫士-小卓4 天前
50%时效提升!中巴新航线如何重构ebay跨境电商物流成本?
经验分享·重构