【问题标题】:Where should i place transactions in this system我应该在这个系统的哪里进行交易
【发布时间】:2010-02-04 13:40:18
【问题描述】:

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

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

我也有一个帐户类。该账户可能是首付账户,也可能只是普通账户。它由枚举确定。 Customer 类有一个 List 帐户。

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

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

如您所想: 一个客户可以有 1 个或多个帐户。 客户可以进行 0 次或多次交易。 帐户有交易(或相反?)

现在。我在哪里进行交易?请记住,随着时间的推移,系统可能拥有/获取 [插入大量] 交易。

  • 我是否有一个全局列表 交易并简单地过滤 列表,当我想看到所有 PrivateCustomer 的交易 12345?
  • 做每个帐户属性,在 客户类,有一个列表 而是交易?
  • 第三件事?

只要是面向对象的解决方案,我就满意了。

【问题讨论】:

  • "只要是面向对象的解决方案,我就满足了。"所以没有非面向对象的答案!

标签: architecture oop


【解决方案1】:

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

【讨论】:

  • 说实话,我不确定你的意思。如果对你有帮助,我正在使用 c#。
  • 我只是和朋友讨论过如何设计这样的东西。我们找不到答案,所以我使用 SO 作为第三方
  • 所以答案是我提出的第二个建议? “客户类中的每个帐户属性是否都有所有交易的列表?”还是有我没有发现的差异。
  • 不需要事务对象的主列表。每个客户都引用了自己的交易,并且每笔交易都引用了其参与的客户。当然,您需要创建属性和/或构造函数来连接关系。
  • 所以答案是我的第二个建议/替代方案。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2019-01-10
  • 2011-12-31
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2023-03-21
相关资源
最近更新 更多