Используя Сервер Apollo , достаточно стандартная настройка:
В index.js
файле, который управляет состоянием моего сервера Apollo:
const { ApolloServer } = require('apollo-server-express');
const databaseAPI = require('../database/database.datasource');
...
module.exports = new ApolloServer({
...
dataSources: () => {
return {
databaseAPI: new databaseAPI()
};
},
...
});
А потом мой database.datasource.js
файл:
const { RESTDataSource } = require("apollo-datasource-rest");
// imports and config here
class databaseAPI extends RESTDataSource {
constructor() {
super();
}
// methods here like createUser({email, password, name})
}
module.exports = databaseAPI;
Этот database.datasource.js
файл становится немного длинным, отчасти потому, что он управляет слоем БД для многих типов, поэтому я подумал о том, как его реорганизовать.
Я хочу разбить его на основные типы, используя шаблон хранилища , что-то вроде:
UserRepository.js
(и аналогичные абстрактные классы в качестве ссылки и для обеспечения соблюдения внутреннего API)
class UserRepository {
createUser({ email, password, name }) {
throw new Error("Not implemented");
}
...
}
export default UserRepository;
и затем их реализация в каталогах по типу:
/UserRepository/db.datasource.js
import UserRepository from "../UserRepository";
import utils from './utils';
class UserDatabaseAPI extends UserRepository {
constructor(db) {
super();
this.db = db;
}
createUser({ email, password, name }) {
// logic here
}
}
export default UserDatabaseAPI;
Мой вопрос: как лучше управлять несколькими классами внутри моего корневого database.datasource.js
файла с несколькими источниками наследования?
Я мог видеть, что делает что-то вроде этого:
const { RESTDataSource } = require("apollo-datasource-rest");
const UserDatabaseAPI = require("./UserRepository/db.datasource.js");
// imports and config here, including a db instance
const userDBAPI = new UserDatabaseAPI(db);
class databaseAPI extends RESTDataSource {
constructor() {
super();
}
createUser = userDBAPI.createUser;
...
}
Хотя я думаю, что это может стать головной болью. Есть ли другой подход, который мог бы работать лучше здесь, или, по крайней мере, есть способ лучше сопоставить методы в моем userDBAPI
экземпляре с методами в моем корневом database.datasource.js
файле?