@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?) или лс на бэкенде...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 14:11
4000 руб./за проект
07 мая 2024, в 14:10
10000 руб./за проект
07 мая 2024, в 13:57
5000 руб./за проект