Декларативный язык XSL (как) как взгляд MVC на типизированную модель? - PullRequest
1 голос
/ 19 ноября 2008

Как большой поклонник XSL, я очень рад использовать xsl в качестве представления в нашей проприетарной инфраструктуре MVC на ASP.NET. Объекты в модели сериализуются под капотом с использованием сериализатора XML .NET, и мы используем совершенно атомарные шаблоны xsl, чтобы объявить, как должен преобразовываться каждый объект или свойство.

Например:

  <xsl:template match="/Article">
    <html>
      <body>
        <div class="article">
          <xsl:apply-templates />
        </div>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="Article/Title">
    <h1>
      <xsl:apply-templates />
    </h1>
  </xsl:template>

  <xsl:template match="@*|text()">
    <xsl:copy />
  </xsl:template>

Этот механизм позволяет нам быстро переопределить шаблоны сопоставления по умолчанию, например, сопоставление шаблона с последним элементом в списке или выбранным, и т. Д. Кроме того, объекты расширения xsl в .NET позволяют нам лишь немного дополнительной власти что нам нужно. Общие общие шаблоны могут быть разделены и включены.

Однако

Несмотря на то, что я могу игнорировать отрицательную сторону многословия xsl (поскольку intellisense + фрагменты схемы Visual Studio действительно хороши, хвала команде VS), недостатком отсутствия наличия intellisense над объектами строгого типа в модели действительно является то, что вызывает ошибки я.

Я видел пользовательские элементы управления ASP.NET MVC + в действии, и мне это действительно нравилось, но мне интересно;

Есть ли способ получить некоторый тип intellisense по XML, который мы перебираем, или вам известен язык, который предлагает свободу и декларативность XSL, но имеет преимущества strongtype / intellisense, например, webforms / usercontrols / asp.net.mvc ракурса?

(я, вероятно, знаю ответ: «нет», и я скоро обнаружу, что скоро использую совершенно крутое mvc shizzle Фила Хаака ...)

Ответы [ 2 ]

1 голос
/ 21 ноября 2008

Вы можете использовать сериализованную (xml) форму ваших объектов и редактировать ее с помощью XML-редактора VS (я использую VS2008).

Затем свяжите схему xsd с этим документом xml. Используйте схему, которую xsd, exe сгенерировали сами и которые она использует при сериализации / десериализации.

Вы увидите, что вы получаете intellisense бесплатно !

Более того, если вы редактируете схему и добавляете

    <xs:annotation>
      <xs:documentation>
        Helpful Explanation.
      </xs:documentation>
    </xs:annotation>

тогда редактор XML не только запросит имена и значения возможных элементов или атрибутов, , но также выдаст «Полезное объяснение» для каждого из них. данные аннотации введены в схему xml.

Чтобы узнать, как связать XML-схему с XML-документом, воспользуйтесь справкой local VS2008 или и найдите ее в MSDN онлайн или прочитайте его здесь .

Надеюсь, это помогло.

Приветствия

Димитр Новатчев

0 голосов
/ 17 декабря 2008

Это что-то не по теме, но я был не в курсе создания CMS с xsl (t) и страданиями, которые я вызвал, я бы порекомендовал asp.net mvc по другим причинам, кроме intellisense. Но это хорошо.

Первоначально я использовал xsl, чтобы отделить представление от данных, что он и сделал. Но дизайнерам было очень тяжело, потому что все это выглядело как HTML для них. Больше угловых скобок и т. Д. И я постоянно беседовал, «но почему я не могу иметь документ с все в нем»

Xsl был также slooow, и очень требовательный к памяти. Ошибки, связанные с нехваткой памяти, смущают, и к тому времени, когда вы получаете их, поздно. И, конечно же, кэширование просто использует больше памяти.

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

На самом деле в библиотеках MVCContrib уже есть проект, основанный на этом.

Надеюсь, это поможет вашему решению

...