Статьи

Почему вы должны рассмотреть гобелен 5

Tapestry 5.0.14 был выпущен недавно, и сообщество Tapestry очень взволновано этой новостью, потому что Tapestry 5 всего лишь один шаг, чтобы стать GA. Если вы еще не слышали о T5, это веб-инфраструктура на основе компонентов с открытым исходным кодом, полностью обновленная по сравнению с предыдущей версией. Некоторым людям может не понравиться предыдущая версия из-за кривой обучения ее использованию. Некоторые люди даже пишут скандалы о предыдущей версии. Но T5 — это совершенно другая архитектура с тем же мышлением, что и в предыдущей версии. Так что же хорошего в T5? И почему вы должны рассмотреть это для вашего следующего проекта? Вот моя личная причина, основанная на моем опыте создания моего проекта с открытым исходным кодом с использованием T5.

  1. Создание пользовательских компонентов легко и быстрее
  2. Подумайте о создании пользовательских компонентов с помощью Taglib или, что еще хуже, подумайте о создании пользовательских компонентов с помощью JSF. Забудьте о тех страшных днях, теперь создавать компоненты с T5 очень весело, потому что в основном это просто POJO, что означает, что вы можете тестировать свои компоненты по отдельности. Вот простой пример компонента T5:

    public class AddChar {
    @Parameter(required=true)
    private String value;

    @Parameter(required=true)
    private int position;

    @Parameter(required=true)
    private String character;

    void beginRender(MarkupWriter writer){
    StringBuffer sb = new StringBuffer(value);

    sb.insert(position, character);

    writer.write(sb.toString());
    }
    }

    А вот как мы называем это из нашего шаблона страницы:

    <t:addChar value="literal:HelloWorld" position="5" character="literal:-"/>

    Или, если вы предпочитаете встраивать его в свой HTML-тег, чтобы ваш веб-дизайнер мог использовать его / ее любимый HTML-дизайнер для предварительного просмотра, вы можете использовать его следующим образом:

    <span t:type='addChar' t:value="literal:HelloWorld" position="5" character="literal:-"/>

    Разве это не так просто, чтобы быть правдой? Хорошо, хорошо, я знаю, что это очень простой компонент, но не думайте о сложности, но подумайте о том, сколько файловых артефактов вам нужно контролировать по сравнению с созданием компонентов в Struts2, Tapestry 4, JSTL или даже JSF. Ой, я не хотел приводить здесь форум, посвященный созданию веб-фреймворков, но мне нужно упомянуть название фреймворка, чтобы вы поняли, о чем я говорю. Я такой парень, которому действительно нравится создавать компоненты, и в прошлом создание пользовательских компонентов с фреймворками со Struts меня очень расстраивает. Но теперь с T5 я нашел это очень забавным.

  3. Легко создавать шаблоны
  4. Как мы создаем шаблоны в T5? (Сообщество гобеленов называет это Layout или Border, термин, унаследованный от Tapestry 4. Но я бы просто назвал его шаблонами, поскольку все больше людей знакомы с этим термином). Вы будете удивлены, что все, что вам нужно сделать, это создать фиктивный компонент (как я его называю) под пакетом компонентов как таковым:

    @IncludeStylesheet( "context:css/myapp.css" )
    public class Layout {

    }

    Затем создайте шаблон с тем же именем, что и класс компонента (Layout.tml):

    <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
    <head>
    <title>Tapestry5 Experiments</title>
    </head>
    <body>
    <div id="wrap">

    <t:body/></div>
    </body>
    </html>

    Элемент <t: body> действительно говорит вам вставить тело фрагмента вашей страницы. И вот как будет выглядеть фрагмент вашей страницы:

    <t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
    <div id="right">
    Hello</div>
    </t:layout>

    И ниже класс страницы, где вы обычно записываете свою логику:

    public class Search {

    }

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

  5. Меньше конфигураций XML, которые нужно поддерживать и настраивать
  6. Многие из конфигураций настроены внутри web.xml, а остальные находятся внутри класса Module внутри пакета services. Этот подход намного лучше, потому что, помещая конфигурации в классы Java, вы гарантируете безопасность типов в своих приложениях. Вот пример конфигурации внутри web.xml:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <display-name>Tapestry5 Experiments</display-name>

    <context-param>
    <param-name>tapestry.app-package</param-name>
    <param-value>yourpackage</param-value>

    </context-param>
    <context-param>
    <param-name>tapestry.production-mode</param-name>
    <param-value>false</param-value>
    </context-param>

    <filter>
    <filter-name>app</filter-name>
    <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>app</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    </web-app>

    web.xml будет единственным XML-файлом, которым вы должны управлять с помощью T5. Большая часть конфигурации приложений T5 будет настроена внутри класса Java. Класс Java для настройки будет AppModule.java, поскольку имя взято из имени фильтра, настроенного в web.xml, и содержимое класса Java будет таким:

    * Примечание: это конфигурация по умолчанию, которую вы получите при создании проекта с использованием архетипа maven.

    public class AppModule
    {
    public static void bind(ServiceBinder binder)
    {
    // binder.bind(MyServiceInterface.class, MyServiceImpl.class);

    // Make bind() calls on the binder object to define most IoC services.
    // Use service builder methods (example below) when the implementation
    // is provided inline, or requires more initialization than simply
    // invoking the constructor.
    }

    public static void contributeApplicationDefaults(
    MappedConfiguration<String, String> configuration)
    {
    configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en");
    configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
    }
    }

    Мне было очень полезно иметь вашу конфигурацию в классе Java, так как вы можете найти проблемы раньше. Кроме того, в более сложном использовании этот способ настройки в Tapestry 5 может привести вас к созданию модульных и подключаемых компонентов.

  7. Соглашение по конфигурации

    1. Все классы Page находятся под yourpackage.pages
    2. Все классы Component находятся под yourpackage.components
    3. Все классы обслуживания расположены в yourpackage.services.
    4. и если вы используете T5-hibernate, все классы Model находятся в yourpackage.entities
  8. Ну, это не похоже на CoC, как в Rails, но, по крайней мере, это помогает нам сократить количество вещей, которые могут быть условными, вместо использования конфигурации. И это действительно помогает во время разработки.

    Причина, по которой XML-конфигурации получили меньше XML-конфигураций, потому что многие из этих конфигураций адресованы через CoC. Как T5 реализует CoC?

    yourpackage получает свои значения путем установки этой конфигурации:

    <context-param>
    <param-name>tapestry.app-package</param-name>
    <param-value>yourpackage</param-value>
    </context-param>

    внутри web.xml

  9. Интеграция без проблем с Groovy
  10. Вам не нужна специальная конфигурация, чтобы использовать Groovy в ваших приложениях T5. Просто используйте его, и T5 сразу распознает ваши файлы .groovy. Используйте его где угодно: в качестве класса страницы, класса обслуживания или даже класса DAO. И почему это важно? Потому что с Groovy вы можете сократить код котельной плиты.

  11. Встроенный красивый URL
  12. Вам не нужна структура urlrewritefilter, чтобы получить симпатичный URL или RESTful URL с T5, потому что это встроенная функция без какой-либо дальнейшей настройки. URL будет сгенерирован платформой на основе структуры вашего класса Page в пакете yourpackage.pages. Так что если у вас есть класс View в пакете отдела:
    | — yourpackage
    | — отдела
    | — Add.java
    Будет создан URL-адрес: http: // localhost: 8080 / yourapp / отдел / add

    Это большой шаг вперед, потому что в предыдущей версии T4 по умолчанию получился действительно ужасный URL, и вы должны настроить его, чтобы получить красивый URL.

  13. Построен в Аяксе
  14. Вы когда-нибудь задумывались над тем, чтобы получить подтверждение на стороне клиента с помощью AJAX, но легко интегрировать его? Не беспокойтесь, поскольку эта проверка AJAX встроена прямо в систему. И что даже здорово, это похоже на всплывающее событие, когда каждый раз при вводе формы возникает ошибка, она будет указывать на поле, где есть ошибка. Насколько я знаю, не во многих веб-фреймворках JVM есть эта функция из коробки, в Seam вы должны комбинировать ее с as: decorator, чтобы получить функцию проверки Ajax, и в конце она сделает ваш код многословным.

    Tapestry 5 также позволяет вам вернуть частичный фрагмент на вашу страницу с помощью компонента зоны. Еще одна интересная функция Ajax в Tapestry 5 — это компонент, похожий на «google offer», где вы можете возвращать результат в зависимости от того, что вы вводите в текстовом поле. Под капотом T5 использует Scriptaculous и Prototype в качестве своего Ajax-фреймворка. Чтобы получить лучшее представление о возможностях Ajax в T5, вы можете прочитать его в документации здесь .

  15. Множество интересных встроенных компонентов
  16. Помимо компонентов Ajax, о которых я говорил в предыдущем пункте, в T5 есть много встроенных компонентов. Много раз вы обнаруживали, что вам не нужно создавать свой собственный компонент, потому что те, что предоставляются T5, могут быть лучше или те, которые вам нужны.

    Одним из встроенных компонентов, который я нашел очень интересным, является компонент Grid . Компонент Grid — это место, где вы отображаете свой список данных в таблице. Что делает его интересным, так это встроенная функция сортировки и разбиения на страницы. Обычно с другими фреймворками вы должны реализовать это самостоятельно или даже использовать библиотеку displaytag . Во Flex я расстроился, потому что у него нет функции разбивки на страницы для компонента DataGrid. Теперь вы хотите увидеть, сколько кода требуется для создания сетки данных, которая имеет пагинацию и заголовок сортировщика полей?

    <t:grid source="users" row="user" rowsPerPage="5"/>

    Ну, верь в это. Чтобы получить представление о встроенном компоненте, который есть в T5, ознакомьтесь с документацией здесь .

  17. Полная интеграция с Hibernate
  18. Благодаря интеграции с Hibernate T5 выглядит как полнофункциональная платформа веб-приложений. Он имеет декларативную аннотацию транзакции, как аннотацию @Transactional в Spring или Seam. В T5 вы просто аннотируете свой метод с помощью @CommitAfter, чтобы получить функцию декларативной транзакции.

  19. Полная интеграция с Spring Framework
  20. Хотя в Tapestry 5 встроено Dependency Injection, но каким-то образом вы хотите использовать Spring и внедрять Spring bean-компоненты в ваши приложения T5. Вы не представляете, как легко это сделать в T5.
    Вам нужно изменить имя фильтра, чтобы использовать TapestrySpringFilter в классе web.xml следующим образом:

     <filter>
    <filter-name>app</filter-name>
    <!-- Special filter that adds in a T5 IoC module derived from the Spring WebApplicationContext. -->
    <filter-class>org.apache.tapestry5.spring.TapestrySpringFilter</filter-class>
    </filter>

    И Tapestry 5 распознает ваш bean-компонент Spring, и вы можете добавить его с помощью аннотации @Inject от T5 в своем классе Java следующим образом:

    @Inject
    private UserDAO userDAO;

    Хорошо, в основном то, что делает этот фрагмент кода, это то, что он внедрит ваш бин Spring, который называется UserDAO. Это так просто.

  21. Просто становится лучше
  22. По последней причине вы можете рассмотреть это или нет. Просто считаю это бонусом от меня. Хорошо, некоторые люди просто ненавидят рамки, которые постоянно меняются почти каждый день. Но что, если я скажу вам, что T5 постоянно меняется, или я должен сказать, превращаясь во что-то все лучше и лучше каждый день? Это может произойти только из-за видения человека, стоящего за этими рамками. Отличная интеграция, о которой я вам говорил, была добавлена ​​недавно. И следующая вещь — это интеграция Spring Web Flow. Еще одна вещь, которая вас удивит, это то, что многие люди использовали эту среду в своей производственной среде, но автор по-прежнему рассматривает эту среду как бета-версию. Таким образом, вы поймете, насколько хорошо это будет, когда он станет релизом GA.

С моей точки зрения, T5 заполняет пространство в прикладной среде точно так же, как Spring Framework и Seam. В нем есть все необходимое из коробки. Я думаю, что появление Tapestry 5 на поверхности отлично подходит для сообщества, так как оно предоставляет разработчикам больше возможностей для использования соответствующей инфраструктуры для своего проекта. То, что я написал, это лишь малая часть достоинства T5 и, конечно, это то, что мне больше всего понравилось в T5. Этот список можно продолжать, как я уже сказал, он становится все лучше с каждым днем. Но не просто поверьте мне на слово, продолжайте и посмотрите на это. Вы можете начать с чтения документации, чтобы получить общее представление о T5. Надеемся, что вы найдете себя среди многих других разработчиков, которым понравилось его использование с тех пор, как он был впервые выпущен для сообщества около года назад.

От: http://joshuajava.wordpress.com/