V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liuidetmks
V2EX  ›  程序员

typescript 大类拆分成多文件方案?

  •  1
     
  •   liuidetmks · 2022-05-27 14:06:09 +08:00 · 2159 次点击
    这是一个创建于 944 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个类 A,里面有很多方法,可能有互相调用,代码很多,是在是忍不了了,想拆分成多个文件
    搜了下,ts 原生好像不支持。网上搜的方法都是要对代码改动比较多。
    目前想到一个较少改动的,(只需要 复制-粘贴)
    就是把想归集的方法写到一起
    依次继承,
    最后只要暴露最下面的类

    但是要保证继承顺序,还是有些繁琐,
    请问有更好的方式吗?(不改业务代码,或者极少改动)

    a,b,c 这三个方法可能有互相调用的情况

    class A {
        a(){    }  //业务代码
        b(){    }  // 业务代码
        c(){    } // 业务代码
    }
    
    

    ------------- 拆分后,各个类放在不同文件----------

    /// a.ts
    class A_0{
        a(){} // 空 body
        b(){} // 空 body
        c(){} // 空 body
    }
    
    
    class A_a extends A_0{
        a(){
            /// 实际代码
        } 
    }
    
    // b.ts
    class A_b extends A_a{
        b(){
            /// 实际代码
        } 
    }
    
    // c.ts
    class A_c extends A_b{
        c(){
            /// 实际代码
        } 
    }
    
    
    
    /// 暴露给外面使用
    class A extends A_c{
        
    }
    
    8 条回复    2022-05-28 22:31:21 +08:00
    lzgshsj
        1
    lzgshsj  
       2022-05-27 14:13:29 +08:00
    感觉不能治本,代码耦合度太高了。但是你的要求又是极少改动。。。感觉以后会成屎山
    codehz
        2
    codehz  
       2022-05-27 14:21:09 +08:00
    你这拆分还不如不拆分呢,想清楚目的再决策
    eason1874
        3
    eason1874  
       2022-05-27 14:22:08 +08:00   ❤️ 1
    因为业务需要,在一个大类中有上百个方法,近万行代码,并不奇怪

    为了抽象而抽象,人为提高代码组织复杂度,这才是毛病,得改掉
    taowen
        4
    taowen  
       2022-05-27 14:26:11 +08:00
    拆成多个类不就行了么……
    0x2CA
        5
    0x2CA  
       2022-05-27 20:14:40 +08:00
    组合优与继承。。。,直接职能拆分,拆分成多个类
    ychost
        6
    ychost  
       2022-05-28 14:54:59 +08:00
    ts 貌似没有 C# 的 partial class ,不过一个 class 方法多也问题不大,高度内聚就行
    lblblong
        7
    lblblong  
       2022-05-28 22:29:39 +08:00   ❤️ 1
    lblblong
        8
    lblblong  
       2022-05-28 22:31:21 +08:00
    我这个库就用了大量 mixin: https://github.com/lblblong/wechat-api-next
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2658 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:31 · PVG 23:31 · LAX 07:31 · JFK 10:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.