我应该在哪里放置交易系统

时间:2010-02-04 13:40:18

标签: architecture oop

所以我已经开始了一个简单系统的初步设计。

我有一个名为Customer的超类/抽象。它有2个子类:PrivateCustomer和BusinessCustomer。

我还有一个帐户类。此帐户可能是首期付款帐户,也可能只是普通帐户。它由Enum决定。 Customer类有一个List<>帐户。

现在,我还有一个事务类,这就是它变得棘手的地方。 事务类具有以下属性:

  • 发件人
  • 接收者
  • 金额
  • 日期
  • 类型(枚举)

正如您可能想象的那样: 客户可以拥有一个或多个帐户。 客户可以进行0次或更多次交易。 帐户有交易(或者反过来?)

现在。我在哪里交易?请记住,系统可能会随着时间推移/获得[插入大量]交易。

  • 我是否拥有所有的全球列表 交易,只需过滤 列表,当我想看到所有 PrivateCustomer的交易 12345?
  • 执行每个帐户属性 客户类,有一个列表 交易呢?
  • 第三件事?

只要是OO解决方案,我就会满意。

1 个答案:

答案 0 :(得分:2)

为什么Sender和Receiver不是对Customer对象的引用。换句话说,每个客户都有一个对其参与的交易对象的引用列表。如果您的设计允许循环引用,这就是我的方式。

这些方面的东西:

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
    {
        //...
    }
}