Как смоделировать банковский счет в ООП? - PullRequest
3 голосов
/ 17 декабря 2010

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

ВотСуммированная версия того, что у меня сейчас есть:

Класс учетной записи:

public class Account {
    public long Id { get; set; }
    public string Name { get; set; }
    public decimal StartingBalance { get; set; }
}

Класс категории:

public class Category {
    public long Id { get; set; }
    public string Name { get; set; }
}

Класс транзакции:

public class Transaction {
    public long Id { get; set; }
    public DateTime Date { get; set; }
    public Account Account { get; set; }
    public Category Category { get; set; }
    public string Description { get; set; }
    public decimal TransactionValue { get; set; }
}

Я хочу добиться, используя только возможности связывания WPF, заполнить сетку данных и просмотреть следующие данные для заданного интервала дат и учетной записи:

Date     Account     Category     Description     Value    Balance
02/02/10 A1          C1           D1               22.30    230.00
02/03/10 A1          C1           D2              -30.00    200.00

И я хотел бы иметь возможностьвыберите опцию «Все счета» и просмотрите в столбце баланса сумму остатка по всем счетам.

Код работает до сих пор, но у меня нет поля Баланс в таблице данных, и я не могуПосмотрите элегантный способ смоделировать это, мне нужна ваша помощь, парень!

Большое спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

Когда я делаю это, я, как правило, начинаю с транзакций и журналов (журнал - это набор транзакций).У вас есть журналы, так что вы можете отменить группу транзакций.

Моя таблица транзакций обычно имеет вид:

  • Тип (CR / DR)
  • Account1
  • Account2
  • Сумма
  • Дата добавления

Тогда у вас в основном очень гибкая система.Каждая операция может быть отменена, CR / DR подразумевает направление, и вы можете управлять всеми своими средствами, имея разные счета и типы счетов.Вы кешируете текущую стоимость учетной записи по отношению к учетной записи и можете при необходимости пересчитать из журналов.

- Редактировать:

Только в отношении текущего баланса, если это не ясноЯ хотел бы иметь поле против таблицы Account, такое как «CurrentBalance», и настроить его с помощью триггеров (или с помощью обычного кода, возможно, поставленного в очередь), в зависимости от различных других факторов.Дело в том, что вы обновляете его по событию «транзакция», вы не рассчитываете его каждый раз.

1 голос
/ 17 декабря 2010

Текущий баланс - ваша ключевая проблема. Он не принадлежит нигде в модели. То, что вам нужно, называется ViewModel . Найдите шаблон MVVM или Model-View-ViewModel , который является распространенным в реализациях WPF.

По сути, вам нужно создать специализированный класс Transaction (может называться RegisterTransaction), который содержит поле для текущего баланса для каждой транзакции. Вам нужно будет рассчитать его для каждой транзакции. Оттуда используйте WPF для привязки к вашим RegisterTransaction объектам.

...