耦合和性能/可读性

时间:2018-02-22 18:41:01

标签: python oop design-patterns

我正在努力重构一些面向对象的代码,我遇到了以下问题:

代码设计主要是高度凝聚力,但是类高度耦合在一起。

在许多类中使用了某些值(例如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)

了解这是一个示例,因为我不允许发布任何代码。任何建议将不胜感激!提前谢谢。

1 个答案:

答案 0 :(得分:1)

一个折衷方案可能是使用通用关键字参数。这样可以提高可读性,而不会影响性能:

class EmployeeMonitor:
    def __init__(self, employee_id, project_id, location_id, **kwargs):
        role = kwargs.get('role') or calcRole() 
        # etc. 
相关问题