@vovaaar

Как написать модуль для работы с бд?

class RepositoryProvider {
	constructor(repository) {
		this.repository = repository;
	}

	getOne(key) {
		return this.repository.getOne(key);
	}

	set(key, value) {
		this.repository.set(key, value);
	}
}

class LocalStorageRepository {
	getOne(key) {
		return locStorage(`excel:${key}`);
	}

	set(key, value) {
		locStorage(`excel:${key}`, value);
	}
}

class DBRepository {
	getOne(key) {}

	set(key, value) {}
}

Столкнулся с проблемой при попытке написать реализацию абстракции для работы с хранилищами, по solid принципу. Есть провайдер RepositoryProvider который кушает в контролер реализацию хранилища. Как я понимаю мне нужно, чтобы все хранилища реализовывали методы интерфейса getOne, set. Для выборки с локал сторедж одной сущности нужен ключ, а для выборки с бд нужно подцепиться к бд, + куда то прокидывать название таблицы + там вообще выборка скорее всего не по ключу а по id. Вопрос: как сделать метод getOne универсальным? Правильно ли я делаю, что передаю key внутрь метода? Сложность именно в том, как реализовать у нескольких хранилищ одинаковые методы, которые требует интерфейс, потому что методы принимают разные параметры.
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Как я понимаю мне нужно, чтобы все хранилища реализовывали методы интерфейса getOne, set.
Вообще репозиторий должен реализовывать стандартный CRUD (по сути getOne это read, а set смесь create + update), а в него передается модель для манипуляций, из модели уже можно, в зависимости от реализованного хранилища, брать нужные данные, для бд айди, для лс ключ (хотя по сути это одно и то же, ничего не мешает вам хранить в лс цифровые ключи, если это у вас действительно хранилище, а не справочник/кэш).

Кроме того, не совсем корректно объединять кей-валуе хранилище с реляционным общим интерфейсом, так как функционал последнего на порядок шире и интерфейсом первого никак не покрывается. Разве что у вас действительно будет РБД использоваться чисто как кей-валуе, во что слабо верится.

загадкой остается только как у вас будет работать бд на фронтенде (firebase?) или лс на бэкенде...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы