В MVC3 была такая фича — можно было положить в App_Code razor файлик и наобъявлять в нем хелперов, а потом эти хелперы использовать в любой вьюхе. При помощи этого можно было реализовать некое подобие "контролов".
В MVC4 эта фича внезапно исчезла без объявления войны. В официальном breaking changes, что характерно, об этом ни слова.
Вопрос — что взамен? Руками писать статические методы как то совсем тоскливо. RazorGenerator не поддерживает новые синтаксические фишки, да и вообще не хочется тянуть лишние тулзы, от которых так просто не избавится потом.
... << RSDN@Home 1.2.0 alpha 5 rev. 65 on Windows 7 6.1.7601.65536>>
Здравствуйте, hVostt, Вы писали:
V>Честно говоря, хорошо, что убрали эту фичу, позволяющую плодить не эффективный и плохо сопровождаемый код.
Это с чего он неэффективный и плохо сопровождаемый? Точно такой же хелпер, как и внутри вьюх, просто в отдельном файле.
V>Делать свои контролы можно в PartialView
А параметры передавать через динамики неявно? Кто там говорил про неэффективный и плохо сопровождаемый код?
V>, Editors/Display шаблонах и в @Html.Хелперах.
Да да, генерировать html на голом шарпе, это, конечно, намного эффективнее и сопровождаемее, чем razor файл. Может того, вообще разором не пользоваться? Берешь голый шарп и вперед, на мины.
... << RSDN@Home 1.2.0 alpha 5 rev. 65 on Windows 7 6.1.7601.65536>>
Здравствуйте, hVostt, Вы писали:
V>Он деманд и есть по сути интерпретация.
Сильное заявление. Но ты можешь, конечно, рассказать, как компиляция по требованию снижает производительность итогового кода.
V> PHP так-то тоже все компилирует (современный), но это не избавляет его от ярлыка «интерпретатор».
С ярлыками в другой форум.
V>Если уже говорить про контроль со стороны компилятора... Те же контракты — давай до свидания?
Тебе сколько лет?
AVK>>Ты забыл привести исходники .Column, .Content и т.д. Разор то тоже умеет общий код в другие хелперы выносить.
V>Самый обычный fluent-интерфейс
Это неважно. Ты занимаешься обычным передергиванием, показав шарповый код с вызовом самопальных методов, а разор полностью рукопашный.
AVK>>Ну то есть ты от разора предлагаешь совсем отказаться? Спасибо, вопросов больше нет. V>Почему отказаться?
Ну, как бы ни один из твоих аргументов никак не выделяет хелперы и в равной степени относится ко всему разору.
V> Вообще не надо отказываться. Я ратую только за то, что разор решает задачу HTML-разметки.
Разоровые хелперы, что характерно, решают ровно ту же задачу.
V> Но сложная логика генерации разметки плохо подходит для разора
А никто и не предлагал пихать в разор сложную логику генерации или кашу кода с условиями и циклами. Это как раз ты предлагаешь запихивать в шарп все подряд, даже если там 95% статическая разметка.
V>Я и не претендую. Просто мой опыт разработки и досконального ковыряния известных фреймворков показывает, что разор далеко не всегда хорош
Ты споришь сам с собой.
V>Кстати, про возможность использовать razor-файлики с хелперами в MVC 3 я не знал.
Ну да, к третьему сообщению оказывается, что ты был не в курсе собственно предмета обсуждения.
... << RSDN@Home 1.2.0 alpha 5 rev. 65 on Windows 7 6.1.7601.65536>>
Здравствуйте, AndrewVK, Вы писали:
V>>Кстати, про возможность использовать razor-файлики с хелперами в MVC 3 я не знал. AVK>Ну да, к третьему сообщению оказывается, что ты был не в курсе собственно предмета обсуждения.
У вас ярко выраженное раздувшееся ЧСВ.
Даже если вы 100% правы, а оппонент не прав, не стоит так грубо разговаривать.
Здравствуйте, hVostt, Вы писали:
V>Во-первых, файлик с хелперами, где навалено в кучу все подряд.
Если в файле с хелперами навалено все подряд, это, прости, не хелперы виноваты, а навальщик.
V>Во-вторых, код в App_Code не компилируется, а интерпретируется.
Смешно. Где можно посмотреть на интерпретатор C# в фреймворке? Ты с компиляцией on demand не спутал, случаем? Так она никуда и в MVC4 не делась — вьюхи по прежнему ее поддерживают.
AVK>>А параметры передавать через динамики неявно? Кто там говорил про неэффективный и плохо сопровождаемый код? V>Чем плохо?
Чем плохо передавать параметры неявно и без какого либо контроля со стороны компилятора? Я, пожалуй, на этот вопрос отвечать не буду.
V> У меня есть партиалы Footer, TopMenu, Basket, Comments, и т.п.
А какой нибудь контрол для пейджинга — это у тебя тоже partial view? Partial view созданы для вполне конкретной цели — создание сравнительно независимых блоков в составе страницы. Скажем, виджет погоды какой — самое то. Глобальное меню и футер всяко лучше вытащить в лейаут, потому что не надо потом в каждой странице протаптывать рендер для каждого блока. А вот нечто, что можно назвать "контролами" — оно на partial view ложится фигово, потому что это обычно не готовый независимый блок, а некая заготовка, требующая энного количества обязательных параметров. И именно поэтому есть хелпер Html, который содержит совсем уж базовые вещи. И именно для этого же нужны и хелперы. Только написание более менее крупных хелперов, больше одного тега, на голом шарпе — довольно печальное занятие.
V>Универсальные контролы, часть на Editor/Display шаблонах (по входящим типам, типа string, DateTime, int... свои POCO-объекты)
Эти шаблоны работают только если ты используешь биндинг и контролы отображают непосредственно забинденные данные.
V>Таблица хелпером на C#
V>
Ты забыл привести исходники .Column, .Content и т.д. Разор то тоже умеет общий код в другие хелперы выносить.
V>Самый первый недостаток Razor-генерации: поддержка одинакового количества колонок в заголовке и в данных.
V>ДОжили блин, уже не можем генерировать HTML на C#
Ну то есть ты от разора предлагаешь совсем отказаться? Спасибо, вопросов больше нет.
V>Надо использовать инструменты разумно.
Я что то пока разумных вещей с твоей стороны не увидел. Спрошлные подтасовки и открованная неправда.
V> А не брать молоток и использовать его как лом, и как отвертку и вообще везде где придется.
И это опять очередное передергивание. Никто здесь не предлагает использовать хелперы везде, где придется.
... << RSDN@Home 1.2.0 alpha 5 rev. 65 on Windows 7 6.1.7601.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>В MVC3 была такая фича — можно было положить в App_Code razor файлик и наобъявлять в нем хелперов, а потом эти хелперы использовать в любой вьюхе. При помощи этого можно было реализовать некое подобие "контролов". AVK>В MVC4 эта фича внезапно исчезла без объявления войны. В официальном breaking changes, что характерно, об этом ни слова. AVK>Вопрос — что взамен? Руками писать статические методы как то совсем тоскливо. RazorGenerator не поддерживает новые синтаксические фишки, да и вообще не хочется тянуть лишние тулзы, от которых так просто не избавится потом.
Честно говоря, хорошо, что убрали эту фичу, позволяющую плодить не эффективный и плохо сопровождаемый код.
Делать свои контролы можно в PartialView, Editors/Display шаблонах и в @Html.Хелперах. Тогда все будет расставлено по своим местам.
Но если очень хочется, то да. RazorGenerator, но я бы побрезговал им пользоваться, кроме как для генерации почтовых писем.
Здравствуйте, AndrewVK, Вы писали:
AVK>В MVC3 была такая фича — можно было положить в App_Code razor файлик и наобъявлять в нем хелперов, а потом эти хелперы использовать в любой вьюхе. При помощи этого можно было реализовать некое подобие "контролов". AVK>В MVC4 эта фича внезапно исчезла без объявления войны. В официальном breaking changes, что характерно, об этом ни слова. AVK>Вопрос — что взамен? Руками писать статические методы как то совсем тоскливо. RazorGenerator не поддерживает новые синтаксические фишки, да и вообще не хочется тянуть лишние тулзы, от которых так просто не избавится потом.
V>>Честно говоря, хорошо, что убрали эту фичу, позволяющую плодить не эффективный и плохо сопровождаемый код. AVK>Это с чего он неэффективный и плохо сопровождаемый? Точно такой же хелпер, как и внутри вьюх, просто в отдельном файле.
Во-первых, файлик с хелперами, где навалено в кучу все подряд.
Во-вторых, код в App_Code не компилируется, а интерпретируется. Хорошо для легковесных сайтов, для серьезных проектов, где нужно управлять данными, кешированием и т.п. плохо.
V>>Делать свои контролы можно в PartialView AVK>А параметры передавать через динамики неявно? Кто там говорил про неэффективный и плохо сопровождаемый код?
Чем плохо? У меня есть партиалы Footer, TopMenu, Basket, Comments, и т.п. Лучше партиалов в MVC3/4 пока ничего не придумали для этого.
Универсальные контролы, часть на Editor/Display шаблонах (по входящим типам, типа string, DateTime, int... свои POCO-объекты)
Сложные контролы типа Гридов всяких проще реализовать средствами C#, чем Razor сравните два кода:
Самый первый недостаток Razor-генерации: поддержка одинакового количества колонок в заголовке и в данных. Пока логика простая и колонок мало, еще нормально, но с увеличением при активной разработке, одни сплошные маты. При генерации своим C# хелпером, это контроллируется на уровне кода и никаких накладок.
ДОжили блин, уже не можем генерировать HTML на C#
V>>, Editors/Display шаблонах и в @Html.Хелперах.
AVK>Да да, генерировать html на голом шарпе, это, конечно, намного эффективнее и сопровождаемее, чем razor файл. Может того, вообще разором не пользоваться? Берешь голый шарп и вперед, на мины.
Надо использовать инструменты разумно. А не брать молоток и использовать его как лом, и как отвертку и вообще везде где придется.
Здравствуйте, AndrewVK, Вы писали:
V>>, Editors/Display шаблонах и в @Html.Хелперах.
AVK>Да да, генерировать html на голом шарпе, это, конечно, намного эффективнее и сопровождаемее, чем razor файл. Может того, вообще разором не пользоваться? Берешь голый шарп и вперед, на мины.
Ах да, это не только эффективней, это ещё и проще! Да-да.
Зацените, как можно отрендерить таблицу:
public class Grid<T> : IHtmlString
...
public string ToHtmlString()
{
var table = new Tag("table")
.Inner(new[] { new Tag("thead")
.Inner(new Tag("tr")
.Inner(_columns.Select(x => new Tag("th")
.Text(x.Caption)
.Class(x.CaptionClass)))) }
.Concat(_model
.Select(row => new Tag("tr")
.Inner(_columns.Select(column => new Tag("td")
.Inner(column.Content(row))
.Class(column.Class)))))
);
return table.ToHtmlString();
}
...
Не самая лучшая моя реализация, и писанная буквально на коленке. Если немного покорпеть, то можно вообще сделать «сахарную бомбу»
Здравствуйте, AndrewVK, Вы писали:
V>>Во-вторых, код в App_Code не компилируется, а интерпретируется. AVK>Смешно. Где можно посмотреть на интерпретатор C# в фреймворке? Ты с компиляцией on demand не спутал, случаем? Так она никуда и в MVC4 не делась — вьюхи по прежнему ее поддерживают.
Он деманд и есть по сути интерпретация. PHP так-то тоже все компилирует (современный), но это не избавляет его от ярлыка «интерпретатор». Вьюхи кстати можно прям в bin компилировать на стеке это уже много раз обсуждалось. А вот App_Code — нет. Хотя я всего лишь делаю предположения на счет того, как это сказывается на производительности, т.е. могу ошибаться.
AVK>>>А параметры передавать через динамики неявно? Кто там говорил про неэффективный и плохо сопровождаемый код? V>>Чем плохо? AVK>Чем плохо передавать параметры неявно и без какого либо контроля со стороны компилятора? Я, пожалуй, на этот вопрос отвечать не буду.
Если уже говорить про контроль со стороны компилятора... Те же контракты — давай до свидания?
V>> У меня есть партиалы Footer, TopMenu, Basket, Comments, и т.п. AVK>А какой нибудь контрол для пейджинга — это у тебя тоже partial view? Partial view созданы для вполне конкретной цели — создание сравнительно независимых блоков в составе страницы. Скажем, виджет погоды какой — самое то. Глобальное меню и футер всяко лучше вытащить в лейаут, потому что не надо потом в каждой странице протаптывать рендер для каждого блока. А вот нечто, что можно назвать "контролами" — оно на partial view ложится фигово, потому что это обычно не готовый независимый блок, а некая заготовка, требующая энного количества обязательных параметров. И именно поэтому есть хелпер Html, который содержит совсем уж базовые вещи. И именно для этого же нужны и хелперы. Только написание более менее крупных хелперов, больше одного тега, на голом шарпе — довольно печальное занятие.
Вы наверное никогда не ковыряли исходники компонентов для ASP.NET MVC от Telerik, DevExpress, да хоть тот же MVCContrib. Те ребята наверное совсем-совсем дураки, так как с вами в корне не согласны? Посмотрите как у них устроены контролы. Сложнейшие, с кучей js-кода (и даже css, подмешиваемого в bundlers). @Html.Хелперы + Editor/Display шаблоны прекрасно решают свою задачу. А не как вы говорите «совсем уж базовые вещи».
V>>Универсальные контролы, часть на Editor/Display шаблонах (по входящим типам, типа string, DateTime, int... свои POCO-объекты) AVK>Эти шаблоны работают только если ты используешь биндинг и контролы отображают непосредственно забинденные данные.
Ну типа того. Однако можно и не забинденные данные подсунуть, указав наименование Editor/Display шаблона "строчкой". Хотя это не самый лучший выход.
V>>Таблица хелпером на C# AVK>Ты забыл привести исходники .Column, .Content и т.д. Разор то тоже умеет общий код в другие хелперы выносить.
Самый обычный fluent-интерфейс. Реализация на столько примитивная, что нет смысла её приводить. По сути собираем данные цепочкой и рендерим их, реализуя IHtmlString интерфейс.
V>>ДОжили блин, уже не можем генерировать HTML на C# AVK>Ну то есть ты от разора предлагаешь совсем отказаться? Спасибо, вопросов больше нет.
Почему отказаться? Вообще не надо отказываться. Я ратую только за то, что разор решает задачу HTML-разметки. Но сложная логика генерации разметки плохо подходит для разора — кашу кода с условиями и циклами никакой разор не спасёт (на примере обычной таблицы).
V>>Надо использовать инструменты разумно. AVK>Я что то пока разумных вещей с твоей стороны не увидел. Спрошлные подтасовки и открованная неправда.
Я и не претендую. Просто мой опыт разработки и досконального ковыряния известных фреймворков показывает, что разор далеко не всегда хорош, и особенно плох в разработке сложных контролов. С другой стороны именно для разметки лучше разора я не встречал. Так что тут бай дизайн, и на вкус и цвет.
Кстати, про возможность использовать razor-файлики с хелперами в MVC 3 я не знал. Возможно, если бы знал, то использовал бы их. И был бы целиком на вашей стороне
V>>Зацените, как можно отрендерить таблицу: AVK>С примерами, где идеально регулярная и избыточная структура все понятнее. Куда интереснее, когда структура нерегулярна, да еще с намешанным JS.
Тем более. Значит много всяких условий, виртуальных структур/делегатов, коллекций, циклов... Всё это на Razor-е: встречал я такие штуки. Даже подсветка синтаксиса и отбивка кода совсем не спасает. Хотя что там, пол литра и вперед!
Здравствуйте, hVostt, Вы писали:
AVK>>С примерами, где идеально регулярная и избыточная структура все понятнее. Куда интереснее, когда структура нерегулярна, да еще с намешанным JS.
V>Тем более. Значит много всяких условий, виртуальных структур/делегатов, коллекций, циклов...
Нет, не значит.
... << RSDN@Home 1.2.0 alpha 5 rev. 65 on Windows 7 6.1.7601.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>В MVC3 была такая фича — можно было положить в App_Code razor файлик и наобъявлять в нем хелперов, а потом эти хелперы использовать в любой вьюхе. При помощи этого можно было реализовать некое подобие "контролов". AVK>В MVC4 эта фича внезапно исчезла без объявления войны. В официальном breaking changes, что характерно, об этом ни слова. AVK>Вопрос — что взамен? Руками писать статические методы как то совсем тоскливо. RazorGenerator не поддерживает новые синтаксические фишки, да и вообще не хочется тянуть лишние тулзы, от которых так просто не избавится потом.
Дасадно . Поделитесь как решили проблему, нам тоже светит переход с 3 на 4.
Здравствуйте, achmed, Вы писали:
A>Дасадно . Поделитесь как решили проблему, нам тоже светит переход с 3 на 4.
Да как, вернулись к RazorGenerator. Отвалилась возможность не писать для констант Url.Content, в остальном вроде пока полет нормальный, IT даже часть вьюх на него перевел ради контроля содержимого при компиляции.
... << RSDN@Home 1.2.0 alpha 5 rev. 65 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>В MVC3 была такая фича — можно было положить в App_Code razor файлик и наобъявлять в нем хелперов, а потом эти хелперы использовать в любой вьюхе. При помощи этого можно было реализовать некое подобие "контролов". AVK>В MVC4 эта фича внезапно исчезла без объявления войны. В официальном breaking changes, что характерно, об этом ни слова. AVK>Вопрос — что взамен? Руками писать статические методы как то совсем тоскливо. RazorGenerator не поддерживает новые синтаксические фишки, да и вообще не хочется тянуть лишние тулзы, от которых так просто не избавится потом.
Пытаюсь освоить MVC, и не получается никак хелпер написать, сам хелпер пишется, но когда я его кладу в дирректорию App_Сode то он почему-то не может выполнять инструкции типа @Html.TextBox, пишет что объект Html — null. Не понимаю как решить эту проблему.