Jho*_*lla 6 oop model-view-controller design-patterns
简单来说,您能告诉我"两步视图"和"复合视图"布局设计模式之间的区别吗?
Gor*_*don 21
顾名思义,Composite View是Views 的Composite(如GOF模式).这意味着Composite View是其他(Composite,Template,Transform,...)视图的树结构,您可以通过根Composite View对象统一处理.

如果客户端调度到根视图,它将调度到树结构中的所有视图,从而创建结果页面.因此在复合视图中,没有两个步骤,只有一个步骤,因为每个单独的视图是一步一步的视图(具体的最终输出).
使用由多个原子子视图组成的复合视图.整个模板的每个子视图可以整体动态地包括在内,并且可以独立于内容来管理页面的布局.
在简化的伪代码中:
composite = new CompositeView;
composite.add(new HeaderView(headerData));
composite.add(new TableView(tableData));
…
composite.add(new FooterView(footerData));
composite.render();
Run Code Online (Sandbox Code Playgroud)
这与Two-Step-View的不同之处在于,Two-Step-View不是Composite,而只是两个执行步骤,首先是从Domain Data到该数据的逻辑屏幕表示,然后是具体的输出格式.也就是说,它分离了逻辑结构和页面格式.

两步查看通过将转换分为两个阶段来处理此问题.第一种方法将模型数据转换为逻辑表示,没有任何特定的格式; 第二个将逻辑表示转换为所需的实际格式.
在简化的伪代码中:
twoStepView = new TwoStepView;
twoStepView.setData(data);
twoStepView.setFirstStep(new ConcreteScreen);
twoStepView.setSecondStep(new ConcreteHtmlScreen);
twoStepView.transform();
Run Code Online (Sandbox Code Playgroud)
如您所见,两步视图只是编排这两个步骤.例如,如果您的Two-Step-View使用XSLT,它只会处理从输入XML到Screen XML到最终HTML输出的转换.混凝土屏幕和ConcreteHTMLScreen将成为XSLT模板.