Наверно, я как многие начинающие Java программисты узнал об MVC при знакомстве c фреймворком Spring, в частности, с Spring Web MVC. При изучении я делал умный вид и кивал в знак понимания данного паттерна в рамках фреймворка. Но ведь так и было, паттерн прост в объяснении, но что касается того что бы осознать его отдельно от Spring'a и даже использовать на практике, это в моей голове тогда не укрепилось.
И сегодня я хочу поделиться небольшим опытом применения данного паттерна на практике, точнее, результатом до и после его применения.
Если вы еще не знаете об MVC или немного подзабыли, советую для начала познакомится или освежить знания, так как смысл данной маленькой статьи зависит от этого. Советую статью на Habr - Шпаргалка по MV-паттернам для проектирования веб-приложений
Главной задачей моей библиотеки была - генерирование Excel документов по заданному шаблону.
В общем, опишу тот слой абстракций, который мне казался верным на тот момент, стоит отметить, что тогда я еще не вспоминал об MVC, но наитие было:
DocData Хранит бизнес данные для вставки в шаблон (
Properties
для вставки по тегам и коллекции для создания таблиц)Builder Должен отвечать за создание самого документа, на основе шаблона и переданного DocData класса
ExcelBuiler - Реализация для создания excel документов
DataMaker Данный слой многозадачный...
DataAnnotationMaker - Реализация для получения данных из бизнес логики посредством обычного POJO класса с незамысловатыми аннотациями.
Так же,
каюсь, всякая данная реализация должна была быть связующим звеном между DocData и Builder
Я опустил другие не мало важные части моей маленькой библиотеки, так как они не имеют значения для данной статьи (или я просто не хочу еще за них отвечать...)
В общем, что изменилось когда я вспомнил об MVC паттерне?
На самом деле, мало и одновременно много, но с начала я покажу что у меня получилось после применения данного подхода:
ModelData Да, я просто переименовал DocData
View бывший Builder
ExcelView
Model сюда перешла главная и большая часть DataAnnotationMaker
AnnotationModel
Controller связующая часть между Model и View
Я сказал что мало чего изменилось, так как на самом деле я поправил небольшую часть кода, при помощи среды разработки это занимает не много времени, так же тесты показывали что все исправно работает так как и до этого, но почему, я так же считаю что изменилось многое - ведь теперь, любому программисту, которому придется взаимодействовать с моей библиотекой будет легко понять архитектуру библиотеки и легко работать с нею. Я думаю, это и есть один из главных преимуществ использования паттернов и тех или иных спецификаций...
Всем спасибо, это моя первая статья, буду рад любой конструктивной критике.