|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[C#]Dubbio Interfacce/ereditarietà
Ciao
Riprendo un 3d che non riesco più a trovare che ho aperto qualche tempo fa (sorry). Ho un grosso dubbio sulla comprensione del concetto di interfaccia. In sostanza, dovendo gestire delle anagrafiche (di tipi diversi), stavo ragionando così: Codice:
interface IAnagrafica
{
void add(Anagrafica anagrafica);
void update(Anagrafica anagrafica);
void deleteLogical(Anagrafica anagrafica);
Anagrafica getById(int id);
Anagrafica getByFilter(string filter);
ICollection<Anagrafica> getByDomain(string domain);
}
Codice:
public class Anagrafica : IAnagrafica
{
//iniziano i dubbi:
}
Ho due tipi di anagrafica: Anagrafica Persone e Anagrafica Fornitori Seguendo la regola "is-a", AnagraficaPersone e AnagraficaFornitori, seppur abbiano pochi campi in comune "sono" oggetti di tipo Anagrafica. Ho pensato quindi che : Codice:
public class AnagraficaPersone : Anagrafica
{
}
public class AnagraficaFornitori : Anagrafica
{
}
Pensavo di definire in Anagrafica solo ciò che ho definito nell'interfaccia, e successivamente, far ereditare i metodi di Anagrafica ad AnagraficaPersone ed AnagraficaFornitori. I campi di queste ultime però, essendo diversi fra di loro, li avrei definiti solo al loro interno. Che ne pensate? Grazie RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
Si credo vada bene così!
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Ciò che devi definire nell'interfaccia Anagrafica non è l'insieme delle caratteristiche comuni a tutte le classi che sono delle anagrafiche ma l'insieme delle caratteristiche necessarie affinchè degli oggetti di tipo anagrafica possano "comunicare" con oggetti di tipo diverso senza perdere la propria identità esclusiva.
Tutte queste caratteristiche saranno anche le caratteristiche che avranno le anagrafiche. Senza un'idea di come siano fatti gli oggetti che devono usare le anagrafiche ogni insieme di caratteristiche comuni a tutte le anagrafiche concrete è valido.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Bene...
ho ampliato così: Codice:
using System;
using System.Collections.Generic;
using System.Text;
using Employees.Interfaces;
namespace Employees.Entities
{
public class Anagrafica : IAnagrafica
{
private int id;
private string filter;
private string kind;
private bool isActive;
public int Id
{
get { return id; }
set { id = value; }
}
public string Filter
{
get { return filter; }
set { filter = value; }
}
public string Kind
{
get { return kind; }
set { kind = value; }
}
public bool IsActive
{
get { return isActive; }
set { isActive = value; }
}
public void Add(Anagrafica anagrafica)
{
throw new NotImplementedException();
}
public void Update(Anagrafica anagrafica)
{
throw new NotImplementedException();
}
public void RemoveLogical(Anagrafica anagrafica)
{
throw new NotImplementedException();
}
public Anagrafica GetById(int id)
{
throw new NotImplementedException();
}
public Anagrafica GetByFilter(string filter)
{
throw new NotImplementedException();
}
public ICollection<Anagrafica> GetByKind(string kind)
{
throw new NotImplementedException();
}
}
}
Codice:
using System;
using System.Collections.Generic;
using System.Text;
namespace Employees.Entities
{
public class AnagraficaDipendenti : Anagrafica
{
#region Incapsulamento
private string nome;
private string cognome;
private string sesso;
private DateTime dataNascita;
private string comuneNascita;
private string provinciaNascita;
private string stato;
private string codiceFiscale;
private string comuneResidenza;
private string provinciaResidenza;
private string indirizzo;
private string cap;
private string email;
public virtual string Nome
{
get { return nome; }
set { nome = value; }
}
public virtual string Cognome
{
get { return cognome; }
set { cognome = value; }
}
public virtual string Sesso
{
get { return sesso; }
set { sesso = value; }
}
public virtual DateTime DataNascita
{
get { return dataNascita; }
set { dataNascita = value; }
}
public virtual string ComuneNascita
{
get { return comuneNascita; }
set { comuneNascita = value; }
}
public virtual string ProvinciaNascita
{
get { return provinciaNascita; }
set { provinciaNascita = value; }
}
public virtual string Stato
{
get { return stato; }
set { stato = value; }
}
public virtual string CodiceFiscale
{
get { return codiceFiscale; }
set { codiceFiscale = value; }
}
public virtual string ComuneResidenza
{
get { return comuneResidenza; }
set { comuneResidenza = value; }
}
public virtual string ProvinciaResidenza
{
get { return provinciaResidenza; }
set { provinciaResidenza = value; }
}
public virtual string Indirizzo
{
get { return indirizzo; }
set { indirizzo = value; }
}
public virtual string Cap
{
get { return cap; }
set { cap = value; }
}
public virtual string Email
{
get { return email; }
set { email = value; }
}
#endregion
#region Costruttori
public AnagraficaDipendenti()
{
}
public AnagraficaDipendenti(string cognome, string nome, string sesso,
DateTime dataNascita, string comuneNascita, string provinciaNascita,
string stato, string codiceFiscale, string comuneResidenza,
string provinciaResidenza, string indirizzo, string cap, string email,
bool isActive)
{
this.cognome = cognome;
this.nome = nome;
this.sesso = sesso;
this.dataNascita = dataNascita;
this.comuneNascita = comuneNascita;
this.provinciaNascita = provinciaNascita;
this.stato = stato;
this.codiceFiscale = codiceFiscale;
this.comuneResidenza = comuneResidenza;
this.provinciaResidenza = provinciaResidenza;
this.indirizzo = indirizzo;
this.cap = cap;
this.email = email;
}
#endregion
#region Methods
#endregion
}
}
Grazie mille RaouL. P.S.: @PGI-Bis : non avevo ancora letto il tuo commento .
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 1278
|
Quote:
un'anagrafica e' un archivio contenente i dati anagrafici del soggetto interessato. Ad un'anagrafica e' possibile aggiungere un'altra anagrafica? (metodo add?) Che significa deleteLogical? Il fatto che ci siano poi 3 metodi get mi fa pensare che IAnagrafica e'solo un'involucro a piu' Anagrafiche(Ma l'anagrafica non e' unica?)... EDIT: Ho appena visto l'implementazione... Tutti quei private mi sembrano inutili dato che fornisci le chiavi d'accesso e modifica get e set potresti mettere direttamente i campi come public...
__________________
Non esistono grandi uomini, solo grandi ambizioni , realizzate da qualcuno che si è alzato dalla sedia per realizzarle! Ultima modifica di mindwings : 14-04-2009 alle 15:26. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
con add e deleteLogical intendevo semplicemente aggiungere un'anagrafica che può essere di due tipi: add(AnagraficaPersona) oppure add(AnagraficaFornitore) ma le potrei anche chiamare semplicemente: Persona e Fornitore. Per i metodi get: mi sembrava il minimo utilizzare un metodo che mi identificasse il record. Per lo stringFilter invece, ho pensato che un utente potrebbe fare una ricerca su un qualsiasi campo di un'anagrafica e quindi, anzichè preventivare un "where or, or, or" per ciascuna campo, passo di volta in volta il valore selezionato dall'utente. per il 'deleteLogical' intendo semplicemente non fare mai una cancellazione fisica ma settare a false o a zero un campo. Dove questo campo ha valore false, il record non verrà restituito ma potrà successivamente essere riattivato. EDIT: aggiungo anche che: l'applicazione si interfaccia ad un db. Nel db ci sono diversi tipi di anagrafiche(servizi, fornitori, contatti, dipendenti, etc..) Per questo mi sembrava buona l'idea di avere una interfaccia implementata da un'unica classe base (anagrafica) e che le altre estendessero quest'ultima.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
Ultima modifica di RaouL_BennetH : 14-04-2009 alle 15:59. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:21.




















