Newsgroup: it.comp.lang.delphi
Titolo: Abuso di classe ?

Sto rivedendo un mio software alla luce dei concetti object oriented che sto 
imparando. Il che si traduce nella creazione di molte classi. Mi è venuto il 
dubbio che a volte io sia portato ad eccedere, ad abusare delle classi: Per 
esempio, in molte unit prima di usare un dataset, mi preoccupavo con delle 
istruzioni apposite, di salvare la situazione del dataset e alla fine di 
ripristinarla. Ne ho fatto la seguente classe. Vi chiedo la cortesia di 
criticarla e dirmi se in casi banali come questi l'uso di una classe è 
opportuno o inutile. Grazie
 
unit SaveRestoreCls;
{ La classe memorizza lo status di una TTable per ciò che concerne:
   - Aperta o Chiusa
   - Posizione del cursore di posizione (solo se la table è aperta)
   - Eventuale filtro
   - Stato del filtro (filtered true o false)    }
interface
 
uses DB, DBTables, dialogs;
 
type
  TSaveRestore = Class
    private
      FwasFiltered: boolean;
      FwasFilter: string;
      FwasActive: boolean;
      FBookmark: TBookmarkStr;
    public
      dsTable  : TTable;   //già esistente fuori dalla classe
      procedure SaveStatus;
      procedure RestoreStatus;
    published
      constructor Create(aTable: TTable);
  end;
 
implementation
 
constructor TSaveRestore.Create(aTable: TTable);
begin
  dsTable:= aTable;
end;
 
procedure TSaveRestore.SaveStatus;
begin
  with dsTable do
  begin
    // Salva lo status del dataset incluso un bookmark e
    // lascia il dataset nella situazione in cui è
    FwasFiltered:= filtered;
    FwasFilter:= filter;
    FwasActive:= active;
    if FWasActive then
      FBookmark:= dsTable.Bookmark
    else
      dsTable.Open;
  end;
end;
 
procedure TSaveRestore.RestoreStatus;
begin
  with dsTable do
  begin
    // Il chiamante, dopo aver usato il dataset ai suoi scopi, può
    // chiedere il suo ripristino allo Status inizialmente salvato
    active:= FwasActive;
    if FwasActive then
       Bookmark:= Bookmark;
    filter:= FwasFilter;
    filtered:= FwasFiltered;
    // fine ripristino
  end;
end;
 
end. 
 
 
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
https://www.avast.com/antivirus
 
 

    - Stato del filtro (filtered true o false)    }
 
In questo caso hai fatto bene a usare una classe. Rispetto ad avere
due funzioni che fanno salva e restore, qui hai incapsulato
i dati e se avrai bisogno di aggiungerne di altri non devi aggiungere
un parametro ogni volta che chiami le funzioni basta modificare la tua
classe e il resto del programma continua a lavorare senza richiedere
modifiche.
Inoltre basta poco per creare delle classi derivate che ti consentono
di salvare lo stato su file o in altri modi anche in questo caso con
poche modifiche localizzate invece che a spasso per il codice. 
 
Questo tipo di architettura e' molto simile un pattern conosciuto 
con il nome di "memento". (
https://it.wikipedia.org/wiki/Memento_pattern
)
 
Quindi per me sei sulla buona strada :)
 
ciao
Giacomo
 

"Giacomo Degli Esposti"  ha scritto nel messaggio 
news:d0d5a99f-7eb3-468f...@googlegroups.com...
In questo caso hai fatto bene a usare una classe. Rispetto ad avere
due funzioni che fanno salva e restore, qui hai incapsulato
i dati e se avrai bisogno di aggiungerne di altri non devi aggiungere
un parametro ogni volta che chiami le funzioni basta modificare la tua
classe e il resto del programma continua a lavorare senza richiedere
modifiche.
Inoltre basta poco per creare delle classi derivate che ti consentono
di salvare lo stato su file o in altri modi anche in questo caso con
poche modifiche localizzate invece che a spasso per il codice.
Questo tipo di architettura e' molto simile un pattern conosciuto
con il nome di "memento". (
https://it.wikipedia.org/wiki/Memento_pattern
)
Quindi per me sei sulla buona strada :)
ciao
Giacomo
---------------
Grazie davvero, apprezzo molto il tuo intervento e mi sento confortato, 
perchč ho molti dubbi a causa del fatto che non sono affatto un esperto. E 
grazie anche del link. 
 
 
---
Questa e-mail č priva di virus e malware perché č attiva la protezione avast! Antivirus.
https://www.avast.com/antivirus
 
 

 dubbio che a volte io sia portato ad eccedere, ad abusare delle classi
 
Dipende, ma in generale piu` modulare il tuo software e`, piu` e` testabile, per cui, a meno che non diventino un vero intralcio (e se sono progettate bene non lo sono), piu` classi hai, meglio e`. 
 
Considera che oggi si dovrebbe programmare *SOLO* in maniera TDD, e TDD porta, naturalmente, alla proliferazione di classi con relativi test.