, как утверждают другие, нет никакого смысла в использовании DTO, за исключением случаев, когда нет никакой передачи ...:)
решение, которое я бы предложил, состояло бы в том, чтобы абстрагировать объект, переданный Accountant
в интерфейс IAccountee
, и Person
реализовать его ... Я не знаком с C # (из вашего профиля я это ваш выбор языка :)), но это, вероятно, должно указать вам правильное направление:
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
}
в основном это D в SOLID :) ... он гибкий и чистый, а также позволяет избежать обмена ненужной информацией из Person
с Accountant
...
Насколько я понимаю, интерфейсы C # не могут требовать переменных (как в большинстве языков), что вынуждает вас создавать средства доступа (если нет какой-либо функции языка / IDE для создания простых средств доступа по умолчанию), если вы еще этого не сделали ... это немного больше времени, чем использование простых переменных, и требует большей производительности, чем простой доступ к полям, но OTOH, это также то, что я бы посчитал хорошей практикой, по крайней мере, когда производительность не достигает ... думаю, что это определенно более элегантно, чем создание дополнительного класса DTO и копирование данных туда и обратно (или, по крайней мере, в одном направлении) ...
надеюсь, это поможет ...;)