回帖整理: 做个记号

对下面这篇文章, 我更多的关注的不是该文作者所关注的话题, 而是该文所体现出来的问题: 面向对象给我们带来的帮助的和限制. 最近研究一种自由的编程方式, 暂时叫做"面向概念"吧, 如果能经过实践考验, 会拿出来说说~

Strategy VS Mixin

精华, 精华 :)

抛砖引玉, 多说几个问题:

1. 现在越来越多的人意识到LZ说的这些问题了. 不过, 所有的ObjInterface.DoSomething(), 其实质都是 DoSomething(ObjInterface obj). 管它叫作Extend也好, Mixin也好, 实际上还是摆脱不了对接口的依赖. 尤其是面向对象的依赖方式, 往往是"厚重的胶合层"的罪魁祸首. 依赖于清晰定义的接口, 是四海一家的解决之道吗?

2. 有的时候, 只是接口的问题, 对于C#这样的, 可以用反射生成子类的方式, Mixin接口, 会比Extend更简洁和漂亮一些;未来还有Dynamic Interface. 可惜如果是添加功能实现, 也就只能Extend了, 因为反射生成子类的方式和Extend起到的效果是一样的. 另外, 鉴于1, Extend的局限性在于, 它并不能在内部改变对象的状态, 这使得它不过是更漂亮的自由函数而已.

3. 本质上是多主语的情况呢? 很多问题的实质是DoSomething(ObjInterface1 obj1, ObjInterface2 obj2), 面向对象语言对于这些情况, 表达能力实在是有限.

4. 关于本文, 还有一点需要考虑的, 就是Strategy和Extend, 很多时候, 其实并不是选这个更好还是选那个更好. Strategy达到的是运行期多态的目的, 而Extend则没有这方面的考虑: 代码一旦写下去, 运行期你不能再更换Extend出来的行为, 虽然可能有一些技巧可以应用, 但这不是本质上的.

个人认为, 在C#, Java上出现的这些问题, 实质上是面向对象的限制. 能用现有手段扩充的, 就用现有手段扩充; 其它的, 我看现在是需要一些新的思维来解决的时候了.

posted on   怪怪  阅读(2635)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器

导航

< 2008年2月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示