【发布时间】:2015-09-16 17:15:21
【问题描述】:
我有一个名为 A 的类和另一个名为 B 的类。A 类包含 B 类作为属性。
我有一个业务逻辑。根据 B 类中一个属性的值,我必须计算 A 类中另一个属性的值。要进行此计算,我必须调用一个 SOAP 服务,获取一个值,然后根据一个属性的值在 B 类中,我必须对 SOAP 服务的返回值进行数学计算,然后为 A 类中的属性设置值。
public Class A{
public string Property1{get;set;}
public int Property2{get;set;}
public B Property3{get;set;}
}
public class B{
public string Property1{get;set;}
public string Property2{get;set;}
}
伪代码中的逻辑
- 如果 classB.property1 = "Something1" 然后调用soap服务,获取一些整数值,进行一些算术计算 使用常量,并将结果分配给 classA.Property2
- Else If classB.property1 = "Something2" 然后调用soap服务,获取一些整数值,并将结果分配给 classA.Property2
- 然后将 classA.Property2 设置为默认值。
我不喜欢 If else,它不遵循 OCP。我正在考虑与装饰师一起做这件事。第二种选择是使用构建器模式并封装 if else 逻辑,但它仍然会破坏 OCP。还是可以执行此操作的全新域服务?但是,即使我选择采用域服务方式,OCP 仍然会被破坏。
上面的逻辑是在一个业务逻辑类中执行的。
那么上述计算逻辑的责任在哪里呢? 否则如何避免这种情况?
【问题讨论】:
-
@RobbyCornelissen 。谢谢你。我现在编辑了它
-
在此特定实例中尝试强制执行 OCP 时,您在寻找什么?您是否暗示决策逻辑应该在
A类中,但条件值(“something1”、“something2”)应该在其他地方声明,因为它们可能会改变?这个小系统应该在哪个轴上开放扩展?
标签: oop design-patterns domain-driven-design solid-principles ooad