@Alksar

Вопрос тем, кто недавно читал книгу Боба Мартина — «методика гибкой разработки на c#».?

В своей книге Боб разрабатывает приложение с помощью архитектуры "список транзакций", на каждую операцию в системе создается собственный класс, унаследованный от класса "Transaction" с методом "Execute()", вспомнили?
Так вот, все операции "ChangeEmployeeTransaction", меняющие какие-то поля у объекта Employee, загружают по EmpId сотрудника из базы данных, меняют нужное поле, но не сохраняют обратно в базу результат. Об этом нигде не указывается, да и в готовом коде этого тоже нет. Как так? Может я пропустил что-то?
Для примера код абстрактного класса ChangeEmployeeTransaction и конкретного класса, ChangeNameEmployeeTransaction, реализующего базовый:
public abstract class ChangeEmployeeTransaction : Transaction
{
   private readonly int empId;
   public ChangeEmployeeTransaction(int empId)
   {
      this.empId = empId;
   }
   public void Execute()
   {
      Employee e = PayrollDatabase.GetEmployee(empId);
      if(e != null)
         Change(e);
      else
         throw new InvalidOperationException(
              “Работник не найден.”);
   }
   protected abstract void Change(Employee e);
}

public class ChangeNameTransaction : ChangeEmployeeTransaction
{
   private readonly string newName;
   public ChangeNameTransaction(int id, string newName)
      : base(id)  { this.newName = newName; }
   protected override void Change(Employee e)
   {
      e.Name = newName;
   }
}
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Не читал, но подозреваю что логика сохранения вынесена как раз таки в метод Execute (то есть она не реализована, и наверное должна быть реализована в рамках PayrollDatabase), то есть вне Change. Я бы туда Unit-of-work еще впихнул, тогда вообще славно.
Ответ написан
Комментировать
max-kuznetsov
@max-kuznetsov
Главный IT-архитектор
Ищите реализацию метода Change(e); Этот метод производит изменения и сохраняет результат.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы