¿Debo exponer el objeto de composición?

Aquí está el uso de este diseño

Necesito publicar algunas API para que el mundo externo pueda configurar al usuario y sus servicios. La configuración del usuario incluye principalmente la creación de un nuevo usuario basado en los parámetros de entrada (como id, contraseña, nivel, etc.) y la creación de un nuevo objeto de conexión. Una vez que se crea el objeto de usuario, se requiere la configuración del servicio. Es un proceso de dos pasos: habilitar el servicio, modificar los detalles del servicio. La modificación de los detalles del servicio se compone de un conjunto de acciones. Estas acciones son específicas solo de ese servicio. Estas acciones serán diferentes para otros servicios.

Aquí está mi implementación actual

Una clase de usuario se compone de service_manager, conexión, clases de grupo. La clase service_manager administra un conjunto de servicios (por ejemplo, ServiceA, ServiceB ... ServiceN). Hay una clase de seaparate para cada servicio.

La clase de usuario tiene una función pública executeService. Esta función toma un argumento, requerido para identificar la clase de servicio. Devuelve un objeto de la clase de servicio respectiva. Aquí hay un pseudocódigo para el mismo.

serviceObjectA = user.assignService ('A');

Más tarde, este objeto de servicio se puede usar para realizar acciones específicas de ese servicio.

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

Aquí está el problema que estoy enfrentando con esta implementación:

a) la función performAction necesita pocos atributos de la clase de usuario (como id, contraseña, ubicación, etc.) y el objeto de conexión. Estos atributos de usuario son necesarios para preparar la solicitud. El objeto de conexión es necesario para enviar esta solicitud a través de la conexión ya creada. Actualmente, lo estoy administrando en el constructor de la clase de servicio, en el que estoy pasando estos atributos de usuario y el objeto de conexión como argumentos del constructor. Se está volviendo un poco inmanejable ya que varias clases de servicio requieren atributos de usuario diferentes.

Por favor sugiera alguna alternativa a esto.

b) ¿Es realmente una buena práctica exponer el objeto de servicio al mundo exterior?

Todavía soy nuevo en el mundo de OOP, por lo que me disculpo si entendí algo incorrectamente. Seré realmente genial si puedes demostrarlo con un pseudo ejemplo.

Respuesta 1

Is it possible to have a regexp replace in a printstream? I have a piece of code that logs all text that is shown in my console windows but it also logs ANSI escape codes. I have found this regexp "...

I wrote the following StringTemplate template lines: <instance.attributes: { attr | <attr.value>}> <instance.attributes: { attr | <if(attr.value)>skip<else>don't skip<...

I get error: incompatible types: org.eclipse.jetty.servlet.ServletHandler cannot be converted to org.mortbay.jetty.Handler While trying to run my below code. I'm new to Java and not sure why this is ...

The default behavior is that the absolute file path is used to uniquely identify files - I would like customize this to use the md5 checksum of the file. Is it possible to simply implement a custom ...