Итак, у меня есть поставщик услуг, который я хочу разбить на модули, но не могу обдумать решение, есть ли правильный способ сделать это?
const module= use('module')
class Class{
constructor (Config) {
this.Config = Config
this.module= module
}
async login() {
try {
this.module.login()
} catch (error) {
throw error
}
}
async logout() {
try {
await this.module.logout()
} catch (error) {
throw error
}
}
async foo(){
try {
await this.login()
const account = this.module.createAccount()
await this.logout()
return account
} catch (error) {
throw error
}
}
Я бы хотел иметь несколько модулей: auth. js и account. js и т. д., к которым я мог бы получить доступ из своего класса, не теряя экземпляр модуля, потому что я не могу вызывать свои методы, не выполняя часть login ().
вот так:
const module = use('module')
const AccountModule= use('./account-module.js')
const AuthModule= use('./auth-module.js')
class Class{
constructor (Config) {
this.Config = Config
this.auth = AuthModule(module)
this.accountModule = AccountModule(module, this.auth)
}
async bar() {
try {
const account = await this.accountModule.foo()
return account
} catch (error) {
throw error
}
}
}
auth-module.js
export default module => ({
async login() {
try {
module.login()
} catch (error) {
throw error
}
},
async logout() {
try {
await module.logout()
} catch (error) {
throw error
}
}
})
account-module.js
export default (module,auth) => ({
async foo(){
try {
await auth.login()
const account = module.createAccount()
await auth.logout()
return account
} catch (error) {
throw error
}
}
})