我们使用类似的模型构建了一套应用程序。
我们有一个所谓的 PageBuilder,它通过注入 UserControls 和 WebParts 来构造每个页面。
一切都是可配置的(页面布局、页面控件、控件位置等),因此无需更改页面、用户控件或 WebPart 中的任何代码。 (除非需要添加/更改某些功能)。
我们甚至在控件中进行配置和设置,以根据 SQL 查询、模式、当前页面等各种因素来改变行为。
基本上是这样工作的:
- 为当前页面创建布局表。
- 获取要显示的 UserControl 和 WebPart。
- 将每个 UserControl 和 WebPart 放在正确的位置。
- 将设置应用到每个 UserControl 和 WebPart。
所有 WebPart 都可以通过自定义发布者/订阅者事件模型相互通信。 IE。在 WebPart A 中,更改了下拉选择 => WebPart B 显示所选项目的数据。
此模型允许我们构建高度可配置的应用程序,客户可以在其中设计布局和行为,而无需我们参与。
您的模型似乎是我们模型的一个子集,我只能说它很容易使用。从开发人员和客户的角度来看。
编辑:
基本上,我们的框架由几个母版页和调用 PageBuilder 的基本页组成。
每个母版页用于不同类型的对象:页面、用户控件、WebPart、灯箱等。
每个 aspx 页面都包含一个用于 UserControls 和 WebParts 的 PlaceHolder。此 PlaceHolder 由 PageBuilder 填充。
我们的 aspx 页面中的 UserControl/WebPart PlaceHolder 可以填充我们想要的任何控件。所以根本不需要改变aspx页面。如果我们想要一个文本框,我们可以配置它。自定义 UserControl 或 WebPart 也是如此。这样我们就不需要为每个自定义应用程序重新创建 aspx 页面,而只需要更改配置即可。
我们有 100 多个用于各种 aspx 页面的用户控件和 WebPart,但大多数 aspx 页面看起来类似于:
<%@ Page MasterPageFile="main.master" ... %>
<asp:Content runat="server" ContentPlaceHolderID="Main" ID="MainSection">
<asp:PlaceHolder runat="server ID="UserControlPlaceHolder"></asp:PlaceHolder>
</asp:Content>
在代码隐藏中我们有类似的东西:
Partial Class MyPageClass Inherits BasePage
Protected Sub Page_Init(ByVal sender As Object, ByVal e as System.EventArgs) Handles Me.Init
'The following method is in the BasePage and is part of the PageBuilder.
LoadControls()
End Sub
End Class
PageBuilder 创建布局,然后在正确的位置加载并添加所有控件和 WebPart。
(布局,哪些控件和控件位置都是从配置中获取的。)
然后,PageBuilder 为每个控件和 WebPart 应用设置。这些设置也是可配置的。设置可以像控件的高度这样简单,也可以像“显示模式”这样更复杂的东西(静态、页面相关、组相关等)。
希望这能更详细地解释它。