, как указано другими, нет никакого реального смысла в использовании DTOs за исключением, если нет передачи участвуют ... :)
решение, которое я бы предложить, было бы абстрагироваться от объекта, переданного в Accountant
к интерфейсу IAccountee
и есть Person
реализовать его ... Я не знаком с C# (из вашего профиля, я infered, что ваш язык выбора :)), но это, вероятно, следует указать вам правильное направление:
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 и копирование данных вперед и назад (или, по крайней мере, в одном направлении) ...
надеюсь, это поможет ... ;)
Зачем вам использовать IAccountee: это просто для простой передачи переменных или есть что-то, что мне не хватает? – silentcontributor
это развязка Бухгалтер от Лица и имманентное скрытие всего, что не нужно для Бухгалтера самому Бухгалтеру ... – back2dos
А, справедливо. Благодарю. – silentcontributor