Реализация модуля отчетов В соответствии с описанным в теоретической части пояснительной записки, был разработан модуль, позволяющий реализовывать «обобщенные» отчеты. С клиентской стороны реализация представляет из себя html-страницу, логику взаимодействия с сервером на которой осуществляется с помощью angularjs-контроллера. С серверной стороны был выбран следующий подход: В слое бизнес-логики есть модуль, описываемый интерфейсом IReportBl. Этот интерфейс объявляет метод GetNextStep, который принимает на вход все предыдущие шаги и тип отчета, и возвращает либо поля для нового шага, либо результаты. Результаты могут быть любых из стандартных видов – таблица, график, столбчатая диаграмма. Сам модуль базового отчета описывается интерфейсом IReportBase, так-же имеющим метод GetNextStep, с сигнатурой и выходным типом идентичным IReportBl.GetNextStep Базовая реализация IReportBl.GetNextStep, в свою очередь, является некой «фабрикой», которая по типу отчета определяет реализацию IReportBase и делегирует ему исполнение GetNextStep. При реализации конкретных отчетов было выявлено, что они обладают, по сути, одинаковым количеством шагов и типом параметров на этих шагах. В результате этого был создан абстрактный класс BaseReportSimple, который реализует IReportBase. В конкретных отчетах, реализуемых в данной работе, необходимо реализовать методы GetStartList и GetViewResult, которые возвращают список для выбора параметра отчета, и сам результат в виде таблицы или графика. Также, для реализации отчета по оценки адекватности составления теста был реализован класс RushStatistics.
Классы В данном разделе приводится описание классов, лежащих в основе архитектуры системы, а также классы, описывающие всю логику подсистемы сообщений, реализованной на основании новой архитектуры системы.
Диаграмма классов:
Описание классов
Класс BaseController
Данный класс описывает базовый функционал для «контроллера» - модуля слоя представления.
public abstract class BaseController : Controller
| Элементы класса
| Описание
| Поля
| protected IBlFactory BlFactory;
| Поле, содержащее ссылку на реализацию IBlFactory
| Методы
| protected override void OnActionExecuting(ActionExecutingContext filterContext)
| Метод, в котором происходит инициализация поля BlFactory
|
Класс ReportController
Данный класс является модулем слоя представления подсистемы отчет.
public class ReportsController : BaseController
| Элементы класса
| Описание
| Свойства
| private IMessageBl _bl;
| Содержит ссылку на реализацию модуля бизнес-логики сообщений
| Методы
| public ActionResult Index()
| Возвращает клиентское представление для основной страницы модуля
| public ViewResult BaseReport(int type)
| Возвращает клиентское представление для базового отчета
| public JsonResult BaseReportPost (List prevSteps,int type)
| Возвращает json со следующим шагом построения отчета.
|
Класс BaseBl
Данный класс описывает базовый функционал модуля слоя бизнес-логики.
public abstract class BaseBl
| Элементы класса
| Описание
| Свойства
| protected IBlManager Manager;
| Содержит ссылку на ядро слоя бизнес-логики
| Методы
| protected Func GetDalFactory;
| Возвращает реализацию фабрики слоя доступа к данным
| protected BaseBl(IBlManager manager)
| Базовый конструктор, который должен явно наследоваться в дочерних классах.
|
Интерфейс IBlFactory
Интерфейс ядра слоя бизнес-логики для взаимодействия со слоем представления
public interface IBlFactory
| Элементы класса
| Описание
| Методы
| void Init(string initUserName);
| Инициализация ядра
| TEtity GetOf();
| Возвращает реализацию интерфейса TEntity модуля бизнес-логики
|
Интерфейс IBlManager
Интерфейс ядра слоя бизнес-логики для взаимодействия с модулями слоя бизнес-логики
public interface IBlManager
| Элементы класса
| Описание
| Методы
| int GetInitUserId();
| Возвращает идентификатор пользователя, от которого совершается вызов.
| string GetInitUserName();
| Возвращает имя пользователя, от которого совершается вызов
| Func GetDalFactoryFunc();
| Возвращает реализацию фабрики модулей слоя доступа к данным
| TEntity GetOf();
| Возвращает реализацию интерфейса TEntity модуля бизнес-логики
|
Класс BlFactory
Данный класс описывает ядро слоя бизнес-логики.
public class BlFactory : IBlFactory, IBlManager
| Элементы класса
| Описание
| Методы
| protected Dictionary GetTypeCollection()
| Возвращает словарь соответствий типов интерфейсов к типам реализаций.
| int GetInitUserId();
| Реализует метод интерфейса IBlManager
| string GetInitUserName();
| Реализует метод интерфейса IBlManager
| Func GetDalFactoryFunc();
| Реализует метод интерфейса IBlManager
| TEntity GetOf();
| Реализует метод интерфейса IBlManager
| void Init(string initUserName);
| Реализует метод интерфейса IBlFactory
| TEntity GetOf();
| Реализует метод интерфейса IBlFactory
|
Интерфейс IReportsBl
Описывает интерфейс модуля слоя бизнес-логики, для подсистемы отчетов.
public interface IReportsBl
| Элементы класса
| Описание
| Методы
| ReportBaseModel GetViewNext (List prevSteps, ReportBaseTypes type);
| Возвращает следующий шаг построения заданного отчета
| string GetViewTitle(ReportBaseTypes type);
| Возвращает визуальное название отчета
| List GetBaseTypes();
| Возвращает список базовых отчетов
|
Интерфейс IDalFactory
Данный интерфейс описывает функционал для взаимодействия модулей бизнес-логики и ядра слоя доступа к данным.
public interface IDalFactory : IDisposable
| Элементы класса
| Описание
| Методы
| TEntity GetOf();
| Возвращает реализацию интерфейса TEntity модуля доступа к данным
| void BeginTransaction();
| Начинает транзакцию
| void CommitTransaction();
| Завершает транзакцию и сохраняет данные в бд
|
Класс BaseSimpleReport
Данный класс является базовым для простых одношаговых отчетов.
public abstract class BaseSimpleReport : IReportBase
| Элементы класса
| Описание
|
| public ReportBaseModel GetViewNext(List prevSteps, IBlManager manager)
| Возвращает следующий шаг отчета
| public abstract string GetViewTitle();
| Возвращает визуальное название отчета
|
Интерфейс IReportBase
Данный интерфейс описывает базовый отчет
public interface IReportBase
| Элементы класса
| Описание
| Методы
| ReportBaseModel GetViewNext( List prevSteps, IBlManager manager);
| Возвращает следующий шаг отчета
| string GetViewTitle();
| Возвращает визуальное название отчета
|
Класс ReportsHelper
Данный интерфейс описывает модуль доступа к данным подсистемы сообщений.
public static class ReportsHelper
| Элементы класса
| Описание
| Методы
| public static double GetTestFinalScore (TestItemModel test, List answers)
| Рассчитывает оценку прохождения теста
| public static ReportBaseModel GetSimpleSelectStepModel (List selectList,
| Возвращает простой шаг
| public static string GetPercentString(double inp)
| Возвращает представление числа в процентах
|
Класс DisciplineDetailsReport
Данный класс реализует отчет успеваемости студентов по курсу
public class DisciplineDetailsReport : BaseSimpleReport
| Элементы класса
| Описание
| Методы
| public CustomTable GetReport(int discId)
| Возвращает результат отчета
| protected override ReportBaseModel GetStartList()
| Возвращает первый шаг отчета
| protected override ReportBaseModel GetViewResult(string paramId)
| Возвращает визуальный результат отчета
|
| public override string GetViewTitle()
| Возвращает визуальное название отчета
|
Класс GroupDetailsReport
Данный класс реализует отчет успеваемости студентов в группе
public class GroupDetailsReport : BaseSimpleReport
| Элементы класса
| Описание
| Методы
| public CustomTable GetReport(int groupId)
| Возвращает результат отчета
| protected override ReportBaseModel GetStartList()
| Возвращает первый шаг отчета
| protected override ReportBaseModel GetViewResult(string paramId)
| Возвращает визуальный результат отчета
| public override string GetViewTitle()
| Возвращает визуальное название отчета
|
Класс StudentDetailsReport
Данный класс реализует отчет успеваемости студента
public class StudentDetailsReport : BaseSimpleReport
| Элементы класса
| Описание
| Методы
| public List GetReport (int studentId)
| Возвращает результат отчета
| protected override ReportBaseModel GetStartList()
| Возвращает первый шаг отчета
| protected override ReportBaseModel GetViewResult(string paramId)
| Возвращает визуальный результат отчета
|
| public override string GetViewTitle()
| Возвращает визуальное название отчета
|
Класс StudentDetailsReport
Данный класс реализует отчет успеваемости студента
public class StudentDetailsReport : BaseSimpleReport
| Элементы класса
| Описание
| Методы
| public List GetReport (int studentId)
| Возвращает результат отчета
| protected override ReportBaseModel GetStartList()
| Возвращает первый шаг отчета
| protected override ReportBaseModel GetViewResult(string paramId)
| Возвращает визуальный результат отчета
|
| public override string GetViewTitle()
| Возвращает визуальное название отчета
|
|