【发布时间】:2019-05-23 05:07:01
【问题描述】:
举个例子,考虑一组超市购物者可以享受的折扣。
我们可以以某种标准方式将这些规则定义为数据(合格商品列表、适用日期、优惠券代码)并编写通用代码来处理这些。或者,我们可以将每个代码写成一段代码,根据客户的购物清单检查适当的东西并返回任何适用的折扣。
您可以合理地将规则存储为对象、序列化为 Blob 或存储在代码文件中,以便每个规则可以选择自己的数据和代码划分,以允许未来的规则不适合通用处理器的类型上面考虑过。
通常很容易批评混合数据的代码,通过 if 语句检查应该在文件或数据库中的 6 种不同内容,但是有没有一条规则可以在边缘情况下有所帮助?
或者这就是面向对象设计的重点,让我们不再担心数据和代码之间的界限?
为了澄清,根本问题是:您将如何编写上述示例?是否有经验法则让您决定什么是数据,什么是代码?
(注意:我知道,代码可以编译,但在动态语言和 JIT 编译的世界中,即使这是一个模糊的概念。)
【问题讨论】:
-
能否请您澄清这个问题。您的主要问题是主题,还是您实际在问什么?
-
问题可能真的是你如何决定在代码中设置什么以及在数据中编码什么?
-
@JoonasPulakka:我在 MSDN 上的 What Is a Window? 中看到“代码和数据”,我在 MSDN 上的“窗口句柄”部分中说:“Windows 是对象——它们既有代码又有数据——但它们是不是 C++ 类。相反,程序通过使用称为句柄的值来引用窗口”,我想知道它们之间有什么区别!
标签: language-agnostic data-structures oop functional-programming