![]() | 1 cominghome 2019-11-28 19:33:10 +08:00 我倒是想知道他是怎么把面向对象写成面向过程的,居然还提测了 |
![]() | 2 LeeChP OP @cominghome 全是方法类,没有一个抽象,没有一个接口。 |
![]() | 3 LeeChP OP @cominghome 他们说,他们独立测试测过了。但是他们根本不考虑联合测试! |
![]() | 4 petelin 2019-11-28 19:55:44 +08:00 via iPhone @cominghome 只要没有思考 没有抽象 组织 结构的写法 都是面向过程的 顺序的写代码。或者叫一次性代码 |
![]() | 6 LeeChP OP @petelin 你说的没错,没有任何思考。没有任何思考。对接起来,有一些我需要调用到他们的方法,都没有办法复用,百分之八十以上需要重写。状态校验根本就是糊弄 |
![]() | 7 TypeError 2019-11-28 23:53:06 +08:00 via Android 怎么招进来的 |
![]() | 8 sagaxu 2019-11-29 01:09:51 +08:00 via Android ![]() 模块之间的 API 都没定好,你们就能开始写代码了吗?如果是这样,团队里一个靠谱的人都没有。 模块之间符合 API 定义,你管人家内部怎么实现,即使一个接口和抽象类都没有又有什么关系?写一堆接口,然后大部分接口只有一种实现,我觉得那是过度封装。 |
![]() | 9 trait 2019-11-29 01:27:32 +08:00 via iPhone 这种人适合 go,不用动脑子想什么内存管理组织结构,随便瞎写也有 gc 兜底 |
![]() | 10 LeeChP OP @sagaxu api 其实早就讨论烂了,但是文档不看,代码不看,之前忙,我也没空看他们代码!我根据需求来,他们是想什么就做什么。就在前几天提醒他们添加状态切换标记,实例代码都给他们,剩下的就是体力活了,还他妈的不乐意,要手把手教,那还不如我自己去做。 现在是由于他们自己的模块没有做完整,状态触发检验缺失,我相当于在扩展他们的模块功能,由于他们没有做封装,我两个状态量的检验就 cv 到了他们三个类中,第一版本有接近 40 个!大量重复性代码,改拆的不拆,抽象几个基类出来,或者做成接口,能省多少精力?明白这种做法缺失什么了嘛?没错,缺乏可拓展性,可维护性。典型的写一个版本就跑路的做法! 这样说,就相当于,我要 A 实现跑的行为,我要去 A 写一个跑的方法,我要 B 实现走路的行为,要去 B 类中写一个走的方法在他们模块中,我要 C 实现竞走这个行为,要去 C 类中实现竞走的方法!这种级别的抽象,他们都做不来。没错,就是这种级别的抽象! 由于每一个行为都是被观察的对象,但是他们不做抽象,所以我每一个类中都要去实现一个 subject 接口,然后覆写添加,移除,通知的方法,惊不惊喜,刺不刺激,意不意外? |
11 charlie21 2019-11-29 05:49:06 +08:00 via iPhone 啥项目阿 网站么 |
12 df4VW 2019-11-29 07:00:28 +08:00 上 gRPC 吧。。专治各种天马行空 |
![]() | 13 sagaxu 2019-11-29 09:24:07 +08:00 via Android @LeeChP 这事很复杂吗,模块职责和边界划分好,API 订好,集成不起来,追责也就明确了。API 没定好是设计的锅,实现不好是具体开发的锅。 把经常出锅的人排除在项目之外,团队合作会越来越顺畅。一有问题就自己上去扑火,对自己对团队氛围都不好。 |
14 kneep 2019-11-29 09:30:15 +08:00 via iPhone 搞 C 的人转 Java,不用看哈,肯定就是工具类加静态方法 |
16 Junjunya 2019-11-29 11:48:36 +08:00 看了半天,感觉这事和 C 语言有啥关系,明明是开发水平的问题 |
![]() | 17 LeeChP OP @Junjunya 因为他们的代码像极了我处于用 c 写 hello. word 那时候的水平。因为就算用 C.该解耦的依旧能解耦,只不过没有那些高大上名词罢了 |
18 aldenchang 2019-11-29 13:26:29 +08:00 via iPhone 面向对象不会用…c 语言躺着中枪 |
19 phx13ye 2019-11-29 14:16:40 +08:00 ![]() 我寻思 redis 和 linux-kernel 代码写的挺漂亮的啊 |
![]() | 20 ivvei 2019-11-29 14:20:37 +08:00 没看懂你在说什么东西,能给点代码举个例么。 |
![]() | 21 Nazz 2019-11-29 15:38:35 +08:00 和 java 出身的人一起写 golang, 我也很难受 |
![]() | 22 wellhome 2019-11-29 17:03:42 +08:00 via iPhone ![]() 没看懂,有些业务真心没觉得一定要 oo. oo 不是万能药,这个抽像那个抽像 你怎么不把 printf 抽像了? |
![]() | 23 xpol 2019-11-29 17:30:13 +08:00 via iPhone 你说的这些都是个人工程能力、不关 C 语言的事。 |
![]() | 24 axwz88 2019-11-29 17:41:13 +08:00 via Android @wellhome 歪个楼,我也很反感这种为了抽象而抽象,为了封装而封装,什么鸡毛都要做成接口,脱裤子放屁(不是针对楼主) |
25 strider 2019-11-29 17:44:58 +08:00 这个跟 c 语言没关系。 |
![]() | 27 uyhyygyug1234 2019-11-29 20:17:33 +08:00 @df4VW 这个可以详细讲讲么 |
![]() | 30 wellhome 2019-11-29 20:29:13 +08:00 via iPhone @axwz88 我也不是针对楼主。我看到一共只有三四行的类,就脑仁疼,而且名字都是老长老长的,这得亏有 ide 自动补齐,否则光敲这些个名字就累死人 |
31 inwar 2019-11-30 10:32:56 +08:00 via Android 写 c 的日常是全局变量函数返回 void,入参当作指针用。我接过这样的 java,比楼主难过 |
![]() | 32 IGJacklove 2019-11-30 13:10:21 +08:00 @wellhome Java 这边就是这种风格的,方法或参数的名字尽量表达明确,长不是问题,就怕 来个 int n, m 这种的,我看个代码参数还要看上下文才能明白。 |
33 yingo 2019-11-30 14:59:39 +08:00 和语言无关 |
![]() | 34 shawnsh 2019-11-30 15:52:41 +08:00 C 语言也有接口,抽象 |
35 xsen 2019-11-30 16:38:29 +08:00 Java 这种为了抽象而抽象还算好的,毕竟灵活度没 C++高。恶心的就是,用 C++做的,然后为了设计而设计,为了抽象而抽象简单点就是过度设计,用烂了,一堆坑,全是坑。 更恶心的是没注释,没文档;变量命名用的全是缩写有拼音缩写的,有英文缩写的 当然,代码量还大,将近上百 M 的代码量 这也是为什么很多人现在,毕竟喜欢 go 那样的风格。简单,清晰语言层面提供足够多的基础功能 |
36 xsen 2019-11-30 16:41:05 +08:00 楼主说的这种呢,就是需要一个人,把整个框架搭建起来,定义清晰的接口,实现模块或子系统之间的接口层 然后子模块子系统内部,你管他怎么做 还有,建议没事不要用继承了,很容易滥用,不可控。组合配合清晰的设计,是最理想的 |
37 firefox12 2019-11-30 21:42:51 +08:00 我寻思着 这里就没一个靠谱的人, 缺一个架构师, 需要一个人在 2 个团队 在交互前,把你们交互的方式 方法 如何调用,公共定义,职责都定义清楚。然后 大家面向接口编程,至于别人的代码怎么写,写多烂你管得着吗? 只要给你的接口可以工作,就 ok. 这里最大的问题 是根本没人搞过这个, 还说别人烂? 这就是项目管理烂, 架构设计烂,代码烂不烂的已经不重要了。 我买的是个门锁,只要能装上去,插上钥匙可以打开 就可以,你管我里面是怎么工作的。你根本没定义门锁和门的接口,还来说我门锁设计得不好? |
![]() | 38 mikulch 2019-12-02 22:16:14 +08:00 via iPhone 工程能力好的人可遇不可求,而且有时候这些人工资不一定高。因为做的都是一些细的,似乎不太明显的活。 |