简单地说,请你告诉我“两步视图”和“复合视图”布局设计模式之间的区别?
Answer 1:
复合视图 ,顾名思义,是一个综合意见的(如GOF模式)。 这意味着复合视图是其他的树结构(复合, 模板 , 变换 ,...)的意见,您可以通过根复合视图对象统一处理。
如果客户端分发到根视图,它就会分派到树结构中的所有意见,从而产生结果页面。 所以在综合意见,没有两步,但只有一个,因为每个人视图是(具体的最终输出的)一步查看。
使用由多个原子子视图的综合意见。 整体模板的每个子视图可以动态地在全包括在内,并在页面的布局可以独立于内容进行管理。
在简化的伪代码:
composite = new CompositeView;
composite.add(new HeaderView(headerData));
composite.add(new TableView(tableData));
…
composite.add(new FooterView(footerData));
composite.render();
这是从不同的两步视图 ,所述两步观不是复合材料,但是只需两个步骤执行的,首先从域数据至该数据的逻辑屏幕表示,然后在混凝土输出格式。 也就是说,分离的逻辑结构和页面的格式。
两步视图通过拆分转型分为两个阶段这个问题的交易。 第一变换模型数据转换成没有任何特定的格式的逻辑表示; 第二个转变是需要与实际的格式化逻辑的介绍。
在简化的伪代码:
twoStepView = new TwoStepView;
twoStepView.setData(data);
twoStepView.setFirstStep(new ConcreteScreen);
twoStepView.setSecondStep(new ConcreteHtmlScreen);
twoStepView.transform();
正如你所看到的,两步视图仅编排两个步骤。 举例来说,如果你的两步查看使用XSLT,它只会处理从输入XML到屏幕XML到最终的HTML输出的转变。 那么具体的屏幕和ConcreteHTMLScreen将是XSLT模板。
Answer 2:
我看“复合视图”作为建议您通过成分设计你的意见,或组合更小的部分(子视图)创建整个设计模式 - 这适合于增加可重用性和可维护性好。
“两步骤查看”,而另一方面,更多的是一种具体的实施复合视图设计模式中,主要是由Zend框架布局驱动的。 此实现建议您定义所有内容的子视图第一(步骤1),然后允许的layout
呈现在呈现的HTML(步骤2)中的适当位置的子视图。
我一般是一个布局模式的粉丝,但发现两个步骤(和第一定义所有的子视图)限制的想法。 我倾向于更沿的Smarty 3的如何扩展/砌块功能的工作原理的线条认为布局:
http://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl
像Smarty的功能不具有在其组成步骤的固定数量 - 即布局可以扩展布局和子视图可以由另外的子图,等
希望帮助。