Come si chiamano le classi senza metodi?
Per esempio,
class A
{
public string something;
public int a;
}
Sopra è una classe senza alcun metodo. Questo tipo di classe ha un nome speciale?
Come si chiamano le classi senza metodi?
Per esempio,
class A
{
public string something;
public int a;
}
Sopra è una classe senza alcun metodo. Questo tipo di classe ha un nome speciale?
Risposte:
Il più delle volte: un modello anti.
Perché? Perché facilita la programmazione procedurale con classi e strutture di dati "Operatore". Separare dati e comportamenti che non sono esattamente buoni OOP.
Spesso: un DTO (Data Transfer Object)
Strutture di sola lettura intese allo scambio di dati, derivati da un oggetto business / dominio.
A volte: solo struttura dei dati.
Beh, a volte, devi solo avere quelle strutture per contenere dati che sono semplicemente chiari e semplici e senza operazioni su di essi. Ma poi non userei campi pubblici ma accessori (getter e setter).
Lo chiamerei structo recordperché è usato per l'archiviazione dei dati e questo è molto comune per linguaggi come Cpuoi vedere lì: struct (linguaggio di programmazione C) . Quindi personalmente preferirei usare structuna classe anziché una classe più adatta e leggibile:
struct A
{
public string something;
public int a;
}
Di solito sono usati come DTO (Data Transfer Object) come hanno detto gli altri.
Questi sono conosciuti come Plain Old __ Objects (PO_Os) in cui lo spazio vuoto è Java o C o CIL, o qualunque linguaggio tu stia usando.
Se vengono utilizzati come semplici blocchi di dati per la comunicazione, possono essere conosciuti come Data Transfer Objects (DTO).
Se rappresentano alcuni dati forniti esternamente, possono essere conosciuti come Entità .
Definirei tale classe un titolare di dati mutevole e talvolta ho usato un modulo generico:
class DataHolder<T>
{
public T dat;
}
Si noti che il wrapping datall'interno di una proprietà peggiorerà le prestazioni e non offrirà alcun vantaggio, dal momento che non c'è nulla che un programma di accesso alla proprietà possa fare (tranne leggere / scrivere il campo) che non interrompa alcune implementazioni. Inoltre, potrebbe essere necessario utilizzare Interlockedmetodi con dat(o, se si tratta di una struttura, con i relativi campi), ma ciò non sarebbe possibile se datfossero racchiusi in una proprietà.
Si noti che mentre i titolari di dati mutabili possono essere utili per i tipi (mutabili o meno) che necessitano di conservare i dati, non possono essere tranquillamente utilizzati per lo scambio di dati nello stesso modo dei tipi immutabili. Ad esempio, un'istruzione come:
myData = myCollection.GetData(myKey);
avrebbe un chiaro significato se GetDatarestituito un tipo di classe immutabile o una struttura ("mutabile" o no) che non conteneva riferimenti a dati mutabili. Se restituisse un oggetto di classe mutabile, tuttavia, non sarebbe chiaro se eventuali modifiche a tale oggetto sarebbero costantemente ignorate dalla raccolta sottostante, comporterebbe costantemente aggiornamenti puliti o causerebbe un comportamento fastidioso o imprevedibile che non soddisfa nessuna descrizione.
Se si volesse che una raccolta restituisse i dati in un oggetto mutabile, il paradigma corretto sarebbe spesso qualcosa del tipo:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
Usando questo approccio, esiste una chiara implicazione che GetDatacauserà il myDatapopolamento dei dati della raccolta, ma myCollectionnon ci si aspetterebbe che mantenga un riferimento ad esso una volta completata la funzione, né lo userebbe per nessun altro scopo. StoreDataallo stesso modo copiare le informazioni myDatanella propria struttura di dati interna senza mantenere un riferimento. Si noti che un vantaggio di questo approccio è che se il codice client leggerà molti elementi di dati all'interno di un ciclo, potrebbe tranquillamente creare un'istanza myDataall'esterno del ciclo e riutilizzarla ogni volta. Allo stesso modo, myCollectionpotrebbe essere in grado di riutilizzare l'istanza dell'oggetto associata alla chiave (copiando i dati dall'istanza passata) senza dover creare una nuova istanza.