Skip to content

СУБД для книжного магазина

Notifications You must be signed in to change notification settings

Victor954/WebAppBook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Документация к проекту WebAppBook

Данный проект нацелен на ведение учета книг (СУБД). За его реализацию мною было принято взяться после завершения прошлого проекта и получением более глубоких знаний в ООП и C#.

ВНИМАНИЕ! Данная документация не является точным описанием всего функционала, по причине слишком большого объема компонентов. Но ее прочтение поможет легче влиться во внутреннее устройство приложения.


Краткое описание структуры проекта:

Контроллеры – являются точкой инициализации или наследуются от классов Base_Class.

Классы пространства имен Base_Class сочетают в себе обработку данных и обращение к БД.

Модуль - содержит классы таблиц для EF и еще класс ListCollection.

View – разделяется на 3 категории:

  • Представления для таблиц (Контроллеры Book, Author и Publisher).Каждый контроллер содержит представления для вывода таблицы(Имя контроллера) ,изменения(EditForm) и добавления(AddForm).
  • Базовое представление Index.
  • Иные подключаемые представления (Меню, Layout, Пагинация и.т.д).

Контроллеры:

Контроллеры (за исключением HomeController) находятся в папках Filter , MainTable , SecondTable , что делит их на следующие категории:

Filter – содержит контроллеры для фильтрации.

MainTable – содержит контроллеры для команд CRUD больших по размеру таблиц (Book, Author и Publisher).

SecondTable – содержит контроллеры для команд CRUD малых по размеру таблиц.

Ниже более подробно рассматривается каждая из категорий и контроллер Home.

1.Filter:

AuthorSearchController – контроллер для фильтрации коллекции объектов таблицы Author. Как и все контроллеры в Filter он наследуется от FilterController с указанным типом фильтруемых объектов, где в свою очередь создается базовый класс фильтрации FilterContext, обрабатывающий класс ConcreteFilter через метод SetFilterResult.ConcreteFilter с указанным типом фильтруемых объектов служит набором определённых фильтров и имеет методы фильтрации, что и вызываются в action методах.Во время обращения запроса к action методу происходит перенаправление к action TableInvoke контроллера с именем соответствующим фильтруемому типу.

BookSearchController и PublisherSearchController почти аналогичны AuthorSearchController, только используют другие типы для фильтрации и чуть иначе выполняют обработку запроса на фильтрацию.

2.MainTable:

Все контроллеры наследуются от TablesBaseDataController с указанным типом обрабатываемого объекта таблицы, где определяются следующие методы и поля:

AddWithFileCommand tableAndFileControll – используется для сохранения картинки и таблицы.

protected static ControllerInfo container – контейнер значений , что являются уникальными для каждого контроллера.

protected abstract ControllerInfo SetContainerValue() – абстрактный метод для инициализации ControllerInfo значениями.

public string Upload() – добавляет путь файла и сохраняет его в виде byte массива.

public void RemoveTable(T table) – удаляет поле равное переданному объекту T table из таблицы.

public ActionResult TableInvoke() – возвращает представление для вывода на страницу , использует либо данные из фильтрации , либо делает запрос на их выборку

public ActionResult AddForm() – возвращает представление для добавления поля в таблицу.

public ActionResult EditForm(int id) - возвращает представление настройки выбранного поля.

public ActionResult SetPagination(ushort page) – action для настройки страницы пагинации , переопределяет в TableInvoke() для вывода нового результата.

Все контроллеры в MainTable имеют данные поля и методы. По мимо этого в них еще есть AddTable() и EditTable() , для изменения поля в таблице или ее добавления.

3. SecondTable:

Все контроллеры наследуются от TablesSecondDataController с указанным типом обрабатываемого объекта таблицы, где определяются следующие методы и поля:

protected static CommandContext selectContext – позволяет делать запросы, возвращающие коллекцию объектов таблиц .

protected static CommandVoidContext voidContext – позволяет делать запросы ничего не возвращающие.

static SearchTableFromContext dbSetType – по умолчанию принимает метод ,что в зависимости от указанного типа позволяет манипулировать с ним подобной таблицей.

protected List listSecondTables – сюда передается лист из ListCollection для манипуляции над ним через action методы.

protected Search searchMethod – хранит метод определяющий тип таблицы в БД.

private JsonResult SetResulst() – используется для создания CommandVoidContext команд и возврата.

public void AddList() – добавляет в ListCollection переданный объект.

public void RemoveList() – удаляет из ListCollection переданный объект.

public JsonResult AddDb() – добавляет в бд переданный объект.

public JsonResult EditDb() – изменяет в бд переданный объект.

public JsonResult DeleteDb() – удаляет в бд переданный объект.

public virtual JsonResult Search() – виртуальный метод. Производит поиск по переданной строке, может быть переопределен и создана новая реализация поиска.

Все контроллеры MainTable определяют через конструктор все необходимые для работы поля.

4.HomeController

Наследуется от TablesData и определяет action для index , где вызывается TablesData.View() с переданными значениями размера установленных ViewBag.Сбрасываются значения ListCollection и устанавливается страница пагинации на 0.


Описание классов, делегатов, интерфейсов и перечислений:

1.CommandCRUD.cs

Интерфейсы:

ICommandVoid – может быть наследован и использован в CommandVoidContext для создания запроса не возвращающего значение.

ICommandResult – может быть наследован и использован в CommandContext для создания запроса, возвращающего IEnumerable полей таблиц T. Так же CommandContext поддерживает асинхронный вариант ICommandResult - IСommandResultAsync.

IСommandResultAsync – может быть наследован и использован в CommandContext для создания асинхронного запроса возвращающий List таблиц T.

ICommandSingle – может быть наследован и использован в CommandSingleContext для создания запроса возвращающий одно поле таблицы в виде объекта таблицы T.

ITableInclude - может быть наследован для создания класса управляющего над связанными таблицами.

IFileCommand - может быть наследован для создания класса управляющего над файлами.

Классы:

CommandContext - Singleton класс. Создает подключение к бд и передает в ICommandResult или IСommandResultAsync контекст EF, возвращая результат запроса. Имеет в себе методы часто вызывающих запросов.

CommandVoidContext – схож с CommandContext , только принимает ICommandVoid и имеет методы самых частых ничего не возвращаемых запросов.

CommandSingleContext - схож с CommandContext , только принимает ICommandSingle и имеет методы самых частых возвращающих только один объект таблицы запросов.

Делегаты:

SearchTableFromContext - использует для определения таблицы из контекста.

IncludeTables - используется для синхронизации объекта таблицы с ее привязанными объектами таблиц.

2.ConcreteCRUD.cs

Классы:

AddCommand - наследуется от ICommandVoid и в зависимости от указанного типа с соответствующей таблицей будут происходить манипуляции указанные в EntityState.

BaseSelectCommad - частичный класс, предоставляющий общий интерфейс для создания классов унаследованных от ICommandResult или ICommandResultAsync.

SelectCommand - по переданному параметру выборки возвращает либо пагинированый результат, либо все элементы сразу.

SelectCommandAsycn - асинхронная версия SelectCommand.

SingleController - по переданному определению таблицы и id ищет через отражение таблицу с этим id в EF и возвращает ее объект.

EditManyToManyCommand - создает AddManyToManyCommand и передает туда первый элемент по переданному id.

AddManyToManyCommand – добавляет связанные таблицы к главной таблице.

RelatedTableCommand – позволят управлять связанными объектами-таблиц типа T для таблицы типа A.

AddWithFileCommand - сохраняет путь и файл в виде байт массива для передачи их в объект класса реализующий IFileCommand ,выполняющий управление с ними.

DefaultEditFile - сохраняет или добавляет указанный объект таблицы вместе с файлом, если тот не равен null.

DefaultControllFile - сохраняет файл по переданному пути и вместе с ним выполняет EntityState для переданного объекта таблицы.

3.CommandFilter.cs

Классы:

CollectionFilterCommad - управляет цепочкой возвращаемых фильтрами значений и является суперклассом для всех конкретных реализаций фильтра.

FilterName - выполняет фильтрацию по строке и передает результат в цепочку CollectionFilterCommad.

FilterMayny - производит поиск по связанным таблицам и передает результат в цепочку CollectionFilterCommad.

FilterSelectController - содержит лист фильтров и изначальных данных для фильтрации, позволяет добавлять новые фильтры и вызывать их обработку с возвратом последующего результата. Применяется пагинация

Делегаты:

StringFormater - конвертирует переданный объект таблицы в строку.

4.FilterController.cs

Классы:

FilterController - базовый контроллер, содержащий класс FilterContext, что при фильтрации принимает класс конкретного набора фильтров.

5.FilterTable.cs

Интерфейсы:

IFilterPart - определяет интерфейс для классов, содержащих правила фильтрации. Возвращает лист фильтров.

Классы:

ConcreteFilter - конкретная реализация правила фильтраций. Возвращает лист фильтров равный правилам фильтрации.

FilterContext - класс, вызывающий переданные классы правил фильтров, передавая в качестве начального значения IQueryable запроса таблиц типов T.

6.InterimTypes.cs

Классы:

ReflectionEfId - статический класс с одним методом, что возвращает Id переданного объекта T при помощи отражения.

Pagination – статический класс пагинации . Позволяет по переданному IQueryable запросу получить от туда takeCount элементов пропуская объекты относительно номера страницы startPoint и количества takeCount. Вычисляет количество страниц при помощи SetPageSize().

PanigationFilter – кэширует изначальный IQueryable запрос для повторной пагинации фильтрации.

SelectDefault – набор часто используемых значений делегата SearchTableFromContext.

7.OperationCommand.cs

Перечисления:

CommandType – предоставляет выбор либо добавления таблицы, либо ее изменения.

Классы:

TableOperationContext - абстрактный класс для предоставления метода создающий в зависимости от значения CommandType либо EditManyToManyCommand, либо AddManyToManyCommand соответствующего типа T.

BookOperation – класс для манипуляции с объектом таблицы Book.Создает все необходимые значения и передает их в свой суперкласс TableOperationContext при помощи GetCommand().

BookOperation – класс для манипуляции с объектом таблицы Author.Создает все необходимые значения и передает их в свой суперкласс TableOperationContext при помощи GetCommand().

8.TablesDataController.cs

Перечисления:

SizeSendViewBag – предоставляет выбор размера загрузки ViewBag с различными коллекциями объектов таблиц.

Классы:

TablesSecondDataController - абстрактный контроллер для предоставления методов CRUD малым по размеру таблицам.

TablesData – частичный контроллер для передачи всех контекстов работы с БД и методов возвращающих ViewBag в зависимости от значения SizeSendViewBag.

TablesBaseDataController - абстрактный контроллер предоставления методов CRUD крупным по размеру таблицам. Поддерживается пагинация и вариативность значений через структуру ControllerInfo.

Структуры:

ControllerInfo – содержит readonly поля для определения у наследуемых от TablesBaseDataController параметров .

Делегаты:

Search - позволяет вычленить из контекста БД таблицы с полями соответствующими переданной строке

9.ListCollection.cs

Классы:

ListCollection – содержит промежуточные листы для всех малых по размеру таблиц. Данное решение (костыль) было принято чтобы данные не добавлялись сразу в БД , а предварительно находились в виде коллекций. Так это упрощает добавление категорий в большие таблицы.

About

СУБД для книжного магазина

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages