Il linguaggio di programmazione Delphi
 

strati OOP

Sandra 31 Gen 2017 14:47
Normalmente ogni form si lega ad un Datamodule, tramite uses;
vorrei trovare un modo di slegare totalmente il form dal Datamodule,
inserendo un strato interme***** tra i due composto da Interface
dove Form e datamodule non siamno in collegamento tra loro

questa la nuova idea
-> <Form>
!
-> <modulo Inrterface> con classi
!
<datamodule>

invece della la classica
-> <Form>
!
-> <datamodule>

certamente si perderanno i rifermenti a design time, ma sarebbe comodo
avere questa separazione per gestioni diverse o di DB o con Webservices

Qualche spunto degli argomenti da inziare a cercare ?
4ndre4 31 Gen 2017 22:50
Se usi clientdataset e datasetprovider puoi comunque astrarre il modo in cui i
dati vengono recuperati e forniti ai cds (anche mediante REST). Non ti serve
creare uno strato interme*****, che vedo molto problematico da gestire. Il punto
di forza di Delphi sono proprio i collegamenti a design time.
Sandra 1 Feb 2017 12:08
Il 31/01/2017 22:50, 4ndre4 ha scritto:
>> Se usi clientdataset e datasetprovider puoi comunque astrarre il modo in cui
i dati vengono recuperati e forniti ai cds
>>(anche mediante REST). Non ti serve creare uno strato interme*****, che
vedo molto problematico da gestire.
>>Il punto di forza di Delphi sono proprio i collegamenti a design time.
>>

Non uso dbexpress, ma FireDac, con Rest (per Client/Server) dovrei
inserire qualcosa sul server e non è detto sia possibile farlo.
invece fattibile per Web come da documentazione
http://docwiki.embarcadero.com/RADStu*****/Seattle/en/Tutorial:_Using_a_REST_DataSnap_Server_with_an_Application_and_FireDAC

piccola divagazione .... ma in tema

A livello C/S trovo poco diverso (utile ?) usare Interface o
collegamento diretto

Se unit2 usa un DatoModule1 per MySql e DataModule2 per MsSql, alla fine
unit1 dovrà sempre fare riferimento a unit2 per accedere ai DataModule.

Mi sfugge proprio l'uso pratico delle Interface, dato che poi le
procedure/funzioni dichiarate andranno implementate sempre nella unit2

trovo la classe TMenuOperation e relative procedure, che potrei evitare,
implemetamdole nella classe TMenuOper

che dite sono fuori di testa (da rottamare come diceva qualcuno ....) ?
se non vedo la reale utilità di una cosa faccio fatica a metterla in
pratica.


//----------------
unit Unit3;

interface

type IMenuOperation = Interface
['{5D216A1D-C5CC-4BB8-B125-AC19C1141273}']
function LoadLanguage: boolean;
procedure LoadVociSrv(bState: boolean);

property LoadLg: boolean read LoadLanguage write LoadVociSrv;
End;

//----------------
unit Unit2;

interface

uses unit3;

type
TMenuOperation = class(TInterfacedObject, IMenuOperation)

private
FLoadLg: boolean;

function LoadLanguage: boolean;
procedure LoadVociSrv(bState: boolean);

public

published
property LoadLg: boolean read LoadLanguage;

end;

Type TMenuSet = class
private
clMenu : IMenuOperation;

public
procedure Load;

end;

implementation

{ TMenuOperation }

function TMenuOperation.LoadLanguage: boolean;
begin
//
end;

procedure TMenuOperation.LoadVociSrv(bState:boolean);
begin
//
end;

{ TMenuSet }

procedure TMenuSet.Load;
begin
if not Assigned(clMenu) then clMenu := TMenuOperation.Create;
clMenu.LoadLg;
end;

end.

//-----------------
unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
unit2;

type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
clMenuOperation: TMenuSet;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
clMenuOperation := TMenuSet.Create;
clMenuOperation.Load;
end;

end.
4ndre4 1 Feb 2017 16:10
On Wednesday, 1 February 2017 11:08:32 UTC, Sandra wrote:

>Non uso dbexpress, ma FireDac, con Rest (per Client/Server) dovrei
inserire qualcosa sul server e non è detto sia possibile farlo.

In che senso?

Le "interface" non sono altro che dichiarazioni di contratti che servono ad
estrarre le dipendenze tra classi e renderle piu` versatili (un'interfaccia puo`
essere implementata da classi che non appartengono necessariamente alla stessa
gerarchia).

Il modo in cui sono implementate in Delphi e` semplicemente orribile, portandosi
dietro inutili retaggi di COM - come le GUID.

Io capisco che tu voglia separare i due strati form/datamodule, e la ritengo
anche un'idea ingegneristicamente nobile, ma mi sembra possa finire per
complicare notevolmente la manutenzione del tuo software.

La dipendenza da database diversi si implementa puntando a driver distinti, ma
usando gli stessi componenti per leggere/scrivere i dati.

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione Delphi | Tutti i gruppi | it.comp.lang.delphi | Notizie e discussioni delphi | Delphi Mobile | Servizio di consultazione news.