Главная
страница 1
1 План доработки Dudge
В ходе поиска путей добавления в систему модуля генерации отчётности, был выявлен ряд других недостатков, связанных с архитектурой системы:

  • в коде JSP страниц, логика, связанная с предобработкой данных, которая должна была быть реализована в UI, добавлена с использованием скриплетов. Скриплеты позволяют добавить в JSP страницы логику, написанную на языке Java. Данный код будет выполняться на стороне сервера, он может быть использован, например, для подготовки данных, выводимых на странице. Скриплеты затрудняют вёрстку, поскольку их использование приводит к смешиванию конструкций, написанных на java, с кодом JSP страницы. Кроме того, в процессе вёрстки, разработчик может внести в программу ошибку, обнаружение которой в дальнейшем зачастую является сложной задачей, поскольку нарушение структуры кода в скриплете не всегда влечёт за собой ошибку компиляции. В этой связи возникла необходимость отказаться от использования скриплетов;

  • в классах DudgeBean и PermissionCheckerBean сосредоточена практически вся основная бизнес-логика системы, при этом количество строк кода в каждом классе превышает 700. Данный случай подходит под описание анти-паттерна программирования Blob (Божественный объект). Анти-паттерну Blob соответствует ситуация, когда в одном классе реализован большой объём функционала различной направленности. Как правило, в таких случаях родственный функционал выносится в отдельные классы;

  • классы сущностей в Dudge не являются POJO (Plain-Old Java Object), поскольку кроме методов для получения и установки значений полей они реализуют дополнительную бизнес-логику.

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

2 План рефакторинга Dudge

2.1 Рефакторинг кода UI


Проблема смешения кода, написанного на java, с кодом, написанным на HTML, javascript и CSS в теле JSP страниц, вызванная использованием скриплетов, имеет 2 решения:

  1. Отказаться от логики в коде страниц и проводить соответствующую предобработку данных в java классах.

  2. Использовать специальные библиотеки тегов, которые позволяют добавлять логику в JSP страницу, не нарушая её структуру.

Первый вариант решения проблемы требует глубокой переработки кода программы, что потребует большего количества времени, но оба решения практически равноценны в плане результата. В связи с этим, был выбран второй путь.

Существует две библиотеки тегов, позволяющих решить данную задачу: Jakarta Taglibs и JSTL. Для работы Jakarta Taglibs требуется, чтобы приложение было развёрнуто на сервере приложений Apache Tomcat, в то время как JSTL является частью JAVA EE, начиная с 5 версии. Dudge использует для работы сервер приложений Glassfish. Ввиду указанных выше ограничений, была выбрана библиотека JSTL.

JSTL представляет собой совокупность нескольких библиотек, каждая из которых нацелена на решение определённых задач. В частности, в составе JSTL есть библиотеки для реализации мультиязычности в приложении, парсинга XML, использования в коде страниц сложных функций, и даже для работы с базой данных.

Каждая из библиотек позволяет использовать на странице набор тегов. Так, например, JSTL-core содержит следующие теги: catch, choose, forEach, forTokens, if, import, otherwise, out, param, redirect, remove, set, url, when.

Каждый из них, в свою очередь, имеет несколько обязательных и необязательных атрибутов. Например, атрибуты тега forEach включают: begin, end, items, step, var, varStatus.

Важными отличиями JSP страниц, в теле которых используются скриплеты, от JSP страниц, реализованных с использованием тегов JSTL, являются следующие их свойства:



  • самоописательность – названия JSTL тегов раскрывают суть реализуемой ими логики;

  • Используемые в документе JSTL теги должны образовывать иерархическую структуру. То есть все открытые теги должны быть явным образом закрыты, причём, если один тег был открыт внутри другого тега, он должен быть закрыт там же – теги должны быть строго вложенными друг в друга.

Второе свойство позволяет уменьшить риск внесения случайных ошибок при редактировании страницы, поскольку нарушение структуры тегов будет классифицировано средой разработки как ошибка, в отличие от нарушения структуры кода, реализованного внутри скриплета.

2.2 Рефакторинг классов DudgeBean и PermissionCheckerBean
В рамках проведения рефакторинга классов DudgeBean и PermissionCheckerBean, должны быть последовательно выполнены следующие шаги:

  • анализ кода на наличие неиспользуемых переменных, методов. Их последующее удаление;

  • анализ кода на предмет избыточной логики, избавление от неё;

  • поиск дублирующегося кода, вынесение такой логики в отдельные методы;

  • уменьшение числа параметров, передаваемых в методы, там, где это возможно;

  • группировка методов по роду выполняемой ими работы, вынесение родственных методов в новые классы.

Значительная часть бизнес-логики, содержащейся в классе DudgeBean, может быть вынесена в отдельные классы: ContestDAO (рисунок 1), TestDAO (рисунок 2), LanguageDAO (рисунок 3), ProblemDAO рисунок 4), SolutionDAO (рисунок 5), UserDAO (рисунок 6). Каждому из этих классов соответствует одна из сущностей, использующихся в системе.

Так, классу ContestDAO соответствует сущность Contest, а классу LanguageDAO – Language. Логика методов, вынесенных в каждый из этих классов, преимущественно связана с сущностью, соответствующей данному классу.
contestdao
Рис. 1 – UML-диаграмма класса ContestDAO
testdao

Рис. 2 – UML-диаграмма класса TestDAO


languagedao

Рис. 3 – UML-диаграмма класса LanguageDAO




problemdao

Рис. 4 – UML-диаграмма класса ProblemDAO



solutiondao
Рис. 5 – UML-диаграмма класса SolutionDAO
userdao

Рис. 6 – UML-диаграмма класса UserDAO




2.3 Рефакторинг классов сущностей
Классы сущностей – это классы, для которых реализовано объектно-реляционное отображение на базу данных. Примерами таких классов могут послужить Contest, Language, Problem, Solution.

В рамках проведения рефакторинга классов сущностей, требуется:



  • проанализировать бизнес логику, реализованную в них;

  • удалить ту часть логики, что нигде не используется;

  • выделить родственные группы методов;

  • для каждой из таких групп создать отдельный класс. В том случае, если методы данного класса во время работы программы довольно часто используются, они могут быть сделаны статическими.


3 Выводы
Таким образом, в результате анализа архитектуры Dudge, был выявлен ряд недостатков. Такие недостатки, как:

  • концентрация всей бизнес логики системы в нескольких классах,

  • несоответствие классов-сущностей концепции POJO,

  • смешение HTML и java кода в теле JSP страниц,

незаметны для пользователя, но при этом затрудняют сопровождение и дальнейшее развитие системы. В этой связи, их устранение является первоочередной задачей.


Смотрите также:
1 План доработки Dudge
52.98kb.
1 стр.
1 Архитектура Dudge
114.83kb.
1 стр.
Авиационный транспорт в 2012 году проведены работы по корректировке технического задания для доработки проектной документации «Обустройство аэродрома
18.1kb.
1 стр.
Представленности оцениваемых позиций и их
58.23kb.
1 стр.
Книга о бхишме отдел «бхагавадгита»
4213.97kb.
20 стр.
Как продвигается реформирование энергорынка
40.88kb.
1 стр.
Значение лексических функций для качества машинного перевода
56.76kb.
1 стр.
Не должен содержать двойных пробелов, что выглядит обычно так: «Ой, мама, я тут пробелами увлёкся!» Текст не должен
45.14kb.
1 стр.
Исследование и анализ рынка сбыта 10 План маркетинга 18 План производства 22
1351.58kb.
8 стр.
Урок 5: Евангелие от Иоанна Рабочая тетрадь Содержание: План План урока
121.6kb.
1 стр.
Урок 3: Евангелие от Марка Рабочая тетрадь Содержание: План План урока
115.14kb.
1 стр.
План ремонта дорог местного значения на территории Грузинского сельского поселения
12.45kb.
1 стр.