Файл: Обоснование проектных решений по программному обеспечению.pdf
Добавлен: 17.06.2023
Просмотров: 98
Скачиваний: 3
СОДЕРЖАНИЕ
1.1. Выбор комплекса задач автоматизации.
1.2. Характеристика существующих бизнес – процессов.
1.3. Характеристика документооборота, возникающего при решении задачи.
1.5. Обоснование проектных решений по программному обеспечению.
2.1. Информационная модель и её описание.
2.3. Характеристика результатной информации.
2.4. Общие положения (дерево функций и сценарий диалога).
2.5. Характеристика базы данных.
2.6. Структурная схема пакета (дерево вызова программных модулей).
2.7 Описание программных модулей.
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
Код типа |
id |
int |
4 |
AI |
Наименование |
caption |
varchar |
120 |
Таблица 9
Таблица features
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
Код возможности |
id |
int |
4 |
AI |
Наименование |
caption |
varchar |
120 |
Таблица 10
Таблица competitors_features
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
Код возможности |
featureid |
int |
4 |
|
Код конкурента |
competitorid |
int |
4 |
|
Комментарий |
caption |
varchar |
120 |
Таблица 11
Таблица actions
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
Код акции |
id |
int |
4 |
|
Название |
caption |
varchar |
120 |
|
Описание |
description |
TEXT |
65655 |
|
Дата запуска |
begindate |
datetime |
10 |
|
Дата окончания |
enddate |
datetime |
10 |
|
Тип акции |
typeid |
int |
4 |
|
Код конкурента |
competitorid |
int |
4 |
2.6. Структурная схема пакета (дерево вызова программных модулей).
Популярность языка php обусловила появление большого числа фреймворков, основанных на нем. Фреймворк – программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.
Для написания информационной системы автоматизации анализа и изучения конкуренции использовался фреймворк языка php Symfony 2. Данный фреймворк работает с подходом к программированию, называемый Model-view-controller (MVC, «модель-представление-контроллер», «модель-вид-контроллер»).
Основная идея данного подхода заключается в разделении данных, их представлений и обработку действий пользователей на три больших группы:
- Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Объекты данной группы не содержат информации, как эти знания можно визуализировать.
- Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами. Главная задача – представить информацию, хранимой в модели в виде, воспринимаемым пользователем.
- Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.
Важно отметить, что как представление, так и контроллер зависят от модели. Однако модель не зависит ни от представления, ни от контроллера. Тем самым достигается назначение такого разделения: оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели.
Общая схема архитектуры информационной системы согласно данной парадигмы изображена на рисунке 16.
Рисунок 16 – Архитектура ИС (Model-view-controller)
Список разработанных программных модулей и их назначений представлен в таблице 12.
Таблица 12
Программные модули
Номер |
Название |
Описание |
1 |
routing.yml |
Файл с настройками маршрутов для маршрутизатора Symfony 2 |
2 |
DefaultContoller.php |
Класс контроллера, обрабатывающий маршрут главной страницы информационной системы |
3 |
DepartmentController.php |
Класс контроллера, содержащий методы для отображения данных и форм об отделах компании, обработки отправленных форм |
4 |
DocController.php |
Класс контроллера, содержащий методы для отображения данных и форм работы с документами, комментариями и файлами к ним, обработки отправленных форм |
5 |
StaffController |
Класс контроллера, содержащий методы для отображения данных и форм о должностях компании, обработки отправленных форм |
6 |
TypeDocController.php |
Класс контроллера, содержащий методы для отображения данных и форм о типах документов, обработки отправленных форм |
7 |
SecurityController.php |
Класс контроллера, содержащий методы и функции, необходимые для реализации функций авторизации, выхода из сайта, управления профилем пользователя |
8 |
UsersController.php |
Класс контроллера, содержащий методы для отображения данных и форм о пользователях, обработки отправленных форм |
9 |
User.php |
Класс модели, содержащий атрибуты и методы для работы с объектом пользователя |
10 |
Department.php |
Класс модели, содержащий атрибуты и методы для работы с объектом отдела |
11 |
Doc.php |
Класс модели, содержащий атрибуты и методы для работы с документом |
12 |
Comment.php |
Класс модели, содержащий атрибуты и методы для работы с объектом комментария к документу |
13 |
Status.php |
Класс модели, содержащий атрибуты и методы для работы с объектом статуса документа |
14 |
Role.php |
Класс модели, содержащий атрибуты и методы для работы с объектом роли пользователя |
15 |
TypeDoc.php |
Класс модели, содержащий атрибуты и методы для работы с типом документа |
16 |
Staff.php |
Класс модели, содержащий атрибуты и методы для работы с должностью |
17 |
DepartmentFormType.php |
Класс формы управления данными отдела |
18 |
LoginFormType.php |
Класс формы авторизации |
19 |
DocFormType.php |
Класс формы управления данными документа |
20 |
CommentFormType |
Класс формы отправки комментария |
21 |
DocFilterFormType.php |
Класс формы для реализации фильтра в списке документов |
22 |
StatusFormType.php |
Класс формы управления данными статусов документов |
23 |
StaffFormType.php |
Класс формы управления данными должности |
24 |
TypeDocFormType.php |
Класс формы для управления данными типа документа |
25 |
ProfileFormType.php |
Класс формы для реализации работы с профилем пользователя |
26 |
UserFormType.php |
Класс формы для реализации работы с данными пользователя |
27 |
UserFilterType.php |
Класс формы для реализации фильтра в списке пользователей |
2.7 Описание программных модулей.
Главная особенность объектно-ориентированного программирования (ООП) заключается в том, что при использовании этого метода происходит оперирование объектами. Под объектом в программировании понимается совокупность свойств, методов их обработки и событий, на которые данные объект может реагировать. Под свойствами объекта обычно понимают структуры данных, характерные для данного объекта, или другими словами – набор свойств характеризуют какой-либо объект. Метод – это способ влияния на свойства объекта, обычно используют два метода – установка какому-то свойству определенного значения, и считывание значения этого свойства. Объединение данных и свойственных им процедур обработки в одном объекте, называется инкапсуляцией и является одним из важнейших принципов ООП.
Еще одним фундаментальным понятием ООП является класс.
Классом называют шаблон, на основе которого создается конкретный программные объект. То есть в классе описаны все свойства и методы, определяющие поведение каждого объекта, созданного на основе этого класса. Также принято каждый объект, созданный на основе класса называть экземпляром этого класса.
Следующими важнейшими принципами ООП являются наследование и полиморфизм.
Наследование – такая организация классов, которая подразумевает создание новых классов на базе существующих и позволяет классу потомку иметь (наследовать) все свойства класса – родителя.
Полиморфизм – означает, что рожденные объекты обладают информацией о том, какие методы они должны использовать в зависимости от того, в каком месте цепочки (дерева классов) они находятся, иными словами это концепция, реализующая "множество методов в одном интерфейсе".
В структуре программных модулей разработанной ИС Можно четко проследить механизм наследования. Всего присутствует три родительских класса: InitializableController.php, AbstractEntity.php, AbstractFormType.php.
Первый является родителем для всех контроллеров ИС, он содержит объявления таких методов и свойств, которые в дальнейшем используются в каждом контроллере:
//проверка авторизации
/** @var AuthorizationChecker */
protected $authChecker;
//массив форм
/** @var array */
protected $forms;
//менеджер для доступа к модели
/** @var EntityManager */
protected $manager;
//массив объектов модели
/** @var array|EntityRepository[] */
protected $repositories;
//получение http-запроса
/** @var Request */
protected $request;
//доступ к сессии пользователя
/** @var Session */
protected $session;
//доступ к объекту текущего пользователя
/** @var User */
protected $user;
//доступ к текущему представлению
/** @var array */
protected $view;
//массив для отображения текущего раздела в панели навигации
/** @var array */
protected $navigation;
Второй родительский класс является родителем для всех сущностей. В нем выделено три основных свойства (атрибута сущности):
//Дата создания
/**
* @var \DateTime
* @ORM\Column(name = "createdat", type = "datetime")
*/
protected $createdAt;
//Идентификатор
/**
* @var int
* @ORM\Column(name = "id", type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
//дата изменения
/**
* @var \DateTime
* @ORM\Column(name = "modifiedat", type = "datetime")
*/
protected $modifiedAt;
А также конструктор создания нового объекта класса:
public function __construct()
{
$this->createdAt = new \DateTime();
$this->modifiedAt = new \DateTime();
}
И триггер обновления объекта, который меняет свойство «Дата последнего обновления записи»:
/**
* @ORM\PreUpdate
* @ORM\PrePersist
*/
public function preUpdate()
{
$this->modifiedAt = new \DateTime();
}
Последний родительский класс – это класс для форм ИС. В нем также задаются основные константы, конструктор:
const METHOD_GET = 'GET';
const METHOD_POST = 'POST';
protected $method;
protected $name;
public function __construct($name, $method = self::METHOD_POST)
{
$this->name = $name;
$this->method = $method;
}
public function getName()
{
return $this->name;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array('method' => $this->method));
}
Следует заметить, что все описанные выше родительские классы наследуются от фундаментальных классов фреймворка Symfony, которые содержат базовые свойства и методы, разделяющие эти классы на три группы MVC.
Каждый контролер обрабатывает запросы, отправляемые по соответствующему маршруту. Описание того, какой контроллер должен обрабатывать тот или иной маршрут оформляется в виде отдельного файла: routing.yml.
Пример записи (главная страница ИС):
index:
path: /
defaults: { _controller: "AppBundle:DefaultController:Index" }
Такая запись означает следующее:
- первая строка – название маршрута (index);
- вторая строка – путь, или URL-адрес маршрута (/);
- третья строка – имя класса контроллера, который должен обрабатывать маршрут, а также метод этого контроллера, ответственный именно за этот маршрут;
Обработка маршрута выполняется в контроллере DefaultController.php. При переходе по маршруту (отправке запроса на url /) начинает свою работу метод IndexAction. Данный метод проверяет наличие у пользователя открытой сессии авторизации, и если такой нет, то перенаправляет пользователя на форму авторизации (маршрут /login, Контроллер SecurityController.php).
Для обработки шаблонов и формирования на их основе html-страниц, отображаемых пользователю, используется распространенный шаблонизатор twig. Twig – компилирующий обработчик шаблонов с открытым исходным кодом, написанный на языке программирования PHP. Синтаксис, поддерживаемый шаблонизатором позволяет использовать в шаблонах ветвления, циклы, а удобная структура кода позволяет значительно сократить итоговый объем программного кода. Также стоит отметить, что шаблонизатор генерирует на основе своих шаблонов чистый php-код, который обрабатывается значительно быстрее.
При переадресации на маршрут открытия формы авторизации (/login), срабатывает метод loginAction контроллера SecurityController.php. Он создает экземпляр формы LoginFormType.php и обрабатывает её отправку.
После успешного прохождения авторизации, пользователю отображается страница со списком за явок пользователя. Данную страницу формирует метод indexAction контроллера DefaultController.php на основании шаблона General:index.html.twig.
Исходный код программных модулей приведен в приложении.
2.8. Контрольный пример реализации проекта и его описание.
При открытии страницы сайта открывается форма авторизации (Рисунок 17).
Рисунок 17. Форма авторизации
После прохождения авторизации открывается список конкурентов. Над списком конкурентов находятся кнопки для управления списком (поиска и фильтрации), открытия формы добавления нового конкурента, выгрузки текущего списка конкурентов в файл Excel и формирования отчета по текущему списку конкурентов (Рисунок 18).
Рисунок 18. Список конкурентов
Добавление нового конкурента осуществляется с помощью формы, вызываемой нажатием на соответствующую кнопку. Форма добавления конкурента изображена на рисунке 19.
Рисунок 19. Форма добавления конкурента
Работа с данными конкурента осуществляется с помощью другой формы, которая открывается при нажатии на кнопку редактирования в списке конкурентов. Форма работы с конкурентом состоит из трех вкладок: общие данные, список акций, список возможностей конкурента (Рисунок 20).
Рисунок 20. Форма работы с конкурентом