comme indiqué par d'autres, il n'y a pas de véritable point à l'aide de DTO, sauf s'il n'y a pas de transfert impliqué ... :)
la solution que je propose, serait abstraite l'objet passé à Accountant
à une interface IAccountee
et ont Person
mettre en œuvre ... Je ne suis pas familier avec C# (à partir de votre profil, j'inférer c'est langue de votre choix :)), mais cela ne devrait probablement vous orienter vers la droite:
class Accountant {
//....
public void performAction(IAccountee target)
{
}
}
interface IAccountee
{
string Name
{
get;
}
int Salary
{
get;
set;
}
}
class Person : IAccountee
{
//implementation here, as well as some stuff specific to Person
}
en gros, c'est le D en SOLID :) ... c'est pour autant que je sache, les interfaces C# ne peuvent pas nécessiter de variables (comme dans la plupart des langues), ce qui vous oblige à créer des accesseurs (à moins qu'il y ait un langage)./IDE pour générer des accesseurs simples par défaut) si vous ne l'avez pas encore fait ... cela prend un peu plus de temps que d'utiliser des variables simples, et nécessite plus de performances qu'un simple accès au champ, mais OTOH, c'est aussi ça Considérons une bonne pratique, au moins quand les choses ne sont pas performantes ... Je pense que c'est vraiment plus élégant que de créer une classe DTO supplémentaire et de copier des données (ou au moins dans une direction) ...
J'espère que cela pourra aider ... ;)
Pourquoi utiliseriez-vous IAccountee: est-ce simplement pour le passage facile de variables ou y at-il quelque chose qui me manque? – silentcontributor
il est découplage comptable de la personne et de cacher immanemment tout ce qui est nécessaire pour comptable à comptable lui-même ... – back2dos
Ah, assez juste. Merci. – silentcontributor