我应该公开组合物对象吗?

时间:2012-07-31 18:00:15

标签: java oop design-patterns

以下是此设计的使用

我需要发布一些API,以便外部世界可以配置用户及其服务。配置用户主要包括基于输入参数(如id,密码,级别等)创建新用户并创建新的连接对象。创建用户对象后,需要进行服务配置。这是一个两步过程 - 启用服务,修改服务细节。修改服务详细信息由一组操作组成。这些操作仅适用于该服务。对于其他服务,这些操作将有所不同。

这是我目前的实施

用户类由service_manager,connection,group classes组成。 service_manager类管理一组服务(比如ServiceA,ServiceB ... ServiceN)。每项服务都有一个seaparate类。

用户类有一个公共函数assignService。此函数接受标识服务类所需的参数。它返回相应服务类的对象。这是一个伪代码。

serviceObjectA = user.assignService ('A');

稍后,此服务对象可用于执行特定到该服务的操作。

serviceObjectA.performActionA1(...);
serviceObjectA.performActionA2(...);
serviceObjectA.performActionA10(...);

这是问题,我正面临着这个实现:

a)performAction函数需要用户类的少数属性(如id,密码,位置等)和连接对象。准备请求需要这些用户属性。连接对象需要通过已创建的连接发送此请求。 目前,我在服务类构造函数中管理它,其中,我将这些用户属性和连接对象作为构造函数参数传递。由于各种服务类需要不同的用户属性,因此它变得有点难以管理。

请为此提出一些替代方案。

b)将服务对象暴露给外界真的是一个好习惯吗?

我仍然是OOP世界的新手,如果我理解错误,请道歉。 如果你能用伪示例演示它,我会非常棒。

1 个答案:

答案 0 :(得分:2)

解决您的一些问题的一种方法是遵循builder pattern

因此,您不会使用包含越来越多参数和构造函数的约定来适应所有这些不同的选项。您可以使用所有需要的选项设置“构建器”类,然后构建(返回实例)正确设置的类,而不是在构造函数中需要所有必需的选项。

这类似于没有公共构造函数的另一种选择,但是静态工厂方法。如果您的构造函数难以区分并且参数失控,这些将非常有用。拥有静态工厂方法意味着您可以使用方法名称更具描述性,并避免模糊和复杂性。有效的Java有几个与此相关的主题,对于更好地深入讨论优秀的设计模式将是一个很好的阅读。

不了解您的设计及其使用的更多信息,很难说应该暴露什么,不应该暴露什么。在我看来,让你的类的用户只与“用户”交互是更好的,隐藏了各种服务执行操作的事实。这样可以降低复杂性,并允许实现在以后更改。