Come deve essere chiamato un oggetto che contiene solo setter e getter? [chiuso]

5

Supponiamo che ci sia un oggetto che contiene solo setter e getter:

class Config
{
    public void setName(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return this.name;
    }

    public void setLanguage(String language)
    {
        this.language = language;
    }

    public String getLanguage()
    {
        return this.language;
    }

    // And so on, you got the point!
}

Esistono diversi termini che descrivono tali oggetti:

  • DAO (Data Access Object)
  • DTO (Data Transfer Object)
  • VO (oggetto valore)

Qui giace la mia confusione:

Può essere chiamato Oggetto accesso dati , perché è responsabile dell'accesso ai dati. Può essere chiamato Oggetto trasferimento dati , perché potrebbe essere responsabile del trasferimento di dati tra diversi oggetti. Infine, può essere chiamato Oggetto valore , perché non ha alcun comportamento e contiene solo valori.

Quali sono le origini di questi termini diversi, quale termine dovrei scegliere in quale contesto e perché?

    
posta Yang 21.11.2014 - 14:18
fonte

6 risposte

6

Certamente non lo chiamerei oggetto valore perché ciò è in conflitto con l'idea nella progettazione basata sul dominio. Andando da wikipedia :

In computer science, a value object is a small object that represents a simple entity whose equality is not based on identity: i.e. two value objects are equal when they have the same value, not necessarily being the same object.

Ad esempio, un Person potrebbe avere Name . Person non è un oggetto valore perché anche se cambiano il loro nome, sono sempre la stessa persona. La loro eguaglianza è basata sull'identità. Il Name stesso d'altra parte è un valore oggetto-cambia ogni lettera in quel nome e diventa un nuovo nome diverso.

Per quanto riguarda come chiamarli, un altro termine che ho comunemente sentito è Borsa di proprietà . Questo è forse un po 'più di un nome centrico C # rispetto a quello di Java, ma descrive ancora la stessa idea. La differenza tra questo e DTO / DAO è che viene usato per descrivere ciò che la classe è piuttosto che ciò che è per . Se questo è più o meno appropriato dipende dalla situazione.

    
risposta data 21.11.2014 - 15:12
fonte
9

Una classe DAO di solito ha il CRUD operazioni come salvare, aggiornare ed eliminare. Mentre il DTO è solo un oggetto che contiene dati. Quindi c'è effettivamente una differenza tra questi due. Il termine dipende quindi da cosa fa l'oggetto.

Un VO e DTO erano sinonimi: precoce Java EE la letteratura usava il termine valore oggetto per descrivere un DTO, ma lo ha cambiato in una versione successiva. "Un oggetto valore non ha alcuna identità, è completamente identificato dal suo valore ed è immutabile." ~ link

    
risposta data 21.11.2014 - 14:44
fonte
3

Li chiamerei struct. Un vecchio nome per la vecchia scuola.

  1. I DAO contengono funzionalità relative alla persistenza. Questo non è un DAO.

  2. Potrebbe trattarsi di un oggetto valore mal implementato. Gli oggetti valore dovrebbero essere generalmente immutabili e dovrebbero avere costruttori appropriati. (Tuttavia, una configurazione potrebbe benissimo essere un esempio di un oggetto di valore che potrebbe essere ragionevolmente progettato come mutabile. Potrebbe essere pensato come una mappa con chiavi fisse.)

  3. Un DTO potrebbe sembrare così, ma un oggetto è un DTO solo quando il suo unico scopo è quello di trasportare dati su interfacce remote o simili.

risposta data 21.11.2014 - 16:23
fonte
1

Come altri hanno risposto, DAO e DTO riflettono il ruolo dell'oggetto se vuoi usarlo in un livello di persistenza o trasferire informazioni in una chiamata.

Un valore Object dovrebbe essere immutabile.

Poiché il tuo codice è in Java (e la terminologia è piuttosto orientata a Java), il termine che mi viene in mente è JavaBean ma la tua classe dovrebbe implementare Serializable .

Penso che dovresti dare un'occhiata a che risponde su StackTranslate.it

    
risposta data 21.11.2014 - 18:16
fonte
0

Ho ascoltato e usato sia l'oggetto di accesso ai dati che l'oggetto di trasferimento dati, anche se di solito li chiamo Modelli di dati (oggetti) perché implica un contenitore e non implica ciò che si sta effettivamente facendo con esso.

    
risposta data 21.11.2014 - 14:45
fonte
0

Nel mondo .NET, la tua classe si qualifica come semplice vecchio oggetto CLR (POCO).

Nel mondo Java, hai semplici vecchi oggetti Java (POJO).

    
risposta data 21.11.2014 - 18:13
fonte

Leggi altre domande sui tag