4

我在 StringTemplate 的介绍中注意到以下内容:

StringTemplate 通过在对象 o 中查找属性 p 来解释 op。查找规则在语言端口之间略有不同,但通常它们遵循旧的 JavaBeans 命名约定。StringTemplate 首先查找方法 getP()、isP()、hasP()。如果它未能找到其中一种方法,它会查找名为 p 的字段。

这似乎与本文不符:http ://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf

通过本质上允许模型通过调用方法来提取数据,这难道不是为违反模型/视图分离打开了大门吗?一个糟糕的程序员可能会编写一个导致副作用的方法 getP()。ST如何在这里“严格”执行关注点分离?

4

1 回答 1

6

那里的每一种模板语言都可以做到这一点,Velocity、FreeMarker、StringTemplate 和 JSP/JSF 表达式语言。

关注点分离是程序员应该关心的,而不是视图。人们应该编写无副作用的 get/is/has 方法,以便任何人都可以调用它们而不必关心这些。这就是为什么这些方法应该是访问器,并且通常使用setSomething调用的方法应该是突变器。

如果有人编写自己的类并决定定义一个有副作用的getSomething方法,那么他们就违背了普遍的看法,并且这些工具在处理对象时不应该采取每一个假设,他们只是希望人们聪明而聪明会尊重常识并像其他人一样编写代码。

于 2011-07-31T03:23:46.827 回答