Хотите ли вы ASP.NET MVC механизм просмотра, в котором представление полностью создается в коде? - PullRequest
2 голосов
/ 01 апреля 2010

Недавно я создал всплеск движка представлений, в котором представления являются простыми классами, а содержимое создается с использованием забавных блоков using -scope.

Код вместе с простым образцом сайта доступен по адресу http://code.google.com/p/sharp-view-engine/

Здесь я хотел бы услышать ваше мнение относительно такой идеи. Это совершенно странно или, может быть, кому-то это нравится?

Ответы [ 3 ]

3 голосов
/ 02 апреля 2010

Я бы на самом деле не , как это.

Я могу согласиться с DSL (такими как Parser-Combinator или для генерации XML-узлов в контексте данных ), но в этом случае я думаю, что слишком много вставьте в код это. И, в конце концов, это только усложняет границы и приводит к сложному в обслуживании коду. (Вы уже можете сделать то же самое, но с большей детализацией, просто используя «стандартные» веб-элементы управления. Вы всегда можете использовать {subblock} в C # для ограничения области действия переменных.)

Подход, который я предпочитаю использовать, - это шаблоны с привязками (но без «кода в шаблонах»). Это облегчает «дизайнеру» (надеюсь, не мне или следующему человеку, который придет и) редактирование макета представления так, как они считают нужным. Однако основная логика (доступные элементы управления и привязки ) хранится в коде без помех. (Другое преимущество шаблонов заключается в том, что если они размещены снаружи, им не требуется перекомпиляция для каждого небольшого изменения.)

Простота и ремонтопригодность подобны ... дзен.

1 голос
/ 02 апреля 2010

Это интересная идея, доведенная до крайности, я бы сказал. В моем магазине мы используем HTML-соглашения почти для всего, кроме нашего макета. Единственный реальный HTML, который мы имеем в проекте, это наша главная страница Spark. Для создания самого контента мы используем условный механизм, который выделяет семантическую модель HTML. (Мы используем библиотеку HtmlTags из FubuMVC для построения семантической модели.)

Пример соглашения для отрисовки многострочного текстового поля выглядит следующим образом:

public static HtmlTag Build(ElementRequest req)
{
    return Tags.TextArea
            .Rows(6)
            .Id(req.ElementId)
            .Attr("name", req.ElementId)
            .Text(req.StringValue());
}

Эти соглашения запускаются при отражении в модели представления (или мы можем вызвать их вручную из вспомогательного метода). Вывод выводится (через ToString ()) в раздел содержимого нашей главной страницы. Мы шутим, что довольно скоро нам даже не понадобится движок просмотра.

ps вот как мы справляемся с вложением. (Ваши блоки использования выглядят загроможденными!)

return Tags.Div.Nest(
    Tags.Button("save").AddClass("positive"),
    Tags.Span.Text(" or "),
    Tags.Anchor.Text("cancel").AddClass("negative")
);

Nest () - это метод расширения, который просто принимает массив params из HtmlTag и добавляет их в дочернюю коллекцию родителя.

0 голосов
/ 01 мая 2010

Также есть еще один чистый вид представления C # для ASP.NET MVC - SharpDOM - http://sharpdom.codeplex.com/ - похожая идея, но не такая загроможденная - объединяет чистый HTML и логику - оба выражены в C #

...