您会将具有相同功能但位于 2 个子类中且具有不同参数的方法放在哪里?
Where would you place a method that has the same functionality but is inside 2 subclasses and has different parameters?
我正在尝试重组应用程序,现在有两个 class 是另一个 class.
的子class
这两个 classes 都有一个方法。此方法本质上做同样的事情(获取用户信息),但来自不同的数据源并以不同的方式解析它们(比如一个使用 Facebook API,另一个使用数据库)。它们还接受不同的参数。
将两个方法保留在具有相同方法名称的子classes 中在结构上是否有意义?或者是否有更简洁的方法来组织子classes 中的方法?
这是应用策略模式的完美场所。
不是为每个 class 调用不同的 GetUserInformationMethod,而是创建一个新的 class(或委托类型),它的存在只是为了获取用户信息。拥有一个 UserInformationGetter 属性,它是您在基础 class 中获取用户信息的实例 class/delgate,并让基础 class 的 GetUserInformation 方法调用 delegate/class 来获取用户信息。
不同参数的挑战可以通过多种不同的方式来处理,这取决于参数。如果参数与实现细节相关(例如数据库连接字符串),并且不会因用户而异,那么您应该将该信息绑定到 UserInformationGetter class.
如果信息依赖于用户,则有多种策略。我建议您创建一个类型来封装用于在任何一种情况下获取用户数据的用户的所有信息。然后您可以将此对象传递给方法,而不是根据数据访问方法而变化的参数。
这样,您可以独立于 classes 之间可能不同的任何其他内容来改变您的基础 classes 的用户信息获取策略。此外,您可以改变在运行时获取用户信息的方式,让您的程序轻松适应不断变化的需求。
虽然这两种方法在逻辑上都是GetUserInfo
,但一个在逻辑上GetUserInfoFromFB
而另一个在逻辑上GetUserInfoFromDB
.
也是正确的
您可以创建一个抽象的 GetUserInfo
方法,但由于这些方法获取不同的参数,因此很容易变得混乱。但是,如果可以将参数逻辑重构为 subclass 的属性(或逻辑 class 的属性以将它们保持在一起,即 属性 sub 属性 class).
编辑:策略模式在这里适用,但我会考虑 "messy"。您介绍的案例规模很小,因此策略模式可能有点矫枉过正。
tl;dr 如果您认为您的案例不能证明策略设计模式的合理性,那么保持原样是完全可以的。
我正在尝试重组应用程序,现在有两个 class 是另一个 class.
的子class这两个 classes 都有一个方法。此方法本质上做同样的事情(获取用户信息),但来自不同的数据源并以不同的方式解析它们(比如一个使用 Facebook API,另一个使用数据库)。它们还接受不同的参数。
将两个方法保留在具有相同方法名称的子classes 中在结构上是否有意义?或者是否有更简洁的方法来组织子classes 中的方法?
这是应用策略模式的完美场所。
不是为每个 class 调用不同的 GetUserInformationMethod,而是创建一个新的 class(或委托类型),它的存在只是为了获取用户信息。拥有一个 UserInformationGetter 属性,它是您在基础 class 中获取用户信息的实例 class/delgate,并让基础 class 的 GetUserInformation 方法调用 delegate/class 来获取用户信息。
不同参数的挑战可以通过多种不同的方式来处理,这取决于参数。如果参数与实现细节相关(例如数据库连接字符串),并且不会因用户而异,那么您应该将该信息绑定到 UserInformationGetter class.
如果信息依赖于用户,则有多种策略。我建议您创建一个类型来封装用于在任何一种情况下获取用户数据的用户的所有信息。然后您可以将此对象传递给方法,而不是根据数据访问方法而变化的参数。
这样,您可以独立于 classes 之间可能不同的任何其他内容来改变您的基础 classes 的用户信息获取策略。此外,您可以改变在运行时获取用户信息的方式,让您的程序轻松适应不断变化的需求。
虽然这两种方法在逻辑上都是GetUserInfo
,但一个在逻辑上GetUserInfoFromFB
而另一个在逻辑上GetUserInfoFromDB
.
您可以创建一个抽象的 GetUserInfo
方法,但由于这些方法获取不同的参数,因此很容易变得混乱。但是,如果可以将参数逻辑重构为 subclass 的属性(或逻辑 class 的属性以将它们保持在一起,即 属性 sub 属性 class).
编辑:策略模式在这里适用,但我会考虑 "messy"。您介绍的案例规模很小,因此策略模式可能有点矫枉过正。
tl;dr 如果您认为您的案例不能证明策略设计模式的合理性,那么保持原样是完全可以的。