Soy un poco nuevo en React y actualmente estoy desarrollando un proyecto que tiene una capa de servicio. Para hacerlo, creé un componente de función que tendría los métodos como variables:
const CustomComponent = () => { method1 = () => {...}, method2 = () => {...}, method3 = () => {...} } export default CustomComponent;Luego, este componente se importaría al componente que lo usará.
Para que mi arquitectura sea lo más limpia posible, quería que algunos de los métodos fueran privados. Sin embargo, como ya sabrá, eso no es posible en la solución que propuse. ¿Hoy tengo una idea sobre cómo lograr esto, o tal vez hay una convención para hacer una capa de servicio que desconozco?
¡Muchas gracias de antemano!
La arquitectura que encuentro particularmente limpia y fácil de mantener es aquella en la que se separa la lógica de la presentación en dos archivos como este:
Capa de servicio (ts):
export class Service implements ServiceInterface { constructor(private instanceVariable: string = "foo") { } private methodOne(): string { return this.instanceVariable } public methodTwo(argumentVariable: string): string { const importantString = this.methodOne(); return importantString + argumentVariable; } } interface ServiceInterface { methodTwo(argumentVariable: string): string; } export default new Service();Capa de servicio (js):
export class Service { instanceVariable; constructor(contructorArgument) { this.instanceVariable = contructorArgument; } methodOne() { return this.instanceVariable } methodTwo(argumentVariable) { const importantString = this.methodOne(); return importantString + argumentVariable; } } export default new Service();Capa de presentación:
import Service from "./service.ts"; const FunctionalComponent = () => { const [localState, setLocalState] = useState(localStateInit); return ( <> <div>{Service.methodTwo("bar")}</div> </> ) }Pocas cosas suceden aquí (principalmente con respecto a la implementación de ts).
Si alguno de los anteriores no funciona, limpie el constructor, exporte solo la clase en sí y cree una instancia según sea necesario en el archivo del componente.
private instanceVariable: string = "foo" . Esto es equivalente a algo como esto: class Service { private instanceVariable: string; constructor(constructorArgument: string) { this.instanceVariable = constructorArgument; }Tal notación es particularmente agradable cuando se usa con inyección de dependencia.
Déjame saber si esto es lo que has estado buscando. Tal vez podamos adaptarlo mejor a su caso de uso.