В своей книге Боб разрабатывает приложение с помощью архитектуры "список транзакций", на каждую операцию в системе создается собственный класс, унаследованный от класса "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;
}
}