Skip to content

Создание слоя доступа к данным.#33

Open
sFedyashov wants to merge 4 commits intoExM:masterfrom
sFedyashov:master
Open

Создание слоя доступа к данным.#33
sFedyashov wants to merge 4 commits intoExM:masterfrom
sFedyashov:master

Conversation

@sFedyashov
Copy link

Создан слой работы с данными. В самом приложении/тестах работа только
через него. Операции, специфичные для конкретной СУБД (MongoDB) убраны в
отдельный датапровайдер. Тем самым убираем связность (Issue #29) и
готовим приложение для работы с другими БД (Issue #28)

Создан слой работы с данными. В самом приложении/тестах работа только
через него. Операции, специфичные для конкретной СУБД (MongoDB) убраны в
отдельный датапровайдер. Тем самым убираем связность (Issue ExM#29) и
готовим приложение для работы с другими БД (Issue ExM#28)
.gitignore Outdated
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем добавлены эти исключения? Какие именно инструменты разработчика приводят к появлению таких файлов?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

решарпер. в связи с этим и замечанием ниже почитаю, исправлю.

@ExM
Copy link
Owner

ExM commented Oct 20, 2015

файл _ReSharper.BuildRevisionCounter/PersistentCaches/MANIFEST-000013
не следует коммитить в репо. Если пользуешся решарпером, то поищи типовые паттерны для .gitignore

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В части всех вызовов - это класс обертка над интерфейсом IDataProvider, за исключением метода Bumping, который мог быть и в составе интерфейса.
Почему нельзя было использовать сам интерфейс IDataProvider?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

мысль была такая:
IDataProvider - это классы, которые знают как работать с конкретным хранилищем, реализуют какие-то низкоуровневые операции. их может быть несколько.
DBStorage - обёртка, которая по строке из конфига (сейчас зашито в коде) определяет, какой именно класс использовать, из низкоуровневых операций делает более крупные, содержит какую-то дополнительную логику.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для укрупнения операций здесь надо использовать extension к интерфейсу. Здесь нет инкапсуляции.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bumping будет сильно зависить от реализации хранилища. В SQL это может быть один запрос, но мы интерфейсно принуждаем его разбивать на 2.

…ослойку, исправил своё ошибочное форматиривание

- разделил функционал на два блока: "рабочий" и "тестовый" (теперь
отдельные интерфейсы)
- убрал класс-прослойку, часть его функционала перенёс в расширяемые
методы (extension)
- в проекте тестирования создание DataProvider стало по классу - теперь
возможно тестировать сразу несколько классов/несколько субд
- поправил своё прошлое ошибочное форматирование (студия заменяла табы
на пробелы - теперь настроил её правильно)
- в gitignore файлы решарпера убрал с помощью "_ReSharper*"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

пробелы еще остались

…я БД, рефакторинг

- разделил "боевой" интерфейс на работу с ревизиями и с пользователями
- разграничил доступ к методам тестирования БД (через атрибут с
перечислением имён разрешенных для работу прорамм)
- рефакторинг (пробелы, EnsureAdminUser, Bumping)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Класс отвечает за разнородный функционал.
Букву I в SOLID мы уже реализовали, теперь обратим внимание на букву S

следующие правки:
-разделение класса работы с БД на 2 (ревизии и пользователи)
-код удаления БД перенесён в тестирующую сборку
-для тестов создаётся БД со случайным именем (..._GUID), после тестов
удаляется.
-переименования интерфейсов
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как результат метода зависит от его аргумента?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

аргумент для привязывания расширения к интерфейсу.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А зачем его привязывать? Метод не возможно перегрузить при наследовании или реализовать при реализации методов интерфейса, почему просто не воспользоваться константой?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants