Desconozco totalmente el framework que comentas, aun asi te comparto mi opinion.
Uno de los paradigmas mas populares es tener el MainForm como comentas y ponerle un
TTabControl. Aca un
pequeño tutorial
A mi particularmente me gusta ocultar las pestañas, seteando la propiedad
TabPosition al valor
TTabPosition.None
De este modo la unica forma de navegar es hacerlo programaticamente (es decir, cambiando la propiedad
ActiveTab o bien por el indice, usando
TabIndex). Nuevamente mi estilo preferido de hacerlo es usando el metodo
SetActiveTabWithTransition ya que de este modo se realiza la tipica animacion deslizante y queda mucho mas elegante. Tambien es posible usar descendientes especializados de
TAcion, tales como
TNextTabAction y
TPreviousTabAction
Ejemplo aca
Luego lo que suelo hacer es crear un menu (
inspirado en los de las aplicaciones de Google), para esto utilizo
TMultiView. Acá
hay un ejemplo y si revisas en los ejemplos que vienen con Delphi todavia hay mas. Tipicamente dentro del
TMultiView metes botones o un listbox o algo que implemente un menu. Luego conectas cada menu con el
TAction que muestra el Frame que corresponda o bien escribes eventos estilo
OnClick
Luego lo que sigue es tanto meter
TFrames como comentas o si quieres
TForms dentro de las pestañas. En Firemonkey tenes gran flexibilidad a la hora de crear controles compuestos, porque cualquier control puede ser contenedor de otros controles. Esto hace posible que puedas meter un Frame entero dentro de un
TTabItem. Para hacerlo basta con tener un procedimiento
asi, en donde en realidad se puede escribir de esta manera para que sea mas flexible:
Código Delphi
[-]
procedure EmbedControl(const Target: TControl; const Parent: TFmxObject);
begin
while Target.ControlsCount > 0 do
Target.Children[0].Parent := Parent;
end;
Luego para crear los Form/Frame bajo demanda basta con utilizar propiedades dentro de tu Form principal, de este estilo:
Código Delphi
[-]
function GetFrameXXX: TFrameXXX;
begin
if not Assigned(FFrameXXX) then
begin
FFrameXXX := TFrameXXX.Create(Self);
EmbedControl(FFrameXXX, TabControl1.Tabs[Indice]);
end;
Result := FFrameXXX;
end;
Si lo que queres es ahorrar memoria al maximo, quiza lo ideal sea realizar la creacion del Frame cuando realizas el cambio de pestaña (es decir, cuando hacen click en el menu, creas el Frame, lo incrustas en la nueva pestaña y luego cambias la pestaña activa) y no mantener variables de instancia
Con respecto al acceso a datos y CRUD, no hay diferencias en cuanto a la programacion multicapas con la VCL. Sigues accediendo al servidor DataSnap a traves de la clase proxy que generan los asistentes (
TServerMethodsClient). Lo que quiza si cambia un poco es la presentacion, aunque cosas como
LiveBindings (a mi no me gustan mucho) te pueden ahorrar tiempo y hacer la curva de aprendizaje mas amigable