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 struct
o record
perché è usato per l'archiviazione dei dati e questo è molto comune per linguaggi come C
puoi vedere lì: struct (linguaggio di programmazione C) . Quindi personalmente preferirei usare struct
una 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 dat
all'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 Interlocked
metodi con dat
(o, se si tratta di una struttura, con i relativi campi), ma ciò non sarebbe possibile se dat
fossero 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 GetData
restituito 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 GetData
causerà il myData
popolamento dei dati della raccolta, ma myCollection
non ci si aspetterebbe che mantenga un riferimento ad esso una volta completata la funzione, né lo userebbe per nessun altro scopo. StoreData
allo stesso modo copiare le informazioni myData
nella 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 myData
all'esterno del ciclo e riutilizzarla ogni volta. Allo stesso modo, myCollection
potrebbe essere in grado di riutilizzare l'istanza dell'oggetto associata alla chiave (copiando i dati dall'istanza passata) senza dover creare una nuova istanza.