Вопрос о книге Боба Мартина "Методики гибкой разработки C#"

Рейтинг: 0Ответов: 1Опубликовано: 27.04.2015

Боб в своей книге, в качестве примера, реализует приложение Payroll. Архитектура построена на сценарии транзакций - на каждое действие пользователя есть класс транзакции, работающий с базой данных. Но вот что не могу понять, например, возьмем кусочек приложения, где для работника "HorlyClassification" добавляют "TimeCard".

public class HourlyClassification : PaymentClassification
{
    private double hourlyRate;
    private Hashtable timeCards = new Hashtable();

    public HourlyClassification(double rate)
    {
        this.hourlyRate = rate;
    }

    public double HourlyRate
    {
        get { return hourlyRate; }
    }

    public TimeCard GetTimeCard(DateTime date)
    {
        return timeCards[date] as TimeCard;
    }

    public void AddTimeCard(TimeCard card)
    {
        timeCards[card.Date] = card;
    }
}

Тут интересует метод AddTimeCard(Timecard), он ведь вносит очередную карту в коллекцию, которая хранится в памяти, а не в БД. А транзакция, обещающая добавить TimeCard в БД выглядит так:

public override void Execute()
{
    Employee e = database.GetEmployee(empId);

    if (e != null)
    {
        HourlyClassification hc =
            e.Classification as HourlyClassification;

        if (hc != null)
            hc.AddTimeCard(new TimeCard(date, hours));
    }
}

Вопрос: Когда же информация о карточке TimeCard заносится в базу данных и как?

Ответы

▲ 1Принят

Hashtable - это устаревший класс. Он похож на Dictionary, но есть нюанс - Hashtable не бросает исключение, если значения нет, а возвращает null. Поэтому он просто берёт элемент и возвращает его без проверки, был ли он там. А в версии с базой расставлены проверки на null.

Но вообще, ты вопрос не задал...

Я пытаюсь понять - то, что карточка сохраняется в память, а не в БД - это недоработка примера кода, или я не понимаю, в какой момент идет сохранение в БД.

Так, вопрос я не угадал...

Там где-то дальше есть вариант с базой. Если не ошибаюсь, он явно сказал, что хочет отложить способ сохранения на самый конец разработки, как деталь реализации.