Java 软件设计原则:将您的收藏与处理对象分开?
在OOP设计中与一个小组合作一个小组成员和我有分歧,我在网上找不到答案 创建一个类似于非营利组织的软件,该组织有捐助者和他们的信用卡 一种方法是,Java 软件设计原则:将您的收藏与处理对象分开?,java,oop,software-design,Java,Oop,Software Design,在OOP设计中与一个小组合作一个小组成员和我有分歧,我在网上找不到答案 创建一个类似于非营利组织的软件,该组织有捐助者和他们的信用卡 一种方法是,creditCardList(collection类)应该只存储和返回creditCard对象。然后当它们被返回时,组织类应该为每个对象运行processCard(),作为信用卡对象的方法 另一方面是,CreditCardList应处理所有项目,并包含在集合中所有项目上运行的循环 一般来说,什么是更好的软件设计 我会选择第一个选项 由于您已经将信用卡
creditCardList
(collection类)应该只存储和返回creditCard
对象。然后当它们被返回时,组织
类应该为每个对象运行processCard()
,作为信用卡
对象的方法
另一方面是,CreditCardList
应处理所有项目,并包含在集合中所有项目上运行的循环
一般来说,什么是更好的软件设计 我会选择第一个选项 由于您已经将
信用卡列表
用作存储,因此该类不应承担任何其他责任。此类的功能仅限于提供卡片(全部/部分,有条件/按条件)
第二个选项提出了将存储器与卡处理机制耦合的问题。存储库现在取决于处理系统以及系统可能需要的输入参数。此外,存储确实知道它不应该知道的所有进程。我会选择第一个选项 由于您已经将
信用卡列表
用作存储,因此该类不应承担任何其他责任。此类的功能仅限于提供卡片(全部/部分,有条件/按条件)
第二个选项提出了将存储器与卡处理机制耦合的问题。存储库现在取决于处理系统以及系统可能需要的输入参数。此外,存储器确实知道它不应该知道的所有过程。很抱歉,但对于职责分离原则,我不会选择这两种方法中的任何一种。如果我正确理解该要求,则组织对象是代表接受捐赠的慈善组织的实体。CreditCardList是用于支付处理的所有信用卡的集合。它们都不是保存支付处理逻辑的好地方 相反,我将引入一个新的helper类,其名称类似于
PaymentProcessor
。此类将有一个名为processPayment(列出信用卡)
的方法。此方法应包含处理信用卡付款的逻辑。在这个设计中,您还可以在这个类中引入其他方法来使用其他方式处理付款,例如从银行帐户或PayPal直接借记
根据OO设计原则,我们应该有一个类或接口用于一个目的,以便更好地维护
我希望这可能有助于解决您与同事之间的建设性分歧。:) 很抱歉,对于职责分离原则,我不会选择这两种方法。如果我正确理解该要求,则组织对象是代表接受捐赠的慈善组织的实体。CreditCardList是用于支付处理的所有信用卡的集合。它们都不是保存支付处理逻辑的好地方 相反,我将引入一个新的helper类,其名称类似于
PaymentProcessor
。此类将有一个名为processPayment(列出信用卡)
的方法。此方法应包含处理信用卡付款的逻辑。在这个设计中,您还可以在这个类中引入其他方法来使用其他方式处理付款,例如从银行帐户或PayPal直接借记
根据OO设计原则,我们应该有一个类或接口用于一个目的,以便更好地维护
我希望这可能有助于解决您与同事之间的建设性分歧。:) 首先,对于图表中的每个调用,我都感到好奇:为什么组织调用CreditCard.processCard方法并将CreditCard实例作为参数传递 “处理信用卡”首先意味着什么?信用卡实例是否能够处理它? 我要做的第一个设计决策是,CreditCard对象不应该依赖于某些外部服务。处理信用卡听起来像是处理外部事务。 我会保持信用卡逻辑的纯洁。此处仅将逻辑操作放在本地字段和属性上 CreditCardList有一个主要任务。持有一套信用卡。您想要检索和存储信用卡列表的方式可能会改变,因此最好将关注点分开,并将处理逻辑排除在该类之外。 在CreditCardList中运行循环的一个原因可能是,您不想公开信用卡的具体列表。但这可以用一种更优雅的方式来处理。定义接口ICardProcessor并将其作为构造函数参数注入CreditCardList。
然后foreach可以留在类中,并对每个实例调用ICardProcessor.Process(card)。首先,我发现对于图表中的每个调用,都很奇怪:为什么组织调用方法CreditCard.processCard并将CreditCard实例作为参数传递 “处理信用卡”首先意味着什么?信用卡实例是否能够处理它? 我要做的第一个设计决策是,CreditCard对象不应该依赖于某些外部服务。处理信用卡听起来像是处理外部事务。 我会保持信用卡逻辑的纯洁。此处仅将逻辑操作放在本地字段和属性上 <