楊_宵夜
Roger的留言, 本人不才, 想试着从"Control标准化"和"代码可重用"的角度来回答下:
仔细看那个检查表单信息的例子, 叫做check_form_XXX(), 是针对特定的一个form的, 那么自然而然会有check_form_YYY()和check_form_ZZZ()等等...
所以说, 这个form校验例子中,
1. 最简单的Control部分就是遍历表单fields.
2. 然后, 虽然是不同的field, 但相同的type是做相同逻辑的校验;
3. 如果还想提供"将整个form拆成不同的part, 用并发来遍历"这种Control的话, 抽象出来的check_form()函数还可以提供并发的版本;
那么单单是以上3点, 全部都是"可标准化"的, 并且"可重用"的, 并不影响<业务的logic>;
那么, 当有了check_from()这个Control之后, 真正决定业务的<业务的logic>, 有:
1. 每个field分别是什么type? 是text? 是password? 还是email?
2. 每个field的最低长度是多少? 类似的还有每个field的最大长度?
3. 等等...
以上的问题, 决定了这个field通过校验的条件是什么?
而这个条件是无法"标准化"的, 因为一个复杂系统的每个form的field不可能是一模一样的;
所以这些"条件", 就由陈老师写出的DSL来提供;
因此最后就变成了, check_form()提供一套"标准"来校验每个表单, 而每个表单只需要告诉check_form()说: "我有这些东西, 你帮我校验一下"; 而这样的说法, 又有了些委托模式的味道了;
总而言之, 个人愚见: Control和Logic部分的一个肉眼可见的界线就是: 是否可以标准化??
因本人较熟悉Java, 再扩展来说, 全局的工具类就是一种全局Control, 而一个类中的private方法大致可以认为是这个类中的Control. (仅为一种思路, 未经推敲);