Oop 我应该如何处理非';不一定是类属性,但被几个方法使用?

Oop 我应该如何处理非';不一定是类属性,但被几个方法使用?,oop,design-patterns,language-agnostic,Oop,Design Patterns,Language Agnostic,我偶尔发现自己在一个类中有几个方法都需要相同的数据(例如,一个查询对象)。通常,会有一个公共方法,其通用名称类似于parseReport(),它依次将工作委托给多个私有方法,并最终返回成品: public function parseReport( queryObject ) { queryObject = correctDatesAndTimes( queryObject ); queryObject = sortByCusomter( queryObject ); q

我偶尔发现自己在一个类中有几个方法都需要相同的数据(例如,一个查询对象)。通常,会有一个公共方法,其通用名称类似于
parseReport()
,它依次将工作委托给多个私有方法,并最终返回成品:

public function parseReport( queryObject ) {
    queryObject = correctDatesAndTimes( queryObject );
    queryObject = sortByCusomter( queryObject );
    queryObject = buildHierarchy( queryObject );

    return queryObject;
}

private function correctDatesAndTimes( queryObject ) {
    // do some stuff

    return queryObject;
}

private function sortByCusomter( queryObject ) {
    // do some stuff

    return queryObject;
}

private function buildHierarchy( queryObject ) {
    // do some stuff

    return queryObject;
}

所以我的问题是,我的
queryObject
是否应该是一个类级属性,我的所有方法在每次调用它时都会引用它,而不是将它作为参数传递给方法?

在您的示例中,您需要将查询对象作为参数传递,因为它将在私有函数中更改


此外,如果使用多线程,将其放入私有属性会让您头疼。

在您的示例中,您需要将查询对象作为参数传递,因为它将在私有函数中更改


此外,如果使用多线程,将其放入私有属性会让您头疼。

在这种情况下,queryObject不应该是类属性。如果你看它,你实际上有一个大函数,它被分成几个小函数。如果它是一个大函数,你就不会把它变成一个类属性

当数据实际上是类的一部分时,数据属于类属性。记得吗
类定义是数据和行为的封装

在这种情况下,queryObject不应该是类属性。如果你看它,你实际上有一个大函数,它被分成几个小函数。如果它是一个大函数,你就不会把它变成一个类属性

当数据实际上是类的一部分时,数据属于类属性。记得吗
类定义是数据和行为的封装

这些功能是否会变异为“this”?如果不是,那么这整组函数很可能是线程安全的,但如果您将它们全部更改为设置属性,则不会是线程安全的。它们当前根本不修改“this”,它们的全部工作都是在从其他位置传入然后返回的
queryObject上完成的。这些函数是否会改变“this”?如果不是,那么整个函数组很可能是线程安全的,但如果您将它们全部更改为设置属性,则不会是线程安全的。它们目前根本不修改“this”,它们的全部工作都是在
queryObject
上完成的,该对象从其他位置传入,然后返回。谢谢-这也是我的想法,但是在课堂上这样传递感觉很奇怪。谢谢——这也是我的想法,但是在课堂上这样传递感觉很奇怪。