Где я должен размещать транзакции в этой системе - PullRequest
1 голос
/ 04 февраля 2010

Итак, я начал свой первоначальный проект простой системы.

У меня есть суперкласс / реферат под названием Customer. Имеет 2 подкласса: PrivateCustomer и BusinessCustomer.

У меня также есть класс аккаунта. Эта учетная запись может быть учетной записью авансового платежа или обычной учетной записью. Это определяется Enum. Класс Customer имеет список <> учетных записей.

Теперь у меня также есть класс транзакции, и вот тут он становится сложным. Класс транзакции имеет следующие свойства:

  • Отправитель
  • Приемник
  • Сумма
  • Дата
  • Тип (Enum)

Как вы можете себе представить: У клиента может быть 1 или более аккаунтов. Клиент может совершить 0 или более транзакций. В аккаунте есть транзакции (или наоборот?)

Теперь. Где мне разместить там транзакцию? Помните, что система может иметь / получать [вставлять большое количество] транзакций с течением времени.

  • Есть ли у меня глобальный список всех транзакции и просто фильтровать список, когда я хочу видеть все транзакция для PrivateCustomer 12345
  • У каждого свойства аккаунта, в Класс клиента, есть список всех транзакции вместо?
  • Что-то третье?

Пока это ОО-решение, я буду удовлетворен.

1 Ответ

2 голосов
/ 04 февраля 2010

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

Что-то вроде этого:

using System;
using System.Collections.Generic;

namespace Sample
{
    public abstract class Customer
    {
        protected string _name;
        //...
    }

    public class PrivateCustomer : Customer
    {
        private List<Transaction> _transactions;
        //...
    }

    public class BusinessCustomer : Customer
    {
        private List<Transaction> _transactions;
        //...
    }

    public class Transaction
    {
        private Customer _sender;
        private Customer _receiver;
        private double _amount;
        private DateTime _date;
        private AccountType _accountType;

        //...
    }

    public enum AccountType
    {
        Downpayment,
        Regular
    }
}

редакция с учетом информации учетной записи (без каламбура):

using System;
using System.Collections.Generic;

namespace Sample
{
    public abstract class Customer
    {
        private List<Account> _accounts;
        protected string _name;
        //...
    }

    public class PrivateCustomer : Customer
    {
        //...
    }

    public class BusinessCustomer : Customer
    {
        //...
    }

    public class Transaction
    {
        private Account _sender;
        private Account _receiver;
        private double _amount;
        private DateTime _date;

        //...
    }

    public abstract class Account
    {
        private Customer _customer;
        private Collection<Transaction> _transactions;
    }

    public class RegularAccount
    {
        //...
    }

    public class DownpaymentAccount
    {
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...