这是我第一次使用SOLID原则编写C ++代码。因此,我不知道以下示例代码是否正确实现了原则。我的问题遵循代码。
我非常感谢所有回复。谢谢!
以下是样本:
ICustomer
问题:
GetName()
包含GetSurname()
,GetAddress()
和GetPhoneNumber()
。我想要一个额外的信息CExportToExcel
。我应该把它放在哪里?它会带来什么变化?CExportToHTML
。现在我想要一个额外的类idProduccion | hp | totalHp |
4 | 40 | 40 |
4 | 35 | 35 |
5 | 90 | 90 |
6 | 2500 | 2500 |
并使用它。我该怎么做?答案 0 :(得分:1)
关键反馈是通过具体的类构造函数获取依赖关系,并将这些依赖关系作为接口而不是具体的类,所以..在对象组合根中,您可以决定传递哪个实际的具体实现来创建您的对象,即接口的另一个产品实现或仅用于可测试性目的的测试模拟类。它也很适合依赖注入模式和框架。
作为一个例子:
将您的CShopOwner
类更改为具有IExporter
对象的构造函数,将该对象保留为属性并在Execute
方法中使用该对象。在创建CShopOwner
对象时,在运行时可以确定IExporter
接口的具体实现是什么,以便传递它。 CExportToHTML
。
这应该涵盖您的第1和第3个问题。关于你的第二个问题。如果GetPhoneNumber()
与ICustomer
的所有实施相关,那么从表面上看,您应该仍然创建一个新界面,使用一种方法继承ICustomer
- GetPhoneNumber()
- 而不是更改ICustomer
接口,特别是如果它已被客户端代码使用,因为您通过更改它来破坏合同,并可能导致现有客户端出现问题。另一方面,如果您评估情况和风险,您可以直接更改ICustomer
界面及其所有消费者,如果这是您自己的代码将更容易。我们都做到了:)