Разговор, поскольку кто-то, кто провел довольно мало времени, работая с JPA (Персистентность Java API, в основном стандартизированный API ORM для Java/J2EE/EJB), который включает, в спящем режиме, EclipseLink, Toplink, OpenJPA и другие, я совместно использую некоторые свои наблюдения.
существует другая проблема, которая берет немного больше объяснения.
традиционная модель для веб-приложения должна иметь слой персистентности и уровень представления (возможно с сервисы или другие промежуточные слои, но это важные два для этого обсуждения). ORMs вынуждают твердое представление покинуть Ваш слой персистентности до уровня представления (т.е. Ваши объекты).
Одно из критических замечаний большего количества необработанных методов SQL - то, что Вы заканчиваете со всеми этими VOs (объекты значения) или DTOs (объекты передачи данных), которые используются просто одним запросом. Это рекламируется как преимущество ORMs, потому что Вы избавляетесь от этого.
Вещью являются те проблемы, не уходят с ORMs, они просто перемещаются до уровня представления. Вместо того, чтобы создать VOs/DTOs для запросов, Вы создаете пользовательские объекты представления, обычно один для каждого представления. Как это лучше? По моему скромному мнению, это не.
я записал об этом в ORM или SQL: Мы там уже? .
Моя предпочтительная технология персистентности (в Java) в эти дни является ibatis. Это - довольно тонкая обертка вокруг SQL, который делает 90% + того, что JPA может сделать (это может даже сделать ленивую загрузку отношений хотя не хорошо зарегистрированный), но с намного меньше служебным (с точки зрения сложности и фактического кода).
Это подошло в прошлом году в приложении GWT, которое я писал. Большой перевод от EclipseLink до объектов представления в реализации услуги. Если бы мы использовали ibatis, было бы намного более просто создать соответствующие объекты с ibatis и затем передать их полностью вверх и вниз по стеку. Некоторые пуристы могли бы утверждать, что это - Bad™. возможно, так (в теории), но я говорю Вам что: это привело бы к более простому коду, более простому стеку и большей производительности.
Функции даты доступны изначально, например:
<xsl:value-of select="current-dateTime()"/>
Также есть current-date ()
и current-time ()
.
Используйте пакет расширения даты и времени EXSLT.
date.xsl
в расположение ваших файлов XSL. date.xsl
. Например:
<xsl:stylesheet version="1.0"
xmlns:date="http://exslt.org/dates-and-times"
extension-element-prefixes="date"
...>
<xsl:import href="date.xsl" />
<xsl:template match="//root">
<xsl:value-of select="date:date-time()"/>
</xsl:template>
</xsl:stylesheet>
Есть ли у вас контроль над запуском преобразования? Если это так, вы можете передать текущую дату в XSL и использовать $ current-date внутри вашего XSL. Ниже показано, как вы объявляете входящий параметр, но зная, как вы выполняете преобразование, я не могу сказать вам, как передать значение.
<xsl:param name="current-date" />
Например, из сценария bash используйте:
xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml
Затем, в xsl вы можете использовать:
<xsl:value-of select="$current-date"/>
For MSXML parser, try this:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:my="urn:sample" extension-element-prefixes="msxml">
<msxsl:script language="JScript" implements-prefix="my">
function today()
{
return new Date();
}
</msxsl:script>
<xsl:template match="/">
Today = <xsl:value-of select="my:today()"/>
</xsl:template>
</xsl:stylesheet>
Also read XSLT Stylesheet Scripting using msxsl:script and Extending XSLT with JScript, C#, and Visual Basic .NET