We've built a suite of applications using a similar model.
We have a so called PageBuilder which constructs each page by injecting UserControls and WebParts.
Everything is configurable (page layout, page controls, control position, etc.) so there is no need to change any code in the pages, UserControls or the WebParts. (Unless some functionality needs to be added/changed).
We even have configuration and settings within controls to change behaviour depending on various things like SQL queries, mode, current page, etc.
Basicly it works like this:
- Create a layout table for the current page.
- Get the UserControls and WebParts to display.
- Put each UserControl and WebPart in the right position.
- Apply settings to each UserControl and WebPart.
All WebParts can communicate with each other by a custom publisher/subscriber event model. I.e. In WebPart A a dropdown selection is changed => WebPart B shows data for the selected item.
This model allows us to build highly configurable applications where customers can design the layout and behaviour without the need for us to be involved.
Your model seems to be a subset of our model and all I can say is that it's easy to work with. Both from a developers point of view and a customers.
Edit:
Basicly our framework consist of a few master pages and base pages which calls the PageBuilder.
Each masterpage is used for different types of objects: pages, UserControls, WebPart, Lightboxes, etc.
Each aspx page contains a PlaceHolder for UserControls and WebParts. This PlaceHolder is populated by the PageBuilder.
The UserControl/WebPart PlaceHolder in our aspx pages can be populated with whatever control we want. So there is no need to change the aspx page at all. If we want a textbox we can configure this. Same goes for a custom UserControl or a WebPart. In this way we don't need to recreate the aspx pages for each custom application but need to only change configuration.
We have 100+ UserControls and WebParts for the various aspx pages but most aspx pages look similar to:
<%@ Page MasterPageFile="main.master" ... %>
<asp:Content runat="server" ContentPlaceHolderID="Main" ID="MainSection">
<asp:PlaceHolder runat="server ID="UserControlPlaceHolder"></asp:PlaceHolder>
</asp:Content>
in the codebehind we have something like:
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
The PageBuilder creates the layout then loads and adds all Controls and WebParts in the right position.
(the layout, which controls and control position are all fetched from the configuration.)
Then the PageBuilder applies settings for each Control and WebPart. These settings are also configurable. Settings can be something as simple as the height of the control or more complicated things like "display mode" (static, page dependant, group dependant, etc.).
Hopefully this explains it in more detail.