【发布时间】:2023-03-04 06:27:01
【问题描述】:
我有这个类,它通过接收某些域对象来执行具有副作用的子例程。
这些领域对象是不同的类,但它们有一些相似之处。我想知道如何通过创建许多公共方法来构建服务,这些公共方法用参数包装私有方法,或者只创建一个具有更多参数的公共方法。
案例一:
class MyService {
private MethodWithManyParameters($a, $b, $c, $d, $similarParameterA, $similarParameterB) {
// do things
if ($similarParameterA == $objectTypeA) {
// code
}
else if ($similarParameterB == $objectTypeB) {
// other really similar code
}
}
public DoThingsWithObjectA($a, $b, $c, $d) {
// $this->MethodWithManyParameters($a, $b, $c, $d, $objectTypeA, $variableA);
}
public DoThingsWithObjectB($a, $b, $c, $d) {
// $this->MethodWithManyParameters($a, $b, $c, $d, $objectTypeB, $variableB);
}
}
// application code
MyService->DoThingsWithObjectA(...);
MyService->DoThingsWithObjectB(...);
案例二
class MyService {
public DoThingsWithObject($a, $b, $c, $d, $similarParameterA, $similarParameterB) {
// do things
if ($similarParameterA == $objectTypeA) {
// code
}
else if ($similarParameterB == $objectTypeB) {
// other really similar code
}
}
}
// application code
MyService->DoThingsWithObject(........); // this one has a bigger argument list
我正在尝试考虑这两种方法的优缺点。
第一种方法:
优点: - 简化的应用程序代码,在使用大量参数的情况下可以删除一些
缺点: - 引入更多耦合,因为如果引入了 objectC,那么 MyService 也必须更改以适应它
第二种方法:
优点: - 使用较少方法的简化类 - 更灵活
缺点: - 当你必须处理对象之间的差异时,参数列表可以更大
目前看来,只有一个公共函数是好的,但第二种方法一开始看起来更干净,因为它处理的事情更抽象。
我有什么遗漏的吗?
【问题讨论】:
-
如果你对各种对象做类似的事情,这些对象很可能共享某些属性/方法:创建一个抽象基类,或者实现一个接口,它允许你只使用一种方法,然后让这些类以不同的方式实现各种方法以处理它们的差异。但是,如果两个对象完全不同,则应该实现两个完全独立的方法
-
所以在您的第一点中,如果 ObjectA 和 ObjectB 非常相似,那么我只需创建两个类:MyServiceA 和 MyServiceB,它们都具有继承自 AbstractMyService 的 DoThingsWithObject?如果对象足够不同,那么当前的第一种方法使用两个单独的方法就足够了?
标签: php class oop object architecture