Considera una classe con un numero di metodi che sono richiesti per restituire un numero di valori ciascuno. In un linguaggio strongmente tipizzato come C #, possiamo avere l'effetto di restituire più quel valore da un metodo utilizzando DTO classi.
Considera che i valori che i miei metodi devono restituire collettivamente sono questi (chiamiamolo pool ):
A, B, C, D, E
Ma non tutti i metodi sono necessari per restituire tutti . Ad esempio, considera quanto segue:
Method Values to return:
==============================
Method1 A, B, C
Method2 A, E
Method3 B, D, E
Method4 D, E
Method5 A, C, D, E
Si ottiene l'idea, i valori da restituire sono un assortimento di valori dal pool .
Questo codice dovrebbe aiutarlo a chiarire la situazione. Sto usando C # qui.
namespace TestBed
{
public interface MyInterface
{
MyDTO Method1(/* parameters */);
MyDTO Method2(/* parameters */);
// definitions for Method3() and so on
}
// Writing the DTO class here, as it is specific only to the class
// that implements this interface
public class MyDTO
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public string D { get; set; }
public string E { get; set; }
// possibly a constructor
}
}
Una classe che implementa l'interfaccia:
public class MyClass : MyInterface
{
public MyDTO Method1(/* parameters */)
{
MyDTO dto = new MyDTO();
// populate the properties of dto specific to this method
dto.A = "some values for A";
dto.B = "some values for B";
dto.C = "some values for C";
return dto;
}
public MyDTO Method2(/* parameters */)
{
MyDTO dto = new MyDTO();
// populate the properties of dto specific to this method
dto.A = "some values for A";
dto.E = "some values for E";
return dto;
}
// similar code for the other methods
}
Come puoi vedere, un metodo dice che Method1()
popola solo le proprietà del dto
ad esso pertinenti, ad es. A
, B
e C
per Method1()
. Le mie preoccupazioni sono:
- Sebbene un metodo compili solo le proprietà ad esso relative, il destinatario di questo metodo può accedere anche ad altri valori del DTO, ad es. le proprietà
D
eE
perMethod1()
. - Un metodo che popola solo pochi numeri di valori del DTO (solo 2 per
Method4()
), restituisce comunque un oggetto con molti altri valori che non sono utili per questo metodo. Sembra un sovraccarico non necessario.
Riguardo alle preoccupazioni di cui sopra, perché (o perché no, forse) dovrei usare un DTO in questi casi? Esiste un approccio alternativo migliore in questo scenario, almeno fino a quando C # 7 è intorno .