Martin Fowler的PoEAA catalog就像是Ruby gems和Rails模块的存储库,例如Rails的ActiveRecord ORM基于Fowler的ActiveRecord,DataMaper gem基于Data Mapper pattern {3}}。在Ruby中是否有任何有用的Martin Fowler two-step view pattern实现,例如:与模板引擎结合使用?
答案 0 :(得分:1)
该模式分两步将域数据转换为HTML。如果您想将视图组合成分离的,可重用的视图组件,那将特别有趣。
实现两步视图的一种可能解决方案似乎是XSLT transformation,例如XML and Nokogiri。这意味着要创建页面的中间xml表示:
第二种可能的解决方案是使用JS模板引擎,如vue.js,KnockoutJS,Ractive.js或React。 Rails执行第一步并创建中间视图,JS模板引擎创建第二步:
答案 1 :(得分:0)
这对我来说是一种新模式,但我可以通过两种方式对其进行概念化。模式的核心似乎是首先构建一个中间表示,然后通过格式化步骤运行它。在每种情况下,结果都是一个看起来相同的视图,无论显示哪个类的ActiveRecord模型。
使用Presenter库(Draper,ActiveDecorator,roll-your-own),您可以将多个ActiveRecord类规范化为单个公共API。然后编写一个可以使用该API呈现对象的视图模板。
在这种情况下,您需要为每个需要渲染的ActiveRecord类创建一个视图模板和一个Presenter对象。如果需要向页面添加新数据,则必须触摸模板和所有Presenter类。
这很奇怪,但我认为HTML是表示数据的有效格式,可以被视为中间的,无格式的表示。
在这种情况下,您为每个生成(几乎)相同HTML的ActiveRecord类创建一个视图模板(可能是部分的,可能是polymorphic)。然后使用CSS组件框架将HTML“格式化”为相同的渲染。 HTML不需要严格相同,只要它完全符合组件框架的期望即可。在此处添加数据意味着更改每个视图模板(CSS通常不需要修改)。
我认为这两种方法都是有效的。第二种感觉对我来说更像“轨道”,但我认为它与模式的精神背道而驰,即使它在技术上符合(这可能是有争议的)。