Así que estoy teniendo dificultades para manejar una gran cantidad de propiedades de clase. Estoy creando un "componente" y quiero que este "componente" sea lo más personalizable posible. Al hacerlo, termino teniendo que lidiar con esto:
constructor({ embeds = [], message = null, client = null, isSelectable = false, skip = true, timeout = 10000, isCallback = true, max = 10, results = [], hasPageNumber = true, start = 0, identifiers = ['1️⃣','2️⃣','3️⃣','4️⃣','5️⃣','6️⃣','7️⃣','8️⃣','9️⃣','🔟','1️⃣1️⃣','1️⃣2️⃣','1️⃣3️⃣','1️⃣4️⃣','1️⃣5️⃣','1️⃣6️⃣','1️⃣7️⃣','1️⃣8️⃣','1️⃣9️⃣','2️⃣0️⃣'], undefinedResultValue = 'Unknown Result', useIdentifiers = true, innerPageOptions = { message: message, client: client, hasPageNumber: hasPageNumber, skip: skip, timeout: timeout, start: start, isSelectable: isSelectable, embeds: null } })El código anterior funciona bien, pero es horrible de ver y siento que las personas han encontrado problemas similares a este. Quiero limitar la cantidad de propiedades y, al mismo tiempo, hacer que el "componente" sea lo más personalizable posible. También estoy tratando de concentrarme mucho en hacer que mi código sea lo más limpio posible y realmente no tengo a nadie que me ayude con este tipo de problemas y se necesita experiencia para resolverlos.
Cada propiedad se utiliza, algunas más que otras y algunas con más efecto. Pensé en colapsar algunos valores en otro subobjeto, pero este es solo un resultado alternativo que es muy similar al que ya tengo.
Estructura de clase para obtener más detalles sobre lo que tengo, los métodos de clase se han excluido debido a que están obsoletos para este problema:
export class PageEmbed{ constructor(options: Options | SearchOptions) private options: Options | SearchOptions private content: MessageEmbed[] private display: SearchDisplayProperties private index: number } export class Page extends PageEmbed{ constructor(options: PageOptions) private message : Message } export class SearchPage extends PageEmbed{ constructor(_options: SearchOptions) private inner: Options public page: Page }Puede buscar algunas combinaciones de parámetros comunes o predeterminados y agregarlos en algún lugar de su código. También podría implementar las fábricas para simplificar la creación de instancias. La idea general es:
const DEFAULT_PROPS = { embeds = [], message = null, client = null, isSelectable = false, skip = true, timeout = 10000, isCallback = true, max = 10, results = [], hasPageNumber = true, start = 0, } class MyFactory { props = DEFAULT_PROPS mutate (newProps) { this.props = { ...this.props, ...newProps } return this } create() { return new MyClassWithProps (this.props) } }