Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 我应该将事务放在此系统中的何处_Architecture_Oop - Fatal编程技术网

Architecture 我应该将事务放在此系统中的何处

Architecture 我应该将事务放在此系统中的何处,architecture,oop,Architecture,Oop,因此,我开始了一个简单系统的初步设计 我有一个名为Customer的超类/抽象。它有两个子类:PrivateCustomer和BusinessCustomer 我还有一门会计课。该账户可能是首付账户,也可能只是普通账户。它由枚举决定。 Customer类有一个帐户列表 现在,我还有一个事务类,这就是它变得棘手的地方。 事务类具有以下属性: 寄件人 接受者 数量 日期 类型(枚举) 正如你所想象的: 客户可以有一个或多个帐户。 客户可以进行0或更多交易。 一个账户有交易(或者其他方式?) 现在

因此,我开始了一个简单系统的初步设计

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

我还有一门会计课。该账户可能是首付账户,也可能只是普通账户。它由枚举决定。 Customer类有一个帐户列表

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

  • 寄件人
  • 接受者
  • 数量
  • 日期
  • 类型(枚举)
正如你所想象的: 客户可以有一个或多个帐户。 客户可以进行0或更多交易。 一个账户有交易(或者其他方式?)

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

  • 我是否有一份所有的全球清单 事务,只需过滤 列表,当我想看到所有 私人客户交易 12345
  • 在 客户类,列出所有 交易
  • 第三件事

只要它是一个面向对象的解决方案,我就会感到满意。

为什么发送方和接收方不能引用客户对象呢。反过来说,每个客户都有一个对其参与的事务对象的引用列表。如果您的设计允许循环引用,我会这样做

大致如下:

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
    }
}
使用系统;
使用System.Collections.Generic;
名称空间示例
{
公共抽象类客户
{
受保护的字符串\u名称;
//...
}
公共类私有客户:客户
{
私人清单交易;
//...
}
公共类业务客户:客户
{
私人清单交易;
//...
}
公共类事务
{
私人客户(发送者);;
私人客户(接收器);;
私人双倍金额;
私人日期时间(日期);;
私人帐户类型_AccountType;
//...
}
公共枚举帐户类型
{
首期付款,
有规律的
}
}
考虑账户信息的修订(无双关语):

使用系统;
使用System.Collections.Generic;
名称空间示例
{
公共抽象类客户
{
私人清单账户;
受保护的字符串\u名称;
//...
}
公共类私有客户:客户
{
//...
}
公共类业务客户:客户
{
//...
}
公共类事务
{
私人帐户发送者;
私人账户接收人;
私人双倍金额;
私人日期时间(日期);;
//...
}
公共抽象类帐户
{
私人客户(u客户),;
私人托收交易;
}
公共类定期帐户
{
//...
}
公营首期付款帐户
{
//...
}
}

“只要它是一个面向对象的解决方案,我就会满意。”所以没有非面向对象的答案!说实话,我不知道你的意思。我正在使用c#如果这对你有帮助的话。我只是和一个朋友讨论过如何设计这样的东西。我们找不到答案,所以我使用so作为第三方。所以答案将是我提出的第二个建议?“Customer类中的每个account属性是否都有一个所有事务的列表?”或者我没有发现有什么不同。不需要事务对象的主列表。每个客户都有对其自身交易的引用,每个交易都有对其参与的客户的引用。当然,您需要创建属性和/或构造函数来连接关系。谢谢:)
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
    {
        //...
    }
}