我正在努力重构一些面向对象的代码,我遇到了以下问题:
代码设计主要是高度凝聚力,但是类高度耦合在一起。
在许多类中使用了某些值(例如employeeID,project_id和location_id),因此经常作为参数传递。问题在于,类通常使用从前三个值派生的更多参数(例如角色,轨迹)。只要该类具有前三个值,它就可以使用帮助器或类似物来计算其余值。
这些辅助参数的列表可能会很长,但它们是必需的。我可以删除这些参数并在类的构造函数中解决它们,但是经常重新计算这些值可能会影响程序。
我担心性能成本和可读性。使用employee_id,project_id和location_id可以很容易地从数据库查询某些值(例如角色),但其他值更耗费资源(例如,有一个类计算轨迹,并且必须使用几何库等)。
在这种情况下需要什么模式?以增加的成本减少耦合是否值得? 以下是新类的外观示例:
示例1:
class EmployeeMonitor:
def __init__(self, employee_id, project_id, location_id, role, settings_list, gps_car_trajectory):
pass
示例2:
class EmployeeMonitor:
def __init__(self, employee_id, project_id, location_id):
role = calcRole() # low cost
settings_list = calcSettings() # low-ish cost
gps_car_trajectory = calcTrajectory() # medium cost (~200ms)
了解这是一个示例,因为我不允许发布任何代码。任何建议将不胜感激!提前谢谢。
答案 0 :(得分:1)
一个折衷方案可能是使用通用关键字参数。这样可以提高可读性,而不会影响性能:
class EmployeeMonitor:
def __init__(self, employee_id, project_id, location_id, **kwargs):
role = kwargs.get('role') or calcRole()
# etc.