[flame] asp* vs jsp* [re: у гугла кишка тонка]

6yrop

Это ж надо было постараться выпустить говёненький MVC Framework в 2008 году, через более чем 60 лет после его изобретения.
да ни кого не волнует когда первый раз эти дурацкие три буквы были произнесены.
А вот strongly typed view такого в Java нет и не будет по причине замшелости мышления джавистов.
Та же замшелость была причиной выпуска кривых generic-ов, с которыми до сих пор мучаются, и которые тормозят развитие.

6yrop

А вот strongly typed view такого в Java нет и не будет по причине замшелости мышления джавистов.
кстати, strongly typed можно сделать не только "view", но и обратный процесс: преобразование form data в объекты Model/ViewModel. В языке для этого уже всё есть. Возможно, такое вскоре появится.

kokoc88

вот strongly typed view такого в Java нет и не будет по причине замшелости мышления джавистов.
Если ты про те классы, для создания которых требуется GUI, чтобы хоть как-то упростить жуткий синтаксис и другие неудобства; то слава богу, что нет и не будет. :)

6yrop

Если ты про те классы, для создания которых требуется GUI, чтобы хоть как-то упростить жуткий синтаксис и другие неудобства; то слава богу, что нет и не будет.
гы лол, похоже ты даже не смотрел ASP.NET MVC.

kokoc88

гы лол, похоже ты даже не смотрел ASP.NET MVC
Да нет, смотрел, и охуевал.

6yrop

гы лол, похоже ты даже не смотрел ASP.NET MVC
Да нет, смотрел, и охуевал.
По последней ссылке я сам охуевал, и постил об этом тут.
Но ты не уводи разговор в сторону, речь идет о "strongly typed view". На пальцах это вот такие ссылки на свойства "_ => _.Property1" (это linq.expression). (более подробно гугл расскажет). Такого в Java нет и не будет, если она не начнет оглядываться на C#.

FRider

На пальцах это вот такие ссылки на свойства "_ => _.Property1" (это linq.expression). (более подробно гугл расскажет). Такого в Java нет и не будет, если она не начнет оглядываться на C#.
это очень, очень круто! Больше палочек - круче и профессиональней выглядит! Сразу уважуха.

kokoc88

Но ты не уводи разговор в сторону, речь идет о "strongly typed view". На пальцах это вот такие ссылки на свойства "_ => _.Property1" (это linq.expression). (более подробно гугл расскажет).
Я уже давно погуглил на эту тему, и результатом и стал мой ответ: "это та штука, для создания которой понадобился GUI?"
Я не понимаю, чего именно нет в Java. И я тем более не понимаю, к чему ты нарисовал какую-то кракозябру, и почему в скобочках приписка, что это linq.expression
Такого в Java нет и не будет, если она не начнет оглядываться на C#.
До тех пор, пока в .NET не будет хотя бы базового набора коллекций, на него никто не будет оглядываться. И слава богу.

FRider

ну типа в жаве нет лямбд(а это так до сих пор?) и нет ЛИНКУ.
ЗЫ Шуреск зажигает, постит самое то, чем мс изговняет просто таки .нет в последнее время.

kokoc88

ну типа в жаве нет лямбд(а это так до сих пор?) и нет ЛИНКУ.
Да нет, дело-то в том, что отгугливается вот что:
public ActionResult StronglyTypedViewOfAMonkey 
{
Monkey monkey = new Monkey;
monkey.Name = "Bob the Monkey";
monkey.Age = 5;
monkey.Height = 4.5F;
return View(monkey);
}
<H3>Monkey Data:</H3>
<BR>
<P><B>Name:</B> <%= Model.Name %></P>
<P><B>Age:</B> <%= Model.Age %></P>
<P><B>Height:</B> <%= Model.Height %></P>

А в Java именно это есть вот уже много лет...

6yrop

Да нет, дело-то в том, что отгугливается вот что:
Как ты гуглишь? какую-то фигню нагуглил. У тебя в коде ридонли сценарий, это было с самого начала на любой платформе. А речь о формах для редактирования данных.

6yrop

почему в скобочках приписка, что это linq.expression
Да, это ключевой момент. Пока ты не поймешь почему тут linq.expression, так и будешь продолжать нести чушь.

kokoc88

Как ты гуглишь? какую-то фигню нагуглил. У тебя в коде ридонли сценарий, это было с самого начала на любой платформе.
Блядь, ты грамотный, просто пиздец. Представь себе, я гуглил "strongly typed view" и кликнул первую ссылку.
А речь о формах для редактирования данных.
Чем по-твоему форма для редактирования данных в браузере отличается от View?

kokoc88

Да, это ключевой момент. Пока ты не поймешь почему тут linq.expression, так и будешь продолжать нести чушь.
Чушь пока что несёшь только ты: явно не знаком с Java, но зато сделал какие-то выводы по поводу того, что там есть, а чего нет.
Я не знаю какое озарение от Била Гейтса на тебя снизошло во время молитвы на гейский* бэкграунд Windows XP, но более непонятной херни я ещё не видел:
 
Но ты не уводи разговор в сторону, речь идет о "strongly typed view". На пальцах это вот такие ссылки на свойства "_ => _.Property1" (это linq.expression). (более подробно гугл расскажет).

* Здесь я не пытался разжечь вражду на почве сексуальной ориентации.

6yrop

Блядь, ты грамотный, просто пиздец.
ну не хочешь не образовывайся, мне та чё :confused: :)

FRider

это только МС делает из райта нечто скаральное, типа а вот тут я положу текстбокс и случится магия!

6yrop

это только МС делает из райта нечто скаральное, типа а вот тут я положу текстбокс и случится магия!
если в язык не встроены какие-либо binding expression-ы, то, да, райт сценарий выглядит хреново. В случае C#-а на роль binding expression-ов случайно подошли linq.expression. Да, синтаксис громоздкий, не оптимальный, но гораздо лучше, чем никакого.

FRider

Да, синтаксис громоздкий, не оптимальный, но гораздо лучше, чем никакого.
лол, это уже во-первых спорно, во-вторых не совсем корректно. Даже в случае написания классического cgi с парсеньем данных запроса, КАКОЙ-ТО синтаксис будет. А при наличие грамотных либ, очень спорно, будет ли такой неоптимальный синтаксис лучше их. Но ты делаешь успехи, говоришь как настоящий евангелист :)

6yrop

КАКОЙ-ТО
писец, в первый класс нах, во второе полугодие — учимся читать абзацы целиком:
... в язык не встроены ...
... лучше, чем никакого.
Речь идет о встроенных в язык .

FRider

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

kokoc88

Речь идет о встроенных в язык .
Что из этого не встроено в язык? Здесь обработка результата редактирования формы, тебе сразу приходит класс, который был нужен. Никаких linq expression здесь не требуется. Поддержка валидации тоже есть, и не такая убогая, как в ASP.NET MVC.
@RequestMapping(value = "/addContact", method = RequestMethod.POST)
public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) {
System.out.println("First Name:" + contact.getFirstname + "Last Name:" + contact.getLastname;
return "redirect:contacts.html";
}

kokoc88

кстати, strongly typed можно сделать не только "view", но и обратный процесс: преобразование form data в объекты Model/ViewModel. В языке для этого уже всё есть. Возможно, такое вскоре появится.
Только возможно? Но в замшелой Java это всё уже давно есть.

6yrop

о гуе вообще
гуи тут собственно не причем, применения есть и вне гуи. На форумах встречается об этом сообщения время от времени. У меня в проекте такие конструкции используются для реализации dataflow http://propertyexpression.codeplex.com
Еще есть много идей, где это потребуется.
Собственно это всего лишь типизированная запись вот такого рефлекшен кода

type.GetPropertyInfo("PropertyName1")

Ничего больше.
Кстати, в интернетах давно идут разговоры, чтобы иметь краткий синтаксис для такого, а так же для методов.

6yrop

как выглядит view, кторая рендерит эту форму?
 
(@ModelAttribute("contact")

подобные атрибуты это убого.

Dasar

>Что из этого не встроено в язык? Здесь обработка результата редактирования формы, тебе сразу приходит класс, который был нужен. Никаких linq expression здесь не требуется. Поддержка валидации тоже есть, и не такая убогая, как в ASP.NET MVC.
кусок кода, который ты привел тяжело рефакторить и валидировать на этапе разработки.
смена contacts.html на mycoolcontacts.html уже создает проблему с отслеживанием, что все contacts.html заменены на mycoolcontacts.html

kokoc88

как выглядит view, кторая рендерит эту форму?
Как угодно, и это не шутка.
подобные атрибуты это убого.
Ты ещё ни разу не написал, как это выглядит в твоих strongly typed view, если писать их руками, а не создавать через GUI. И не разъяснил, что за херню ты нёс про LINQ. И не ответил на кучу других вопросов, от которых уже нельзя тупо отмахнуться гуглом.

kokoc88

кусок кода, который ты привел тяжело рефакторить и валидировать на этапе разработки.
смена contacts.html на mycoolcontacts.html уже создает проблему с отслеживанием, что все contacts.html заменены на mycoolcontacts.html
Не создаёт, потому что почти все библиотеки Java поддерживаются в IntelliJ IDEA. Кроме того, никто не мешает написать один обработчик с одним URL, привет от хорошо спроектированных фреймворков. А ещё можно использовать готовое решение - их много, и они часто друг с другом совместимы, как это ни удивительно звучит для евангелистов Microsoft.
В общем, не высасывай из пальца какие-то проблемы, в .NET их всё равно больше и они намного серьёзнее. И всё потому, что Microsoft год за годом продолжает изобретать велосипеды, причём либо одноколёсные, либо восьми-и более-колёсные.

6yrop

Как угодно, и это не шутка.
ну писец, может уже включишь глову? Кэп напоминает, что Contact не заполнится из любой form data.

6yrop

если писать их руками, а не создавать через GUI
слушай ты о чем? "через GUI" для ASP.NET MVC? первый раз такое слышу, может я что-то пропустил, но скорее всего тебя заносит...

kokoc88

ну писец, может уже включишь глову? Кэп напоминает, что Contact не заполнится из любой form data.
А Кэп, случайно, не напоминает, что html форму можно сделать разными способами? HTML, JSP, XSLT, Spring Tags, и так далее... Хотя фанату Microsoft это вряд ли известно.

kokoc88

слушай ты о чем? "через GUI" для ASP.NET MVC? первый раз такое слышу, может я что-то пропустил, но скорее всего тебя заносит...
Я тебе уже сказал, по каким словам отгуглил и на какую по счёту ссылку кликнул.
Давай вернёмся к теме. Ты сказал, что в Java нет strongly typed view, при этом нёс какую-то околесицу про LINQ Expressions. Гугол выдал ссылки, по которым я понял, что strongly typed view - это обычный data binding. Я тебе привёл примеры, где в Java это поддерживается и для чтения, и для записи модели. Ты признаёшь, что был не прав, когда писал, что "в замшелой Java этого никогда не было и не будет"?
Если нет, то приведи пример, чего там не было и не будет. Я предлагаю написать код с использованием strongly typed view для чтения и записи модели - это позволит тебе более конструктивно обосновать свою точку зрения. Пока что всё сводится к тому, что Microsoft в очередой раз изобрела велосипед, назвала его "двухколёсный покатун", и толкает как новейшее средство передвижения, до селе неизвестное человечеству.

Dasar

>Кроме того, никто не мешает написать один обработчик с одним URL, привет от хорошо спроектированных фреймворков. А ещё можно использовать готовое решение - их много,
в приведенном коде всего этого нет.
зы
как-то странно получается: сначала ты в качестве примера силы Java приводишь плохой код, а потом говоришь, что в хорошем коде все будет отлично.

kokoc88

в приведенном коде всего этого нет.
зы
как-то странно получается: сначала ты в качестве примера силы Java приводишь плохой код, а потом говоришь, что в хорошем коде все будет отлично.
Дело в том, что я не считаю приведённый код плохим. Ты бы не мог ещё раз сказать, что именно там не так? Только не высасывай изх пальца несуществующие проблемы с поддержкой и рефакторингом, любая мейнстримовая IDE прекрасно со всем этим справляется.
Вот пример от Microsoft, где редирект тоже идёт по строке. Я лишь говорю о том, что в Java никто ни в чём не ограничен.

kokoc88

что Microsoft в очередой раз изобрела велосипед
Судя вот по этому, они просто повторили JSP. А LINQ Expressions тут вообще упоминались не в кассу.

Dasar

> Дело в том, что я не считаю приведённый код плохим. Ты бы не мог ещё раз сказать, что именно там не так?
аттрибуты плохи тем, что в них можно использовать только константы.
соответственно невозможно с помощью аттрибутов записать ни условия, ни обобщенную версию, ни переиспользовать что-то ранее написанное
запись действия вперемешку со страницей в виде единой строки ухудшает автоматическую проверку и преобразование кода на этапе разработки.
например, опечатки в этой строке можно отследить лишь в runtime
return "redirrect:contacts.html";
прямое указание урлов без введения промежуточного слоя - ухудшает гибкость построения навигации.
> Вот пример от Microsoft, где редирект тоже идёт по строке.
это ты про: ?

return RedirectToAction("Index");

во первых, тут redirect в виде явного кода записан (а не через конкатенацию двух строк, которую и при рефакторинге, и в рантайме - придется парсить
во вторых - Index - это промежуточный индентификатор, а не конечный урл.
> только не высасывай изх пальца несуществующие проблемы с поддержкой и рефакторингом, любая мейнстримовая IDE прекрасно со всем этим справляется.
так ты все-таки расскажи - с помощью какой мейнстрим IDE для данного кода можно проверить валидность всех ссылок на этапе компиляции, и как это будет выглядеть?
для вышеприведенного кода - это решается с помощью одного правила для FxCop-а:
внутри RedirectToAction - не должен быть константных строк, а должна быть константа из пространства Action.
> Я лишь говорю о том, что в Java никто ни в чём не ограничен.
очень слабый довод.
машина тьюринга вообще никого ни в чем не ограничивает, вот только писать на ней хорошие программы затруднительно.

FRider

но ведь есть языки, где вообще нет компиляции ;) Зачем возводить проверки этапа компиляции в абсолют?

Dasar

>Судя вот по этому, они просто повторили JSP. А LINQ Expressions тут вообще упоминались не в кассу.
сам по себе JSP, эквивалентен древнему ASP и эквивалентен какому-нибудь php.
и имеет кучу проблем со стабильностью программы.
все ошибки проявляются в рантайме,
вся валидность идентификаторов проверяется в runtime,
невозможен даже простейший автоматизированный рефакторинг (поменять имя переменной)
и т.д.
зы
ты действительно не видишь разницу между?:
<td><%= this.TextBox(x => x.Name) %></td>
и
<jsp:setProperty name="test" property="message" value="Привет, WWW" />

kokoc88

аттрибуты плохи тем, что в них можно использовать только константы.
соответственно невозможно с помощью аттрибутов записать ни условия, ни обобщенную версию, ни переиспользовать что-то ранее написанное
Вода, вода, побольше конкретики и кода, как это решается в ASP.NET MVC.
прямое указание урлов без введения промежуточного слоя - ухудшает гибкость построения навигации.
Опять какая-то вода, давай побольше конкретики. Каким образом она это ухудшает, как Java тебя в чём-то здесь ограничивает, как это решено в ASP.NET MVC?
во первых, тут redirect в виде явного кода записан (а не через конкатенацию двух строк, которую и при рефакторинге, и в рантайме - придется парсить
во вторых - Index - это промежуточный индентификатор, а не конечный урл.
В Spring MVC тоже есть класс RedirectView, можно использовать его с промежуточным идентификатором, а можно редиректить и форвардить через префиксы, при чём в обоих случаях рассматриваются и плюсы, и минусы. Кроме всего, можно ещё редиректить на уровне HTTP запросов. Короче, никаких ограничений в продуманном фреймворке обычно нет.
так ты все-таки расскажи - с помощью какой мейнстрим IDE для данного кода можно проверить валидность всех ссылок на этапе компиляции, и как это будет выглядеть?
Я тебе больше скажу, IntelliJ IDEA всё это проверяет ещё до компиляции, поддерживает completion, подкрашивает ошибки. Запускать для этого отдельную тулзу? В IDE, которая вышла в 2010 году? Это пиздец, батенька!
очень слабый довод.
машина тьюринга вообще никого ни в чем не ограничивает, вот только писать на ней хорошие программы затруднительно.

На самом деле это очень сильный довод, если понимать его правильно. Чем больше свободы действий при использовании фреймворков, тем лучше. Чем меньше для достижения этой свободы приходится писать всякие хаки и прочее дерьмо, тем лучше.

Dasar

>но ведь есть языки, где вообще нет компиляции ;) Зачем возводить проверки этапа компиляции в абсолют?
вот только обычно они применяются, когда необходимо быстро написать прототип, или исследовательский проект, или вообще что-нибудь быстро написать.
но после того как что-то написали наступает стадия: поддерживать(сопровождать) работоспособность большой программы в течении десятка лет за минимум ресурсов
и тут появляется потребность - получить гарантию что программа после внесения изменения работает до сих пор правильно.
а это почти невозможно без static typing-а, проверки идентификатор и т.д..
т.е. если на этапах прототипа, исследования, быстрой разработки нас интересовало лишь как можно быстрее внести изменение,
то на этапе сопровождения нас начинает в первую очередь интересовать - как бы что не испортить.
и вот тут начинает рулить компиляция.

ava3443

и вот тут начинает рулить компиляция
тут начинает рулить покрытие кода тестами

kokoc88

<td><%= this.TextBox(x => x.Name) %></td>
и
<jsp:setProperty name="test" property="message" value="Привет, WWW" />
В JSP я бы написал вот так (заметь, в ASP.NET даже скопировали замшелые Java теги):
<INPUT TYPE=TEXT NAME="Name" SIZE=20 VALUE="<%= user.getName %>">

И это вовсе не означает, что я ограничен только этим. Я могу взять любой из десятков шаблонизаторов и применить его. При этом я не потеряю поддержку валидации, completion, data binding и так далее. И для изменения представлений мне даже не придётся менять реализацию сервера.

Dasar

>В JSP я бы написал вот так (заметь, в ASP.NET даже скопировали замшелые Java теги):
>code:<INPUT TYPE=TEXT NAME=email SIZE=20 VALUE="<%= user.getName %>">
это однонаправленное преобразование из кода в html. и я еще раз повторю, что это даже php умеет.
а как будет делаться обратное, чтобы данные из input-а попали обратно в user.Name?

serega1604

а вы, батенька, на яве-то писали что-нибудь сложнее хелловрода?

kokoc88

это однонаправленное преобразование из кода в html. и я еще раз повторю, что это даже php умеет.
а как будет делаться обратное, чтобы данные из input-а попали обратно в user.Name?
Это будет делаться на сервере в зависимости от выбранной технологии. Я же написал пример:
 
@RequestMapping(value = "/submitName", method = RequestMethod.POST)
public String submit(@ModelAttribute("user") User user, BindingResult result) {
// use the model, Luke
return new RedirectView("usersList");
}

Я ещё раз напомню, что View должны быть отделены от MC. Что мы и видим в моих примерах: с этим контроллером можно использовать JSP, Spring Tags, Velocity, ...

Dasar

>тут начинает рулить покрытие кода тестами
нет, конечно.
тестами можно(и нужно) покрыть лишь основное выполнение.
все упирается в комбинаторный взрыв
многие ошибки тестами ловятся очень плохо.
например, следующую ошибку тестами фиг поймаешь:

if (i > cache.size)
//cache увеличить в два раза
cache[i] = data;

но есть тулзы, которые эту ошибку ловят на раз при валидации кода.

Dasar

>Это будет делаться на сервере в зависимости от выбранной технологии. Я же написал пример:
<td><%= this.TextBox(x => x.Name) %></td>
но вот эта строка - делает и то, и другое, или ты это не понял?
это одна строка отвечает за то, что:
Name => Input.value при генерации страницы
и что input.value => Name при пост ответе.

Dasar

>Я ещё раз напомню, что View должны быть отделены от MC. Что мы и видим в моих примерах.
концепция mvc - всем хороша, кроме очевидной проблемы: в каком виде записать отображение M <-> V? и к какой из букв: M, V или C - это отображение отнести

kokoc88

но вот эта строка - делает и то, и другое, или ты это не понял?
Но у меня тоже только одна строка, и работает и то, и другое. Или ты это не понял?
А судя по этой ссылке, в ASP.NET MVC вообще ничего не отличается.

kokoc88

концепция mvc - всем хороша, кроме очевидной проблемы: в каком виде записать отображение M <-> V? и к какой из букв: M, V или C - это отображение отнести
Я уже когда-то писал, что я не адепт MVC; а вступать в водяные теологические споры я не хочу. Мне просто интересна практическая часть: в ASP.NET MVC продумали, как отделить View от всего остального или нет?

Dasar

>На самом деле это очень сильный довод, если понимать его правильно. Чем больше свободы действий при использовании фреймворков, тем лучше. Чем меньше для достижения этой свободы приходится писать всякие хаки и прочее дерьмо, тем лучше.
вот только ты забываешь про фундаментальную проблему: чем свободнее инструмент, тем сложнее проверить его валидность.

kokoc88

тестами можно(и нужно) покрыть лишь основное выполнение.
все упирается в комбинаторный взрыв

Ты опять делаешь неверные выводы, которые уже когда-то делал. Почему-то ты уверен, что может быть ситуация, когда классы на 100% покрытые юнит тестами, не будут работать в паре. А в большинстве случаев это неверное утверждение. Единственная проблема с юнит тестами возникает при параллельном программировании, когда тестами на 100% надо покрыть не только код, но и data flow.
многие ошибки тестами ловятся очень плохо.
например, следующую ошибку тестами фиг поймаешь:
Эту ошибку можно поймать немедленно.

Dasar

>А судя по этой ссылке, в ASP.NET MVC вообще ничего не отличается.
этот пример из беты первой версии asp.net mvc

kokoc88

вот только ты забываешь про фундаментальную проблему: чем свободнее инструмент, тем сложнее проверить его валидность.
Ты перестал заниматься практикой или в самом деле не понимаешь, что нужно выражаться конкретнее? Какую валидность надо проверить? Валидность чего?

kokoc88

этот пример из беты первой версии asp.net mvc
Так приведи свой, который разительно отличается. Пока что очевидно, что .NET едва-едва повторил то, что в Java есть уже много лет.

Dasar

>Мне просто интересна практическая часть: в ASP.NET MVC продумали, как отделить View от всего остального или нет?
они предложили способ компактной записи отображения M <-> V. причем запись этого отображения поддерживается и валидируется компилятором, автоматизированный рефакторингом и т.д.

Dasar

>Эту ошибку можно поймать немедленно.
это если она немедленно возникает, но вот если она замаскирована, например, так:

if (current_index + items.length > cache.size)
//увеличить кэш в два раза
items.copy_to(cache, current_index);
current_index += items.length;

и вот такие вероятностные ошибки тесты ловят очень плохо

kokoc88

это если она немедленно возникает, но вот если она замаскирована, например, так:
Не понял, например, как она замаскирована?
и вот такие вероятностные ошибки тесты ловят очень плохо
Вероятностные ошибки - это когда у тебя есть Random или параллельное выполнение. В твоём коде ошибки ловятся без всяких вероятностей.
Я вообще-то согласен с тем, что статическая типизация и компиляция рулят. А против юнит тестов лучше выдвигать более жизненный тезис: хрена с два на них хватит времени. У меня сейчас стартап 2.5 месяца, написал 1.5мб кода, и всего-то 150 юнит тестов.

Dasar

>Ты перестал заниматься практикой или в самом деле не понимаешь, что нужно выражаться конкретнее? Какую валидность надо проверить? Валидность чего?
валидность кода на соответствие наборам требуемых правил.
наборы правил могут быть самые различные:
проверка на оптимальность кода,
проверка на безопасность кода,
проверка на отсутствие устаревших конструкций,
проверка на отсутствие одновременного доступа к данным без блокировок,
проверка на отсутствие deadlock-ов,
проверка на поддержку всего набора входных данных,
проверка на то, что внутреннее состояние программы остается корректным при всех вариантах работы
и т.д.

Dasar

>Вероятностные ошибки - это когда у тебя есть Random или параллельное выполнение. В твоём коде ошибки ловятся без всяких вероятностей.
приведи пример теста и время его работы

kokoc88

валидность кода на соответствие наборам требуемых правил.
наборы правил могут быть самые различные:
проверка на оптимальность кода,
проверка на безопасность кода,
проверка на отсутствие устаревших конструкций,
проверка на отсутствие одновременного доступа к данным без блокировок,
проверка на отсутствие deadlock-ов,
проверка на поддержку всего набора входных данных,
проверка на то, что внутреннее состояние программы остается корректным при всех вариантах работы
и т.д.
Я не понимаю, как на всё это влияет хорошо спроектированный фреймворк, в котором предоставляется свобода действий.

kokoc88

приведи пример теста и время его работы
Допиши свой код до конца, сделай из него компилируемый класс, и я приведу пример теста.

Dasar

>Не понял, например, как она замаскирована?
тем, что она возникает только на редко-встречаемом наборе входных данных

Dasar

>Допиши свой код до конца, сделай из него компилируемый класс, и я приведу пример теста.
есть интерфейс
interface IQueue
{
void Push(int[] items);
int[] Pop(int length);
}
напиши, пожалуйста, для него тесты.

kokoc88

напиши, пожалуйста, для него тесты.
Тесты для интерфейса? Ты так шутишь?

Dasar

>Тесты для интерфейса? Ты так шутишь?
нет, тесты пишутся для черного ящика. для его внешней спефикации: так это и в TDD, и в RUP-е.
в этом и смысл тестов: что при изменения внутренностей программы, тесты не меняются.
если ты хочешь посмотреть на код, а потом написать тест - то это ты неявно перешел к задаче валидации кода, когда валидацию кода делает человек.

kokoc88

нет, тесты пишутся для черного ящика. для его внешней спефикации: так это и в TDD, и в RUP-е.
Добрый вечер, в интерфейсе никогда нет достаточной спецификации для написания теста. Для этого нужна спецификация кода. В приведённом тобой интерфейсе нету данных о том, может ли метод Pop принимать отрицательные значения. А если не может, то какое исключение он должен выкидывать? Должна ли очередь быть потокобезопасной или нет? Хочешь видеть тесты - либо пиши реализацию, либо детальную спецификацию на конкретную реализацию.
в этом и смысл тестов: что при изменения внутренностей программы, тесты не меняются.
Ну здрасьте, при изменении кода тесты тоже могут меняться.
Понимаешь, ты фактически сейчас пытаешься тонко затроллить, ведь даже на самую детальную спецификацию можно будет написать очередь, которая, например, не будет складывать более 5 элементов, или более 10000. И потом будешь кричать, что тесты не помогают. В то время как при обнаружении бага в том же TDD ты просто пишешь ещё один юнит тест, что даёт гарантию, что этот случай в будущем не повторится.

Dasar

>В то время как при обнаружении бага в том же TDD ты просто пишешь ещё один юнит тест, что даёт гарантию, что этот случай в будущем не повторится.
и соответственно это никак не помогает при исходной озвученной мной проблеме:
за минимум ресурсов обеспечить сопровождаемость кода.

kokoc88

и соответственно это никак не помогает при исходной озвученной мной проблеме:
за минимум ресурсов обеспечить сопровождаемость кода.
Только это как раз и помогает, лучше пока что ничего не изобрели.
И уж тем более, это помогает намного лучше компиляции.

Dasar

>Только это как раз и помогает, лучше пока что ничего не изобрели.
лучше - это автовалидация кода, и она активно применяется, и только автовалидация позволяет выявить проблему до того, как она проявится у пользователя.
TDD - лишь позволяет обеспечить, чтобы проблема выявленная у пользователя больше не повторялась.

Dasar

>TDD - лишь позволяет обеспечить, чтобы проблема выявленная у пользователя больше не повторялась.
проблема выявленная у пользователя - означает, что еще одна ракета взорвалась на старте; что личные данные миллиона человек утекло на сторону и т.д.

kokoc88

лучше - это автовалидация кода, и она активно применяется, и только автовалидация позволяет выявить проблему до того, как она проявится у пользователя.
TDD - лишь позволяет обеспечить, чтобы проблема выявленная у пользователя больше не повторялась.
Увы, но автовалидации кода, кроме юнит тестов, до сих пор не изобрели. Заметь, твои примеры никак не связаны с компиляцией: они одинаково работали бы как в C#, так и в каком-нибудь Lua.
TDD позволяет не только избежать повторения проблем, но и выявить нарушения спецификации при разработке. Поэтому эта практика и даёт очень хорошие результаты.

kokoc88

проблема выявленная у пользователя - означает, что еще одна ракета взорвалась на старте; что личные данные миллиона человек утекло на сторону и т.д.
Что никак не связано с компиляцией и статической типизацией.

Dasar

>Увы, но автовалидации кода до сих пор не изобрели.
это кто тебе сказал?
было написано в книжке "как за 24 дня начать писать программы на Java-е?"

Dasar

>они одинаково работали бы как в C#, так и в каком-нибудь Lua.
> Что никак не связано с компиляцией и статической типизацией.
вот только критически-важное ПО пишут на специфицируемых статик-языках, а не на lua
например, ПО для самолета C-130 делается на языке Spark (это расширение Ada-ы со статическим контролем pre/post-условий)
http://www.altran-praxis.com/spark.aspx
http://www.adacore.com/home/products/sparkpro/tokeneer/disco...

kokoc88

это кто тебе сказал?
было написано в книжке "как за 24 дня начать писать программы на Java-е?"
Нет, я это понял после того, как изучил "новый" фреймвок от Microsoft. Мне же не застилает глаза сияние нимба Била Гейтса.
Всё-таки вернись к теме компиляции, а то у нас в Development-е очень плохая тенденция: как только кто-то сливается, так сразу переводит тему, перестаёт писать конкретику, и так далее.
Пока что результаты обсуждения свелись примерно к следующему:
Те, кто в глаза не видел Java, обвинили её в том, что там чего-то нет. А по факту оказалось, что это всё там появилось за годы до того, как это появилось в .NET
Юнит тесты почему-то обвинили в том, что они просасывают по мощности компиляции. Причём как-то бездоказательно, к тому же обвинение строилось на рассмотрении компилируемого языка. На самом же деле эти две темы вообще мало связаны.
Удобным фреймворкам по какой-то причине приписали проблемы с валидируемостью. Вообще без конкретной аргументации.
Выяснили, что strongly typed view - это data binding плюс шаблонизатор в одном флаконе; из-за которого View не очень хорошо отделены от MC. При этом упоминание LINQ Expressions до сих пор осталось тайной за семью печатями.

kokoc88

вот только критически-важное ПО пишут на специфицируемых статик-языках, а не на lua
например, ПО для самолета C-130 делается на языке Spark (это расширение Ada-ы со статическим контролем pre/post-условий)
The SPARK Toolset, during source code analysis, will attempt to verify that all calls to this procedure satisfy this precondition.
Как-то отличается это от статического анализа. В общем случае нельзя написать какой-нибудь предупреждатель о высоте полёта, который не сломается, если сломается датчик высоты.

Dasar

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

Dasar

>В общем случае нельзя написать какой-нибудь предупреждатель о высоте полёта, который не сломается, если сломается датч
какое это отношение имеет к валидности кода?

kokoc88

если учесть, что ты в каждом утверждение передернул, то я даже не знаю как тебе отвечать.
Я всего-лишь перечислил факты из обсуждения этой темы.
тесты не сосут перед валидацией - они решают разные задачи.
тесты помогают проверить, что код решает конечную задачу, валидация позволяет проверить, что все мелочи учтены

Пока что мне очевидно, что юнит тесты могли бы решить все те же задачи, что и статическая валидация в SPARK. Отсюда напрашивается вывод, что если есть время набить всё юнит тестами, то разницы в стабильности между питоном и C# никакой не будет.

kokoc88

какое это отношение имеет к валидности кода?
Я пытался сказать о том, что в общем случае статическая типизация - это некоторое дополнение к юнит тестам, которые всё равно намного мощнее. Я бы сказал, что статическая валидация скорее является подмножеством юнит тестов.

Dasar

>Пока что мне очевидно, что юнит тесты могли бы решить все те же задачи, что и статическая валидация в SPARK.
ты забываешь, что все имеет цену.
простейшая задача - что переменная не используется до ее инициализации, элементарно решается валидацией.
но требует кол-во тестов равное кол-ву трасс в программе (а это 2^n, где n-кол-во if-ов, for-ов, while-ов, switch-ей и т.д.)

kokoc88

ты забываешь, что все имеет цену.
простейшая задача - что переменная не используется до ее инициализации, элементарно решается валидацией.
но требует кол-во тестов равное кол-ву трасс в программе (а это 2^n, где n-кол-во if-ов, for-ов, while-ов, switch-ей и т.д.)
Во-первых, два if-а вовсе не означают, что нужно 4 теста.
Во-вторых, тебе всё равно нужны юнит тесты, которые пройдут по всем путям. И статическая валидация тут мало чем поможет.
Таким образом, либо мы говорим о том, что функция проверена, и тогда нам нужны юнит тесты; либо мы этого вообще не говорим. При наличии статической валидации мы можем сказать только одно: у нас есть хоть какая-то проверка.
Отсюда повторю свой вывод: если есть время всё забить юнит тестами, то разницы между каким-нибудь питоном и C# не будет. Но обычно этого времени нет, о чём я уже написал выше, поэтому большие проекты предпочитают делать на статически типизированных языках без всякой мути. Сюда можно так же добавить, что это чаще языки со sparse синтаксисом.

Dasar

>Во-первых, два if-а вовсе не означают, что нужно 4 теста.
так только валидация может ответить на вопрос - сколько тестов нужно для двух if-ов

kokoc88

так только валидация может ответить на вопрос - сколько тестов нужно для двух if-ов
Если под валидацией теперь понимать чтение кода, а не статическую валидацию (как в SPARK то да. Но это ничем не отличается в питоне и C#.

Dasar

>Во-вторых, тебе всё равно нужны юнит тесты, которые пройдут по всем путям. И статическая валидация тут мало чем поможет.
это наивный взгляд.
например, правильность функции sort проще доказывать через валидацию, чем через обкладывание тестами всех путей внутри sort-а.
в любой программе, большая часть трасс - служебная, и их нет необходимости покрывать тестами. их достаточно покрыть валидацией.

Dasar

>Если под валидацией теперь понимать чтение кода, а не статическую валидацию
ты кстати так до сих пор не зафиксировал, кто при сопровождении читает код после каждого внесенного изменения, и меняет набор тестов.

kokoc88

например, правильность функции sort проще доказывать через валидацию, чем через обкладывание тестами всех путей внутри sort-а.
Тебе известно, как доказать правильность sort статической валидацией?
в любой программе, большая часть трасс - служебная, и их нет необходимости покрывать тестами. их достаточно покрыть валидацией.
Это вообще какое-то непонятное (слабое) утверждение. Можно здесь поподробнее? Я понимаю, когда у нас везде константы; но даже проверка параметра на null полностью может не покрываться статической валидацией.

kokoc88

ты кстати так до сих пор не зафиксировал, кто при сопровождении читает код после каждого внесенного изменения, и меняет набор тестов.
Тот же, кто при сопровождении меняет статическую валидацию. В чём между ними разница?

Dasar

>Тебе известно, как доказать правильность sort статической валидацией?
хотя бы открыть кнута, у него каждый алгоритм доказывается.
> Тот же, кто при сопровождении меняет статическую валидацию. В чём между ними разница?
статическую типизацию не надо менять, для того, чтобы выявить еще одну ошибку вида >= вместо >.
а вот тесты менять надо.

kokoc88

хотя бы открыть кнута, у него каждый алгоритм доказывается.
Меня интересует практическое применение теоретического доказательства. Например, как это сделать в том же SPARK.
статическую типизацию не надо менять, для того, чтобы выявить еще одну ошибку вида >= вместо >.
а вот тесты менять надо.
Правильно, статическая типизация вообще не позволяет проверить эту ошибку.
Так к чему был твой вопрос-то?

Dasar

>Меня интересует практическое применение теоретического доказательства. Например, как это сделать в том же SPARK.
открыть кнута, выписать пре и пост условия каждой итерации при данном виде сортировки, записать их на spark-е. запустить spark.
> Правильно, статическая типизация вообще не позволяет проверить эту ошибку.
если это была ошибка - как в примере, который я приводил про кэш, то позволяет.

kokoc88

открыть кнута, выписать пре и пост условия каждой итерации при данном виде сортировки, записать их на spark-е. запустить spark.
Ты это делал сам? Напиши, очень интересно посмотреть, как статически валидируется массив динамической длины, который я получаю через сокет. Кстати, туда же ещё передаются произвольные способы сравнения элементов.
То есть я понимаю, какое постусловие у одного рекурсивного вызова того же quicksort, но я не понимаю, как связать его со статической валидацией?
если это была ошибка - как в примере, который я приводил про кэш, то позволяет.
Ты бы сразу приводил примеры, как она это позволяет.
И это, кстати, не ответ на вопрос, зачем ты задавал вопрос про то "кто правит тесты".

Dasar

почитай что-нибудь по специфицированию программ
http://books.google.ru/books?id=esr_1lW1WRgC

Dasar

ты кстати кнута хотя бы осилил?
а там у него алгоритмы доказываются для массивов переменной длины.

kokoc88

почитай что-нибудь по специфицированию программ
http://books.google.ru/books?id=esr_1lW1WRgC
Я эту тему проходил на АСВК. И помню, что она очень и очень сложная, и в 2001 году была ещё в глубокой теории.
Но это же ты сказал, что sort легче доказать статической валидацией. Для quicksort я могу набросать автотест, который во время сортировки обойдёт все пути и проверит результат - это 3-4 строчки кода. Теперь мне очень интересно, сколько всего надо написать на SPARK, и как это вообще работает, с какой скоростью компилируется, и так далее...

6yrop

я ... изучил "новый" фреймвок от Microsoft ...
...
При этом упоминание LINQ Expressions до сих пор осталось тайной за семью печатями.
Это два несовместимых предложения. Соответственно, всё что между ними (т.е. весь твой пост) полная чушь. Не понимаешь почему здесь linq.expression, следовательно, не знаком даже поверхностно с ASP.NET MVC, тут всё однозначно.
Тебе указали на маленький, но ключевой момент — linq.expression — ты вместо того, чтобы разобраться в этом, нафлудил кучу постов с описание своих детских страхов по поводу Билла Гейтса и т.п.

bav46

тред просмотрел мельком. это холивор про джаву и дот.нет или что ?

kokoc88

Это два несовместимых предложения. Соответственно, всё что между ними (т.е. весь твой пост) полная чушь. Не понимаешь почему здесь linq.expression, следовательно, не знаком даже поверхностно с ASP.NET MVC, тут всё однозначно.
Мой пост вообще не имеет смысла, если читать только первое и последнее предложение, попробуй прочитать его весь. Ты уже давно пишешь какую-то чушь, при чём нисколько не пытаешься её аргументировать.
Тебе указали на маленький, но ключевой момент — linq.expression — ты вместо того, чтобы разобраться в этом, нафлудил кучу постов с описание своих детских страхов по поводу Билла Гейтса и т.п.
Тебе указали на маленький ключевой момент: то, что очевидно тебе, может быть непонятно другим людям. А поэтому в споре нормальные люди пытаются хоть чем-то аргументировать. Тебе уже давно засчитали слив, потому что ты полез спорить про ASP.NET vs Java *, не имея ни малейшего понятия о Java *. Аргументы будут или так и продолжишь по-детски лепетать про linq expressions, библиотеку для деревьев выражений, которая сама по себе не имеет никакого отношения к ASP.NET MVC?

6yrop

хоть чем-то аргументировать
когда мы пишем expression "x => x.SomeProperty", то мы сразу задаем две вещи:
1. ссылку на gettor свойства SomeProperty;
2. задаем ID/Name(*1) для соответствующего INPUT-а. Эти ID/Name используются для заполнения obj.SomeProperty при обработке post-а с этой формы.
(*1) в сложных сценариях добавляются префиксы

kokoc88

когда мы пишем expression "x => x.SomeProperty", то мы сразу задаем две вещи:
Об этом уже написал , и я ответил, что в Java мы тоже задаём это всё сразу в одной строке. При этом работает автокомплишн и валидация во время компиляции. Это всё есть в Java вот уже больше пяти лет, в различных фреймворках.
Но вот чего я так и не понел, при чём тут LINQ Expressions. Как бы "x => x.SomeProperty" выглядит, скорее, как лямбда.

6yrop

Об этом уже написал , и я ответил, что в Java мы тоже задаём это всё сразу в одной строке. При этом работает автокомплишн и валидация во время компиляции.
ваше обсуждение с -ем заканчивается фразой "или ты это не понял?" с обеих сторон .... . я понимаю, тебя нет. Твой код:
 
<INPUT TYPE=TEXT NAME=" Name" SIZE=20 VALUE="<%= user.getName %>">
  

"Name" повторен два раза. У -я один раз:
 
<%= this.TextBox(x => x. Name) %>
  

6yrop

Но вот чего я так и не понел, при чём тут LINQ Expressions. Как бы "x => x.SomeProperty" выглядит, скорее, как лямбда.
это напрямую следует из сигнатуры метода TextBoxFor

kokoc88

"Name" повторен два раза. У -я один раз:
Это потому, что я привёл в пример JSP - самую древнюю технологию. Зато в ней технически уже есть всё, что нужно; а придумали её лет десять назад. ASP.NET MVC сделали совсем недавно, и единственное улучшение по сравнению с древшейшим JSP - это то, что можно написать один раз?
Ну так в Java можно взять какой-нибудь другой шаблонизатор из десятков существующих, и будешь писать биндинги один раз. В этом и был риторический вопрос к : фанаты Microsoft почти всегда забывают, что в других технологиях сочетание "WEB Framework" как правило не произносится в единственном числе.

kokoc88

это напрямую следует из сигнатуры метода TextBoxFor
Ну слава богу, а то я уж думал, что ты никогда не объяснишь этого. Вместо десятка постов, в которых ты кричал, что я нихуя не знаю, надо было написать: лямбда "x => x.SomeProperty" конвертируется в LINQ Expressions, который используется для вызова getter/setter для работы с моделью.
И тогда я бы сразу понял и не задавал десятки вопросов (в туториалах, представь себе, эта тема детально не раскрывается).

6yrop

Это потому, что я привёл в пример JSP - самую древнюю технологию. Зато в ней технически уже есть всё, что нужно; а придумали её лет десять назад. ASP.NET MVC сделали совсем недавно, и единственное улучшение по сравнению с древшейшим JSP - это то, что можно написать один раз?
Ну так в Java можно взять какой-нибудь другой шаблонизатор из десятков существующих, и будешь писать биндинги один раз. В этом и был риторический вопрос к : фанаты Microsoft почти всегда забывают, что в других технологиях сочетание "WEB Framework" как правило не произносится в единственном числе.
твои проповеди великого учения джавы уже подзаебали. Такие проповеди встречаются почти у каждого джависта среднего уровня, и я их слушаю уже несколько лет, скучно.
Ну так в Java можно взять какой-нибудь другой шаблонизатор из десятков существующих, и будешь писать биндинги один раз.
Ага, так и знал. Аргумент из серии — вам не понравился этот сорт говна, у нас есть еще пара десятков сортов говна, попробуйте их. Это джава головного мозга.
Ну так в Java можно взять ...
Ну так возьми! И продемонстрируй нам код, где “Name” упоминается один раз.

kokoc88

твои проповеди великого учения джавы уже подзаебали. Такие проповеди встречаются почти у каждого джависта среднего уровня, и я их слушаю уже несколько лет, скучно.
Никаких проповедей, я, в отличие от поциентов Била Гейтса или Линуса Торвальдса, просто объективен и выбираю всегда самое лучшее. Например, я не спорю, что Java как язык хуже C#; но как платформа пока что намного лучше. Сравнения существующих в обоих технологиях коллекций уже вполне достаточно для грамотного разработчика, чтобы это понять.
Ага, так и знал. Аргумент из серии — вам не понравился этот сорт говна, у нас есть еще пара десятков сортов говна, попробуйте их.

Нет, это аргумент из серии: вы наконец-то выпустили велосипед? Так мы давно гоняем на феррари, ролс ройсах, бэнтли, мерседесах!
Это джава головного мозга.

Лучше уж Java головного мозга, чем Shurick головного мозга.
Ну так возьми! И продемонстрируй нам код, где “Name” упоминается один раз.
<form:input path="firstName" />

И пока ты не начал задавать тупые вопросы: это строго типизированная форма, здесь поддерживается валидация, рефакторинг, completion, можно грабить корованы встраивать код, и так далее по списку. И если это не нравится, то у меня будет ещё много вариантов. Только я уже заебался их постить, всё равно ты кроме Microsoft-а ничего не признаёшь...

Dasar

И пока ты не начал задавать тупые вопросы: это строго типизированная форма, здесь поддерживается валидация, рефакторинг,
какой именно инструмент необходимо установить на компьютер, чтобы по требованию "выдай все использования данного поля"- выводилось, в том числе, использование из <form:input path="firstName"/> ?

kokoc88

какой именно инструмент необходимо установить на компьютер, чтобы по требованию "выдай все использования данного поля"- выводилось, в том числе, использование из <form:input path="firstName"/> ?
Любая de facto стандартная IDE для разработки под Java: Eclipse или IntelliJ IDEA.

6yrop

Никаких проповедей, я, в отличие от поциентов Била Гейтса или Линуса Торвальдса, просто объективен и выбираю всегда самое лучшее.
А то. Они тоже не признаются в своих проповедях
Сравнения существующих в обоих технологиях коллекций уже вполне достаточно для грамотного разработчика, чтобы это понять.
и этот аргумент я от джавистов слышал. И работал я с Java коллекциями. Мое мнение — дотнет коллекции очень даже неплохи. А по поводу твоего предложения у меня складывается мнение, что для тех, кто такое говорит, восхищение Java коллекциями является частью определения “грамотного” разработчика; а к реальной разработки эта “грамотность” отношения не имеет.
Ага, так и знал. Аргумент из серии — вам не понравился этот сорт говна, у нас есть еще пара десятков сортов говна, попробуйте их.
Нет, это аргумент из серии: вы наконец-то выпустили велосипед? Так мы давно гоняем на феррари, ролс ройсах, бэнтли, мерседесах!
Это джава головного мозга.
Лучше уж Java головного мозга, чем Shurick головного мозга.
Что-то ты уже в нескольких постах повторяешь мои фразы. Своих мыслей не имеешь?
--------------------------------------------------------------------------------<form:input path="firstName" />--------------------------------------------------------------------------------
И пока ты не начал задавать тупые вопросы: это строго типизированная форма, здесь поддерживается валидация, рефакторинг, completion, можно грабить корованы встраивать код, и так далее по списку.

И где здесь язык Java? Опять XML-тегами отмазаться хотите? Прошлое десятилетие уже показало убогость XML-программирования.
Развитие .net-а в плане смешения текста и языковых конструкций для генерации текста — Razor — мне кажется более симпатичным. Хотя можно было сделать и еще лучше — вообще не завязываться на специфику web-а, а просто сделать синтаксический сахар a-la Razor для универсального генератора текстов T4. В Razor надо было сделать аналог t4 class feature, и не городить синтаксис для частных случаев.
всё равно ты кроме Microsoft-а ничего не признаёшь...

я работал на Java

Dasar

Любая de facto стандартная IDE для разработки под Java: Eclipse или IntelliJ IDEA.
т.е. я ее сейчас скачиваю, и она сразу из коробки это поддерживает?

kokoc88

т.е. я ее сейчас скачиваю, и она сразу из коробки это поддерживает?
IntelliJ IDEA - да, а для Eclipse нужно скачать коробочный билд для Java (а не для Си++).

6yrop

т.е. я ее сейчас скачиваю, и она сразу из коробки это поддерживает?
IntelliJ IDEA вероятнее всего, да. Так же как ReSharper понимает стринговые константы для View и Controller в MVC. Это вполне ожидаемо.

6yrop

а на мой пост ты молча поставил минус?

Dasar

IntelliJ IDEA - да, а для Eclipse нужно скачать коробочный билд для Java (а не для Си++).
а что надо сделать, чтобы для myform тоже поддерживалось?

kokoc88

и этот аргумент я от джавистов слышал. И работал я с Java коллекциями. Мое мнение — дотнет коллекции очень даже неплохи. А по поводу твоего предложения у меня складывается мнение, что для тех, кто такое говорит, восхищение Java коллекциями является частью определения “грамотного” разработчика; а к реальной разработки эта “грамотность” отношения не имеет.
Заверни мне, пожалуйста, ConcurrentSkipListMap? А PriorityQueue? Или ты "грамотный" разработчик, которому никогда не требуются эти коллекции? Почему SortedDictionary не назвали TreeMap? Или "грамотному" разработчику слова Tree или Hash в названиях коллекций ни о чём не говорят? Почему ConcurrentStack.PushRange принимает массив, тогда как List.AddRange принимает IEnumerable? Или "грамотные" разработчики меняют интерфейсы с каждой новой коллекцией?
И где здесь язык Java? Опять XML-тегами отмазаться хотите? Прошлое десятилетие уже показало убогость XML-программирования.
Там же, где в ASP.NET MVC формах язык C# (<P><B>Height:</B> <%= Model.Height %></P>).
Что на счёт встраивания, я же написал тебе: "пока ты не начал писать тупые вопросы ... можно встраивать код". Ты опять не прочитал мой пост до конца?
я работал на Java
Судя по твоим постам, ты работал с Java лет десять назад. Иначе я не могу понять, почему ты пишешь всякие глупости.
Итог:
1. Пока что в Java WEB есть всё, что и в ASP.NET MVC; и даже больше.
2. Начались тупые отмазки про формат представлений; но они не являются аргументом, тем более в свете того, как выглядит представление в ASP.NET MVC.
3. В Java всё было изобретено много лет назад, в Micsosoft выпустили велосипед.

kokoc88

а что надо сделать, чтобы для myform тоже поддерживалось?
Для чего? Если ты про использования, то ничего делать не надо: все mature web frameworks для Java почти полностью поддерживаются в Eclipse; и ещё более полностью в IntelliJ IDEA. Вообще в споре рефакторинга продукты JetBrains решают; Visual Studio без ReSharper почти ничего не умеет.

kokoc88

а на мой пост ты молча поставил минус?
Это не я, меня устраивает, что ты пока что не привёл никаких существенных аргументов в пользу ASP.NET MVC.

6yrop

Там же, где в ASP.NET MVC формах язык C# (<P><B>Height:</B> <%= Model.Height %></P>).
Здесь:
<P><B>Height:</B> </P>

чистый HTML
Model.Height

C#
<%= %>

ASP.

kokoc88

<form:input path="firstName"/>
Здесь:
<HTML>.....</HTML>

Чистый HTML.
firstName

Java.
form:input

Spring.

6yrop

может уже хватит обезьяничать?
><HTML>.....</HTML>
Такого вообще нет!
>firstName
обращение к приватному полю?
>form:input
сколько еще таких Spring-специфичных конструкций?
>path
Это вообще не описал.

Dasar

Для чего? Если ты про использования, то ничего делать не надо
я делаю свой класс myform, и хочу чтобы для него для поля mypath тоже поддерживалось, что переданная строка является expression, которые должен парситься и выдаваться в find references в idea.
что для этого надо сделать с полем mypath?

Dasar

<form:input path="firstName" />
это кстати где обрабатывается - в рантайме или при компиляции?
по идее, при компиляции. т.е. в рантайме поменять поле path нельзя? я правильно понял?

6yrop

1. Пока что в Java WEB есть всё, что и в ASP.NET MVC; и даже больше.
У тебя проблемы с аналитическим мышлением: "есть всё" совсем не означает, что оно всё хорошо работает вместе.

kokoc88

может уже хватит обезьяничать?
Я не обезьянничаю, это ты пытаешься выкарабкаться из ситуации, в которой ты был не прав.
><HTML>.....</HTML>
Такого вообще нет!
Есть, просто оно за тем, что я написал, неужели не очевидно? Тег <form:input> вставляется в HTML файл.
firstName
обращение к приватному полю?
Нет, да и какая разница, даже если бы это было и так?
form:input
сколько еще таких Spring-специфичных конструкций?
Сколько угодно, можно даже свои делать. Не нравится Spring, можно взять другоооой Framework, в Java их больше, чем два.
path
Это вообще не описал.
Очевидно, это и кавычки относилось к Spring.
Давай уже к делу, реальные замечания есть или ты признаешь, что в Java всё прекрасно поддерживается и работает?

kokoc88

я делаю свой класс myform, и хочу чтобы для него для поля mypath тоже поддерживалось, что переданная строка является expression, которые должен парситься и выдаваться в find references в idea.
что для этого надо сделать с полем mypath?
Кликнуть на него и нажать ALT+F7.

kokoc88

это кстати где обрабатывается - в рантайме или при компиляции?
по идее, при компиляции. т.е. в рантайме поменять поле path нельзя? я правильно понял?
Этот вопрос я не изучал.

Dasar

Кликнуть на него и нажать ALT+F7.
и что это сделает?

kokoc88

и что это сделает?
Найдёт всё использования этого поля, опционально использования его getter и setter; а так же все привязки к этому полю, включая, но не ограничиваясь, *ORM, *WEB, XML и Javadoc.
А если нажать SHIFT+F6, то можно это поле переименовать во всех озвученных местах.

Dasar

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

kokoc88

как минимум есть первая проблема, что объект в среде разработки (при компиляции) и в рантайме выглядит по разному, что мешает введению вариабельности и обобщению по данному объекту и данному полю.
Можно на пальцах, что там не так и как это решено в ASP.NET MVC? А то опять льётся какая-то весьма пресная вода.

Dasar

Найдёт всё использования этого поля, опционально использования его getter и setter; а так же все привязки к этому полю, включая, но не ограничиваясь *ORM, *WEB, XML и Javadoc.
а теперь прочитай про что я спрашивал.
я спрашивал, если делаю свой класс myform, то как IDEA объяснить, что mypath - есть спец. поле, которое надо анализировать для выдачи find reference:

<form:myform mypath="firstName"/>

kokoc88

я спрашивал, если делаю свой класс myform, то как IDEA объяснить, что mypath - есть спец. поле, которое надо анализировать для выдачи find reference:
Ей не надо этого объяснять, она всегда сама это знает.

Dasar

Ей не надо этого объяснять, она всегда сама это знает.
даже для моего класса?
это каким образом - телепатически что ли?

kokoc88

даже для моего класса?
это каким образом - телепатически что ли?
А в чём проблема-то? ReSharper в Visual Studio может делать то же самое для форм ASP.NET и MVC.

Dasar

Можно на пальцах, что там не так и как это решено в ASP.NET MVC? А то опять льётся какая-то весьма пресная вода.
вариабельность - это что вместо одного выражения необходимо поддержать несколько
вместо

<form:input path="firstName"/>

необходимо поддержать, чтобы при одних условиях было firstName, а при других secondName
в asp.net mvc - введение такой вариабельности делается стандартыми методами целевого языка (C#)

<%= this.TextBox(x => condition ? x. FirstName: x.SecondName) %>

Dasar

А в чём проблема-то? ReSharper в Visual Studio может делать то же самое для форм ASP.NET и MVC.
проблема в том, что знание какие поля для каких классов необходимо специально разбирать:
1. захардкодено в инструмент
2. требует специальной разметки атрибутами
и соответственно знание о моем классе не может быть захардкодено в IDEA, и должно требовать, как минимум, разметки атрибутами.

FRider

<%= this.TextBox(x => condition ? x. FirstName: x.SecondName) %>
можно вставить 5 копеек? Читабельность стремительно падает. Я уже молчу, как вот сие тсрашилище ты отдаш дизайнерам

serega1604

>это каким образом - телепатически что ли?
по tld, поскольку твой класс без нее ничего тебе не даст.

kokoc88

в asp.net mvc - введение такой вариабельности делается стандартыми методами целевого языка (C#)
В Java введение такой вариабельности делается стандартыми методами целевого языка (Java):

<form:input path="name"/>

public string getName {
return condition ? firstName : secondName;
}
Кому в голову придёт писать логику во View, где её хрен протестируешь юнит тестом, я не знаю.

kokoc88

проблема в том, что знание какие поля для каких классов необходимо специально разбирать:
3. Может быть получено парсером исходников, в том числе *.html, *.jsp, *.xml, *.settings, *.*, *

Dasar

можно вставить 5 копеек? Читабельность стремительно падает. Я уже молчу, как вот сие тсрашилище ты отдаш дизайнерам
какие есть более читабельные варианты?

kokoc88

какие есть более читабельные варианты?
Отделить модель от View.

FRider

на мой скромный взгляд вменяемые темплейты, да хоть джанговские куда читабельней. Ах да, там конечно нет проверки в компайл-тайм и рефакторинга средствами иде.

Dasar

3. Может быть получено парсером исходников, в том числе *.html, *.jsp, *.xml, *.settings, *.*, *
очень сильно тупишь.
как idea поймет, что в моем классе myform поля name, value, key и и т.д. специально парсить не надо, а поле mypath парсить надо?

kokoc88

очень сильно тупишь.
как idea поймет, что в моем классе myform поля name, value, key и и т.д. специально парсить не надо, а поле mypath парсить надо?
Очень сильно тупишь.
Она отпарсит *.* и поймёт это.

serega1604

>как idea поймет, что в моем классе myform поля name, value, key и и т.д. специально парсить не надо, а поле mypath парсить надо?
эй, ты читать умеешь?

Dasar

Кому в голову придёт писать логику во View, где её хрен протестируешь юнит тестом, я не знаю.
хорошо если это логика.
а что делать если это не логика?
что делать если дизайнер хочет вставить вариант?
или все дизайнеры (наверное, так в java-е) monkey и что такое варианты они не понимают?

6yrop

как idea поймет, что в моем классе myform поля name, value, key и и т.д. специально парсить не надо, а поле mypath парсить надо?
2: в свете того что Spring-специфичных теги можно дописывать, я присоединяюсь к вот этому -евскому вопросу.

Dasar

Она отпарсит *.* и поймёт это.
так сразу бы и написал, что "телепатически" ( что у тебя нет ни малейшего представления как именно это на пальцах происходит)

6yrop

Она отпарсит *.* и поймёт это.
поясни, плиз

kokoc88

что делать если дизайнер хочет вставить вариант?
или все дизайнеры (наверное, так в java-е) monkey и что такое варианты они не понимают?
Если дизайнер у .NET разработчиков знает ASP.NET MVC, то дизайнер у Java разработчиков знает шаблонизатор, с которым он работает.
Но вообще нужно запрещать дизайнерам любые попытки кодирования, связанные с логикой сервера. В этом плане их обычно садят за шаблонизатор на XSLT.

Dasar

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

serega1604

>с тобой я вообще не разговариваю. ты еще ни одного аргумента ни в одном обсуждении ни удосужился привести.
тем не менее я написал ответ на твой вопрос, который тут задают уже третий раз.

kokoc88

так сразу бы и написал, что "телепатически" ( что у тебя нет ни малейшего представления как именно это на пальцах происходит)
Бля, у меня есть представление, как именно на пальцах это происходит, и я тебе об этом представлении говорю третий или четвёртый раз:
она отпарсит *.*, блядь, куда более на пальцах-то?

Dasar

на мой скромный взгляд вменяемые темплейты, да хоть джанговские куда читабельней. Ах да, там конечно нет проверки в компайл-тайм и рефакторинга средствами иде.

и как там записывается вариабельность на уровне дизайна?

Dasar

она отпарсит *.*,
что такое "она отпарсит *.*"
я это читаю как - idea магическим образом распарсит файлы, которые попадают под маску *.*.

Dasar

В этом плане их обычно садят за шаблонизатор на XSLT.
с каких это пор - xslt стал читабельнее чем java или c#?

kokoc88

я это читаю как - idea магическим образом распарсит файлы, которые попадают под маску *.*.
Если парсер для тебя - это магия, то да, я не знаю, как ещё тебе что-то объяснить... Берём парсер jsp, парсим jsp, видим там биндинги и типы данных, связываем эту информацию с отпарсенными *.java файлами.

Dasar

тем не менее я написал ответ на твой вопрос, который тут задают уже третий раз.
это было между словами "'эй" и "ты" во фразе?
эй, ты читать умеешь?

6yrop

она отпарсит *.*, блядь, куда более на пальцах-то?
возьмем код

<myform:input path="name" cssclass="name"/>

почему здесь первое "name" надо парсить как свойство модели, а второе как css класс?

6yrop

ты пытаешься выкарабкаться из ситуации, в которой ты был не прав.
пока я в упор не вижу свою неправоту. Мое первоначальное утверждение — в Java в язык не встроена возможность делать ссылки на свойства. Там где это требуется в Java используются внешние неуклюжие решения.

Dasar

Берём парсер jsp, парсим jsp, видим там биндинги и типы данных, связываем эту информацию с отпарсенными *.java файлами.
давай сначала
вот есть запись

<form:myform mypath="firstName" value="firstName"/>

myform - это мой тег, соответственно mypath - это есть выражение которое надо парсить, а value - это значение, которое не надо парсить.
где и как это различие записывается?

serega1604

нет, это было в предыдущем моем сообщении в этом треде, которое ты до сих пор не удосужился прочитать.

kokoc88

пока я в упор не вижу свою неправоту. Мое первоначальное утверждение — в Java в язык не встроена возможность делать ссылки на свойства. Там где это требуется в Java используются внешние неуклюжие решения.
Твоё первоначальное утверждение написано в первом посте. В частности, ты написал:
да ни кого не волнует когда первый раз эти дурацкие три буквы были произнесены.
А вот strongly typed view такого в Java нет и не будет по причине замшелости мышления джавистов.
В процессе обсуждения мы уже давно пришли к выводу, что в Java есть полноценный аналог того, что называется strongly typed view. В этом ты был не прав.

6yrop

тред разрастается, если ты дашь ссылку тот пост, это будет не лишним

6yrop

что в Java есть полноценный аналог того, что называется strongly typed view
полноценного аналога нет

kokoc88

myform - это мой тег, соответственно mypath - это есть выражение которое надо парсить, а value - это значение, которое не надо парсить.
где и как это различие записывается?
Тебе ответили, что для тегов есть, например, TLD. Ещё есть DTD и XSD. Вероятно, эти схемы используются в соответствующих парсерах для анализа.

kokoc88

полноценного аналога нет
Пока что ты не привёл реальных аргументов в пользу этого утверждения.

6yrop

TLD
про это и писал как про "разметку атрибутами", это я и называю неуклюжим решением.

kokoc88

про это и писал как про "разметку атрибутами", это я и называю неуклюжим решением.
Не вижу смысла в этом посте. Побольше деталей, как ты связал TLD с разметкой атрибутами?

6yrop

Займуська я тем же чем и ты.
Пока что ты не привёл реальных аргументов в пользу этого утверждения.
Пока что ты не привел доказательства полноценности аналога в Java.

Dasar

нет, это было в предыдущем моем сообщении в этом треде, которое ты до сих пор не удосужился прочитать.
сорри, пропустил.
tld - это и есть аттрибуты, только опять же записанные на еще одном языке.
т.е. уже получается предлагается знать синтаксис и семантику следующих языков:
теги спринга
шаблонизатор jsp
tld
xslt
java
xml/html
зы
asp.net mvc накладывает необходимость знать лишь:
c#
xhtml
шаблонизатор asp.net

6yrop

Побольше деталей, как ты связал TLD с разметкой атрибутами?
для меня TLD это просто три буквы (я даже не гуглил еще но факт в том, что требуется некоторое дополнительное описание связей. А при наличии в языке "ссылок на свойства" такое описание не требуется.

kokoc88

т.е. уже получается предлагается знать синтаксис и семантику следующих языков:
теги спринга
шаблонизатор jsp
tld
xslt
java
xml/html
Можно смело исключить XSLT, TLD, XML. Достаточно HTML, TAGS и Java.

kokoc88

Займуська я тем же чем и ты.
Пока,что ты не привел доказательста полноценности аналога в Java.
Утверждение изначально принадлежало тебе. Ты не смог привести аргументов в его пользу. Слив засчитан.

Dasar

Достаточно HTML, TAGS и Java.
мы только что выяснили, что как только требуется расширить tags, то требуется tld
и я еще раз напомню, что только для monkey не требуется расширений

6yrop

Слив засчитан.
уже который раз ты засчитываешь мне слив :grin: , не верю :grin:

kokoc88

для меня TLD это просто три буквы (я даже не гуглил еще но факт в том, что требуется некоторое дополнительное описание связей. А при наличии в языке "ссылок на свойства" такое описание не требуется.
TLD никак не связаны со ссылками на свойства. Вообще никак. Теги - это аналог TextBoxFor.

kokoc88

мы только что выяснили, что как только требуется расширить tags, то требуется tld
и я еще раз напомню, что только для monkey не требуется расширений
Для чего тебе требуется расширить tags? Ты в ASP.NET MVC постоянно пишешь расширения а-ля TextBoxFor? Это лишь свидетельствует о бедности набора элементов в ASP.

6yrop

Утверждение изначально принадлежало тебе. Ты не смог привести аргументов в его пользу. Слив засчитан.
утверждение про равноценность аналога в Java-е твое. Ты не смог привести его доказателства. Слив засчитан.

6yrop

лишь
ты видишь лишь то, что тебе хочется видеть. Тебе явно указали на недостаток Java решения.

Dasar

Для чего тебе требуется расширить tags? Ты в ASP.NET MVC постоянно пишешь расширения а-ля TextBoxFor? Это лишь свидетельствует о бедности набора элементов в ASP.
это лишь означает, что хороший разработчик легко может ввести новые элементы, которые лучше подходят для текущей задачи.
а monkey не могут.
например, намного удобнее дизайн размечать тегами прикладной задачи, а не тегами jsp/asp.
если мы делаем форум, то для описания дизайна удобны теги: thread, post, user и т.д.

kokoc88

утверждение про равноценность аналога в Java-е твое. Ты не смог привести его доказателства. Слив засчитан.
Я считаю, что привёл все аргументы в данном топике, и это может оценить любой читатель. В свою очередь ты, не разобравшись в теме и не читая посты собеседников, написал кучу необоснованных утверждений. Часть из них, прямо скажем, глупая и выставляет тебя и твои знания на посмешище.
Так что писька-то у тебя не доросла засчитывать кому-то сливы...

Dasar

TLD никак не связаны со ссылками на свойства. Вообще никак. Теги - это аналог TextBoxFor.
а мне казалось, что хороший разработчик должен уметь обобщать...

6yrop

не смогла посмотреть сигнатуру метода :grin:

kokoc88

это лишь означает, что хороший разработчик легко может ввести новые элементы, которые лучше подходят для текущей задачи.
а monkey не могут.
Ключевое слово: элементы. Ты путаешь теги и helper-ы в ASP.NET MVC, ну или мы оба путаем, потому что я раньше не знал, что такое helper-ы.
если мы делаем форум, то для описания дизайна удобны теги: thread, post, user и т.д.
Не надо путать теги и шаблоны.

kokoc88

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

kokoc88

Теги - это аналог TextBoxFor.
Я не прав, это не аналог.

Dasar

Ключевое слово: элементы. Ты путаешь теги и helper-ы в ASP.NET MVC, ну или мы оба путаем, потому что я раньше не знал, что это такое.
Не надо путать теги и шаблоны.
не надо вводить сущности сверх необходимости и различать то, что есть одно и то же.
в программировании для описания информации есть всего 6 понятий:
элемент
свойства
вариабельность
обобщение
конкретизация
все остальное - это комбинация этих понятий под разными именами в разных контекстах.

6yrop

с умными людьми.
вот вот, я тоже. Но ты к этому множеству не относишься, поскольку
1. писал, что изучил технологию,
2. с учетом пункта 1 не догадался посмотреть сигнатуру метода.

kokoc88

в программировании для описания информации есть всего 6 понятий:
Но ты описываешь именно шаблоны, а не информацию.
Давай на пальцах, для простых смертных. В JSP я могу вставить полный аналог ASP.NET MVC Helper-ов, из вот этого туториала:
C#:
<%= LabelHelper.Label("lastName", "Last Name:") %>

Java:
<%= Label(user.getLastName "Last Name:") %>

Теги - это способ расширения шаблонизатора. Helper - это не способ расширения шаблонизатора, это просто код на C#, я точно такой же могу писать в JSP на Java.

kokoc88

писал, что изучил технологию,
Надо было внимательнее читать: я писал, что погуглил; что отгуглилось; и признавался в том, что многого не знаю, задавая тебе вопросы, в ответ на которые ты почему-то кричал, что я нихуя не понил и не имел дела с ASP.NET MVC.

6yrop

Надо было внимательнее читать
Нет, я это понял после того, как изучил "новый" фреймвок от Microsoft. Мне же не застилает глаза сияние нимба Била Гейтса.

Dasar

Но ты описываешь именно шаблоны, а не информацию.
с каких это пор шаблон перестал быть информацией?
зы
шаблон - это описание преобразование из одного набора элементов в другой набор элементов, где сам шаблон состоит из элементов.
примечание: набор элементов также принято называть языком
нагляднее всего это как раз показано в xslt, там все три набора элементов являются одним языком xml
ззы
если брать asp.net - то там элементы шаблонизатора являются обычными .net-классами
в jsp получается, что это какая-то еще доп. сущность - называемая тегами. нахера надо было вводить еще одну доп. сущность - никто не знает.
> Давай на пальцах, для простых смертных. В JSP я могу вставить полный аналог ASP.NET MVC Helper-ов, из вот этого туториала:
но ты взял туториал не по strong typed view, а какой-то другой.

kokoc88

Надо было внимательнее читать
Могу лишь посоветовать внимательнее читать, если не разбёрешься, то завтра всё тебе объясню.

kokoc88

в jsp получается, что это какая-то еще доп. сущность - называемая тегами. нахера надо было вводить еще одну доп. сущность - никто не знает.

Боже, и ведь мы всё ещё обсуждаем только одну технологию... Давай считать, что теги - это и есть элементы. И хэлперы, которые я могу писать на Java так же, как на C# - тоже элементы.
но ты взял туториал не по strong typed view, а какой-то другой.
Думаю, что это не так уж и важно, особенно в твоём примере. Ведь все имеющиеся в HTML input-ы уже имеют свои элементы (теги). Мне просто интересно, что именно ты бы написал в коде strongly typed helper-а для thread, post, user и т.д.? Здесь тебе необходимо только считывать информацию из модели, а обратный процесс не нужен. А там, где он нужен, ты тоже не будешь городить код на C#, а будешь использовать готовые элементы (теги) для HTML input-ов.
На самом деле, когда разрабатываешь под JSP, есть столько шаблонизаторов и библиотек тегов, что писать свои или код - это какое-то кощунство.

6yrop

Могу лишь посоветовать внимательнее читать, если не разбёрешься, то завтра всё тебе объясню.
тебя уже носом тыкнули в твое сообщение, а ты всё равно споришь. Да, такому ничего не докажешь.

kokoc88

тебя уже носом тыкнули в твое сообщение, а ты всё равно споришь. Да, такому ничего не докажешь.
Тебя уже попросили читать тему внимательнее, а ты всё равно мне что-то втираешь. Завтра я напишу тебе смысл отцитированного тобой поста, если до тебя вдруг не дойдёт сегодня вечером.

6yrop

Тебя уже попросили читать тему внимательнее, а ты всё равно мне что-то втираешь. Завтра я напишу тебе смысл отцитированного тобой поста, если до тебя вдруг не дойдёт сегодня вечером.
какой, нафиг, смысл там совпадение побуквенное! Как с таким человеком, обсуждать сколько-нибудь сложные темы :confused: .

kokoc88

какой, нафиг, смысл там совпадение побуквенное! Как с таким человеком, обсуждать сколько-нибудь сложные темы.
Где совпадение побуквенное и с чем? Ты читаешь одно предложение из одного моего поста, грубо вырвал его из контекста и интерпретировал его как получилось. А получилось у тебя почему-то так, как будто я выучил ASP.NET MVC. Ещё раз: если до завтра до тебя не дойдёт смысл этого предложения, то я объясню; а пока что попридержи свои обидки, удивления и возмущения при себе.

Dasar

Здесь тебе необходимо только считывать информацию из модели, а обратный процесс не нужен.
это не нужно, пока интерфейс не rich (без ajax-а)

6yrop

вот хороший ролик на тему того, что в Java всё есть
http://www.youtube.com/watch?v=PQbuyKUaKFo
см. на обоих чувакков на последних кадрах

kokoc88

это не нужно, пока интерфейс не rich (без ajax-а)
Я всегда думал, что для AJAX-а это тоже не особо нужно. Впрочем, это уже отдельная тема для обсуждения, я пока что без понятия, как AJAX работает в ASP.NET MVC. (Кстати, мне реально не ясно, почему нельзя сделать удобные Post, User, Thread без кодирования Helper-ов.)
Итак, останавливаясь на strongly typed view, я так понимаю, что флейм окончен. Судя по тому, что я понял, в Java уже много лет есть практически полный технологический аналог (при чём не один, хотя мы обсудили пока что только две технологии). По крайней мере с точностью до флейма про то, кому что удобно; где надо что-то написать один раз, а где два; и другие несущественные мелочи.

6yrop

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

kokoc88

а ну о чем разговор, если для тебя это мелочи, только вот после таких заявлений я начинаю сомневаться, что из твоей кучи стартопов хоть что-то взлетело.
Да мне, мягко говоря, похуй на то, в чём ты там сомневаешься. Ты, как полный лох, опозорил себя в созданной тобою же теме, а теперь пытаешься толсто потроллить для самоудовлетворения. Скучно.

FRider

ты зря, это очень чистый и концентрированный пример того, как может действовать на девелопера пропаганда от МС.

6yrop

это вовсе не тролинг. Я реально дал тебе авансом оценку крутого девелопера, но после заявленя " .. написать один два раза ... это мелочи", я при всё желании не могу сохранить такую оценку за тобой. Это заявление говорит отом, что ты не "чувствуешь" код, и, соответственно, не крутой девелопер :).

6yrop

ты зря, это очень чистый и концентрированный пример того, как может действовать на девелопера пропаганда от МС.
слушай, , ты вот часто про про поганду в том и в этом говоришь, осуждаешь, ну там в христианстве, здесь вот МС. А сам ты насквозь пропитан идеалогией, только другой. Способность к критическому анализу ты практически не демонструруешь.
А я реально с удовеольствием бы сменил дотнет на что-то другое.....

kokoc88

это вовсе не тролинг. Я реально дал тебе авансом оценку крутого девелопера, но после заявленя " .. написать один два раза ... это мелочи", я при всё желании не могу сохранить такую оценку за тобой. Это заявление говорит отом, что ты не "чувствуешь" код, и, соответственно, не крутой девелопер .
Знаешь, когда-то я со своим соседом по комнате не поделил еду. Мне казалось, что я трачу на неё больше денег, а ему казалось, что всё в порядке. После того, как мы с ним поругались, он громогласно заявил, что снимает свою защиту от пАцАноВ нашего этажа с меня, как с члена этой комнаты. И знаешь что? Мне было похуй!1 А пацанам с нашего этажа?.. Как выяснилось, им тоже было похуй!1

6yrop

ага, набор побасенок у тебя широкий (кстати последняя мне не понравилась типичный технологических лох

kokoc88

ага, набор побасенок у тебя широкий (кстати последняя мне не понравилась типичный технологических лох
При написании последних постов ты так волнуешься, что делаешь по несколько ошибок в каждом. Расслабься, ты глупо слился в споре на тему, о которой ничего не знал, такое со всеми случается. Вовсе не повод плакать.

6yrop

При написании последних постов ты так волнуешься, что делаешь по несколько ошибок в каждом. Расслабься, ты глупо слился в споре на тему, о которой ничего не знал, такое со всеми случается. Вовсе не повод плакать.
Ой, , большое спасибо ты меня успокоил.
P.S. Всё на сегодня заканчиваю. Завтра буду занят, не смогу продолжать.

kokoc88

Ой, , большое спасибо ты меня успокоил.
Всегда пожалуйста.
Завтра буду занят, не смогу продолжать.

Да ты в этой теме самый бесполезный, так что мы переживём.

FRider

какую другую, учитывая, что мой основной язык разработки это до сих пор с-шарп.
Я просто не вижу положительной динамики уже несколько лет в .нете. А вот крики про то, что вот мы тут сделали кой чо новое, вот сейчас магически наступит счастие - все те же самые, начиная года этак с 2004. Тока буквы в названиях меняются. Счастие правда никак не наступает, только код усложняется.
При этом в соседних платформах те или иные технологии действительно давно предствалены различными либами - т.е. выбор есть, можно выбрать под себя и под задачу.

Dasar

Мне просто интересно, что именно ты бы написал в коде strongly typed helper-а для thread, post, user и т.д.?
на asp.net mvc st я бы написал так:

<table>
<tr>
<td rowspan='2'>
<view:user user=<%=post=>post.user%>/>
</td>
<td>
<view:is-watch-icon is-watch=<%=post=>post.is-watch%> />
<view:text value=<%post=>post.title%> />
<view:post-ref post=<%post=>post.parent%> />
</td>
<td>
<view:datetime value=<%post=>post.created-time%> />
</td>
<td>
<view:actions item=<%post%> />
</td>
</tr>
<tr>
<td colspan='3'>
<view:rich-text post=<%post=>post.text%>/>
</td>
</tr>
</table>

можно также через helper, тогда нужный view будет выбираться автоматически, в зависимости, от типа

<table>
<tr>
<td rowspan='2'>
<view:user user=<%=post=>post.user%>/>
</td>
<td>
<view:is-watch-icon is-watch=<%=post=>post.is-watch%> />
<%=Html.value(post=>post.title)%>
<view:post-ref post=<%post=>post.parent%> />
</td>
<td>
<%=Html.value(post=>post.created-time)%>
</td>
<td>
<view:actions item=<%post%> />
</td>
</tr>
<tr>
<td colspan='3'>
<%=Html.value(post=>post.text)%>
</td>
</tr>
</table>

kokoc88

можно также через helper
Да нет, мы же говорили, что тебе нужен кастомный элемент. Это же не view, которые ты просто включаешь в страницу. Фактически, в твоём примере я не вижу необходимости делать кастомные элементы: ты везде использовал готовые.

Dasar

Фактически, в твоём примере я не вижу необходимости делать кастомные элементы: ты везде использовал готовые.
т.е. элементы view:user, view:post-ref, view:is-watch-icon, view:rich-text(со всеми наворотами) - уже встроены в spring?

Dasar

Я просто не вижу положительной динамики уже несколько лет в .нете.
какие критерии используются?

Dasar

можно переписать кстати лучше

<view:dockpanel>
<view:user user=<%=post=>post.user%> dock='left'/>
<%=Html.value(post=>post.text) dock='bottom' %>
<view:actions item=<%post%> dock='right'/>
<%=Html.value(post=>post.created-time) dock='right'%>
<view:panel>
<view:is-watch-icon is-watch=<%=post=>post.is-watch%> />
<%=Html.value(post=>post.title)%>
<view:post-ref post=<%post=>post.parent%> />
</view:panel>
</view:dockpanel>

kokoc88

т.е. элементы view:user, view:post-ref, view:is-watch-icon, view:rich-text(со всеми наворотами) - уже встроены в spring?
Ты же сам пишешь эти view, создаёшь отдельный файл, где описываешь размещение внутренних элементов; а дальше просто включаешь один в другой. (Я как раз и назвал это шаблоном.) В JSP есть элементы (теги) для включения готовых layouts, только я не видел, чтобы это делалось через названия элементов. Обычно это выглядит как-то так: <layout-render name="post.jsp"> или <jsp:include page="thread.html" />

kokoc88

можно переписать кстати лучше
Да, так выглядит достаточно красиво. Что касается "<view:dockpanel>" и подобного, в JSP сотни готовых библиотек тегов, вон чего отгуглил (впервые вижу такое в виде тегов): http://sweetdev-ria.ideotechnologies.com/sweetdev-ria-gettingStarted-3.5.1/layout.jsp?url=%2Ftabbox%2Ftabbox_simple.jsp

Dasar

Ты же сам пишешь эти view
я уже запутался.
есть еще одна сущность?

kokoc88

я уже запутался.
есть еще одна сущность?
В смысле? Как ты получаешь тег <view:user>? Пишешь отдельный layout (strongly typed view где на HTML и ASP.NET MVC делаешь представление модели пользователя, называешь его user и у тебя появляется <view:user>? Или ты этот тег можешь написать только в коде на C#?!

Dasar

но мне не понятно, а что надо будет делать, если label необходимо брать из переменной, или из словаря локализации?

<ria:tab id="tab1" label="First Tab" removable="false" selected="true"></ria:tab>

т.е. как константы в общем случае заменяются на переменные/код?

Dasar

Пишешь отдельный layout (strongly typed view где на HTML и ASP.NET MVC делаешь представление модели пользователя, называешь его user и у тебя появляется <view:user>? Или ты этот тег можешь написать только в коде на C#?!
есть несколько вариантов, но общий вариант выглядит следующим образом:
добавляется новый класс, часть которого (шаблон представления) описывается в виде asp.net-шаблона.

kokoc88

т.е. как константы в общем случае заменяются на переменные/код?
Общего случая нет. :) Это может быть код внутри: label="<% localization.getLabel(Tabs.DETAILS) %>"; может быть язык выражений, например label="${localization.getLabel(Tabs.DETAILS)}"; может быть биндинг label="Localization.DETAILS"; ещё это может быть язык какого-то шаблонизатора....

FRider

наличие готовых компонентов(а значит скорость разработки) и выбор между ними, удобство их использования(да, не оч научный критерий возможность их расширения под себя.
Неудачные предложенные библиотеки от нашего флагмана - яркий пример говновцф.
Если сравнивать с явой, то явление объясняю для себя меньшим комьюнити программистов

Dasar

> наличие готовых компонентов(а значит скорость разработки) и выбор между ними, удобство их использования(да, не оч научный критерий возможность их расширения под себя.
что именно не хватает? по сравнению с java

FRider

Парадокс в том, что чего не хватало - было закрыто портами с явы. Это, например, хибернейт и спринг.
Т.к. это порты, то наскоко я понял, они отстают от оригиналов в развитии.
Если брать веб - то страшно неудобные веб-формы были закрыты шаблонизатором StringTemplate.
Чем неудобны вебформы - громоздким синтаксисом и сближением модели с представлением. Громоздким описанием контролов и сложностью модификации существующих.
Еще больное место .нета - это отсутствие вменяемого аппликейшн сервера(надо пояснять, почему ИИС не считается таковым или почему он неудобен впринципе?).
Т.е. лично мое нынешнее резюме по .нету такое - меньше юзаем "новые технологии" от мс, больше юзаем сторонних проверенных либ - получаем меньше проблем. И плюс всю красоту шарпа, как языка :)

6yrop

Да ты в этой теме самый бесполезный, так что мы переживём.
а ничего, что я автор треда, и что вторая волна обсуждений начиная 10 января тоже начинается с меня?
 P.S. да, я вернулся на ночь еще пофлудить :)

6yrop

 
Да ты в этой теме самый бесполезный, так что мы переживём.

да, и именно с моей помощью папа с большой пиписькой потихоньку познает основы языка C# — . В явном виде демонстрируешь отсутствие элементарных комуникационных навыков, а точнее ведешь себя как неблагодарная свинья.

Dasar

> хибернейт
это на любителя.
linq(причем в минимальном объеме) мне нравится больше.
> спринг
говорят, что StructureMap удобнее
http://elegantcode.com/2009/01/07/ioc-libraries-compared/
> Еще больное место .нета - это отсутствие вменяемого аппликейшн сервера(надо пояснять, почему ИИС не считается таковым или почему он неудобен впринципе?).
для enterprise-а iis подходит
согласен что для локальных приложений app server-а не хватает
> вебформы
вебформы(шаблонизаторы) мне все не нравятся.

6yrop

согласен что для локальных приложений app server-а не хватает
а что это такое? app сервер для локальных приложений?

6yrop

> хибернейт
это на любителя.
+1

6yrop

Если брать веб - то страшно неудобные веб-формы были закрыты шаблонизатором StringTemplate.
Razor вроде симпатичнее (толком еще не использовал).

Dasar

а что это такое? app сервер для локальных приложений?
это когда нужен service(demon но этим не хочется заморачивать пользователя.
если использовать iis как app server, то требуется чтобы пользователь его поставил, настроил и т.д.

6yrop

это когда нужен service(demon)
что service-ного требуется?
но этим не хочется заморачивать пользователя.

это означает отсутствие какой-либо установки?

FRider

linq(причем в минимальном объеме) мне нравится больше.
дело все в том, что линк появился не так давно. Т.е. приложения, работающие с данным нужно было разрабатывать куда как раньше его появления, ведь правда? :) А значит вменяемая либа нужна была очень давно. Хибернейт при всех недостатках - вменяемая. Тут проявляется еще один подход МС: "все срочно переписывайте код на совершенно новую либу!" И где же тут поддержка существующих больших приложений? Да ведь и к линку есть вопросы. Сразу ли линк мапился на оракл, к примеру?
для enterprise-а iis подходит

В корне не согласен. ИИС убог и сложен в администрировании - но это лирика. Предположим скинули сию неприятную работу на админа(мы же в энтерпрайзе!) Теперь вспоминаем, какая ось(семейство) обычно стоит на серверах компаний. Есть ли там ИИС вообще? Умеет ли иис, если уж мы его как то куда то поставили интегрироваться хотя бы с таким ентерпрайз решением как JMS?(не обсуждаем, хорошее это решение или плохое, оно действительно является ентерпрайз де-факто по распространению).
Спасти может только одно - когда компания целиком и полностью сидит на игле МС. Но это далеко не всегда так в ентерпрайзе.
Локально как раз можно придумать не самые сложные костыли чтобы решить проблему.
вебформы(шаблонизаторы) мне все не нравятся.
Я бы поставил вопрос так - не ищем лучшее решение, ищем вменяемое(лучшее из худших). Так вот, среди шаблонизаторов его можно найти - есть выбор опять же. Веб-формы же безальтернативный фейл в своем роде(ну или опять же переходим к уже озвученному - выкидываем чудесную технологию от МС...)

FRider

тут уже подходим к чудесной реализации понятия "демона" в венде... Отдельный такой холивар, это я спецом не затрагивал. Что опять же приведет нас к интересным вопросам...

FRider

так замечательно, подставь туда свой любимый маппер. И посмотрим, какова его будет распространенность в коммьюнити(а значит и наличие в нем граблей + возможность получение консультации по их обходу)

Dasar

тут уже подходим к чудесной реализации понятия "демона" в венде... Отдельный такой холивар, это я спецом не затрагивал. Что опять же приведет нас к интересным вопросам...
а здесь что не так?

FRider

можно ли установить сервис в систему без админских прав?

Dasar

Т.е. приложения, работающие с данным нужно было разрабатывать куда как раньше его появления, ведь правда?
это не бьется с предыдущим утверждением
Я просто не вижу положительной динамики уже несколько лет в .нете.
> В корне не согласен. ИИС убог и сложен в администрировании - но это лирика.
это про какой iis, версии 5.0?
> Умеет ли иис, если уж мы его как то куда то поставили интегрироваться хотя бы с таким ентерпрайз решением как JMS?
зачем iis интегрироваться с jms? почему недостаточно либы внутри iis интегрированной с jms?

6yrop

так замечательно, подставь туда свой любимый маппер.
у нас свой :)
И посмотрим, какова его будет распространенность в коммьюнити(а значит и наличие в нем граблей + возможность получение консультации по их обходу)

а грабли мы не обходим :), мы их фиксим один раз и всё :)

FRider

ненене, я не называю положительной динамикой скачки к светлому будущему. Интересует поступательная динамика. Вот через пару лет мс скажет, что мол линк говно, мы тут супер-пупер новую либу придумали, давайте мол все переписывать на нее.
это про какой iis, версии 5.0?

6.0 не сильно далеко ушел от него в смысле настройки.
зачем iis интегрироваться с jms? почему недостаточно либы внутри iis интегрированной с jms?
буду благодарен, если укажешь на такую. Чтобы по приходу месаджа поднимался а-ля реквест. Т.е. понятно, что мб я херово искал, а у тебя искать за меня время нету, но вот только если уж говоришь об энтерпрайзе, то мб стоит включить уже энтерпрайзные решения в коробку?

FRider

о, круто. Это ж то, о чем я и толкую - выкидываем чудные "новые технологии" от МС, берем самый минимум и делаем все свое. Все будет отлично. Но появятся другие проблемы.

6yrop

а что это такое? app сервер для локальных приложений?

это когда нужен service(demon но этим не хочется заморачивать пользователя.
так что же такое локальный app server, если это не windows service?

6yrop

выкидываем чудные "новые технологии" от МС
а какие это в данном контексте? LINQtoSQL МС сама закрыла, EF это убожество было видно сразу.

bav46

Я просто не вижу положительной динамики уже несколько лет в .нете. А вот крики про то, что вот мы тут сделали кой чо новое, вот сейчас магически наступит счастие - все те же самые, начиная года этак с 2004.
сам лично на эти нововведения ставил хуки на свн ;)

6yrop

Но появятся другие проблемы.
для девелопера? или для кого?

Dasar

> 6.0 не сильно далеко ушел от него в смысле настройки.
7.0 наше всё уже 3 года
> буду благодарен, если укажешь на такую. Чтобы по приходу месаджа поднимался а-ля реквест.
это делается через was, есть в windows 2008 и vista-е

Dasar

можно ли установить сервис в систему без админских прав?
вроде poweruser-а достаточно

Dasar

так что же такое локальный app server, если это не windows service?
от app сервера хочется:
1. замену кода без перезапуска
2. скачивание и обновление версии
3. поднятие внутри одного процесса нескольких служб
может еще
4. общая шина сообщений
и т.д.

6yrop

Итоги треда (моё виденье):
1. В Java есть возможность типизировано работать с моделью во View. И это круто :)! Я этого не знал (но и не утверждал, что изучал эту тему). и за эту инфу большое спасибо :).
2. Вопрос равноценности решений в Java и .Net тоже хочется откомментировать, но пока не могу найти времени на это. Да и не очень это интересно.
3. Поведение и длинну письки -а тоже надо бы откомментировать, но не буду по тем же причинам.

bav46

3. Поведение и длинну письки -а тоже надо бы откомментировать, но не буду по тем же причинам.
я как стороний наблюдатель больше склоняюсь к тому что Майк круче и баталию ты проиграл

6yrop

я как стороний наблюдатель больше склоняюсь к тому что Майк круче и баталию ты проиграл
можешь выписать основные моменты почему ты так решил?

bav46

можешь выписать основные моменты почему ты так решил?
я думаю основной момент, что Майк относится к таким программистам, для которых любая среда это средство, у него судя по постам есть большой опыт работы во многих средах и он может проаргументировать, почему именно вот это средство лучше другого.
как-то так. понятно объяснил?

6yrop

как-то так. понятно объяснил?
нет, не понятно. Пустая вода из общих слов. Под "выписать основные моменты" я имел ввиду ключивые моменты специфичные для данного треда.
постам есть большой опыт работы во многих средах

Тут есть обратная сторона медали — кто работал со многими средами часто имеет поверхностные знания, что Майк и продемонстрировал в данном треде, он не знал даже языка C#.

bav46

Тут есть обратная сторона медали — кто работал со многими средами часто имеет поверхностные знания, что Майк и продемонстрировал в данном треде,
он не знал даже языка C#.
поверхностные знания языка не так страшны ;)

6yrop

поверхностные знания языка не так страшны
ну не скажи, качество знания отражается на качестве продукта/сервиса (я это наблюдаю на реальных примерах).

kokoc88

что Майк и продемонстрировал в данном треде, он не знал даже языка C#
Ццц, очередной ошибочный вывод в попытке потешить своё ЧСВ.

6yrop

что Майк и продемонстрировал в данном треде, он не знал даже языка C#
Ццц, очередной ошибочный вывод в попытке потешить своё ЧСВ.
Вот в этом посте ты не видишь linq.expression, а видишь лишь лямбду:
 
Но вот чего я так и не понел, при чём тут LINQ Expressions. Как бы "x => x.SomeProperty" выглядит, скорее, как лямбда.
  

Несколькими постами ниже ты говоришь, что тебе надо было объяснить, что лямбды конвертятся в expression-ы:
Отсюда я делаю вывод, что ты не знал о конвертации лямбд в expression-ы. Где я ошибаюсь?

kokoc88

Вот в этом посте ты не видишь linq.expression, а видишь лишь лямбду:
Именно так. Из-за того, что ты назвал лямбду LINQ Expression-ом, я подумал, что ты не знаешь C#; эта же мысль ввела меня в долгое заблуждение, когда я считал, что синтаксис в <% %> - это специальный язык шаблонизатора ASP.NET MVC; из-за чего в свою очередь я и не подумал искать какие-то функции в коде C#.
Отсюда я делаю вывод, что ты не знал о конвертации лямбд в expression-ы.
Я знал, но даже если бы и не знал, то это ровным счётом ничего не значит. На любом языке можно вполне качественно программировать, не зная всех его изъёбов.
Где я не прав?
Ты не прав везде, где наезжаешь на качество моих решений. Это может сделать только тот, кто работал со мной в одной команде.

6yrop

<% %> - это специальный язык шаблонизатора ASP.NET MVC
ооо, так ты еще ASP.NET не знаешь? Это базовый синтаксис ASP.NET, который был еще в первой версии.
Я примерно так и представлял себе ситуацию — одно незнание (поверхностное знание) накладывается на другое, поэтому так долго и выясняли, что же ты не знаешь, и как тебе объяснить.
Тут вспоминаются слова моего учителя по математике: иллюзия знания гораздо хуже незнания. Люди, которые поверхностно познакомились с кучей технологий как раз часто имеют иллюзию знания. Иллюзия обычно образовывается по схеме — о, а это я уже видел в другой технологии и т.д..

bav46

ты сейчас выглядешь смешно

kokoc88

так ты еще ASP.NET не знаешь?
Я никогда не знал ASP.NET, что значит ещё? Вообще C# до недавнего времени слабо подходил для WEB; да и подходит ли сейчас - это вопрос.
Я примерно так и представлял себе ситуацию — одно незнание (поверхностное знание) накладывается на другое, поэтому так долго и выясняли, что же ты не знаешь, и как тебе объяснить.

Нет, мы выясняли так долго, потому что ты не хотел этого объяснять. Каждый раз, когда я просил объяснить, ты писал, что я ничего не понимаю и должен гуглить. И я перед каждым вопросом честно усиленно гуглил.
Тут вспоминаются слова моего учителя по математике: иллюзия знания гораздо хуже незнания. Люди, которые поверхностно познакомились с кучей технологий как раз часто имеют иллюзию знания. Иллюзия обычно образовывается по схеме — о, а это я уже видел в другой технологии и т.д..
То есть у тебя была иллюзия знания Java. Всё понятно.

6yrop

я считал, что синтаксис в <% %> - это специальный язык шаблонизатора ASP.NET MVC
кстати, вероятно, из-за невысокого качества твоих знаний ты не в состоянии оценить достоинства .Net-решения — типизированные View получаются просто из базового синтаксиса ASP.NET и обычного языка C#. В отличии от Java, где для решения потребовались TLD, подкрутка IDE, встраивание в процесс сборки дополнительного шага верификации source code-а вьюшек и т.д.

6yrop

Я никогда не знал ASP.NET
Если бы ты написал это, обсуждение было бы короче. Я просто не догадывался о том, что человек обсуждавший данную тему может не знать ASP.NET.

kokoc88

из-за невысокого качества твоих знаний ты не в состоянии оценить достоинства .Net-решения
Уж не знаю, из-за качества ли знаний (а мне кажется из-за атеизма по отношению к святому символу четырёхцветного окна но да. Я не в состоянии оценить достоинства решения, которому меньше года, и которое является почти полным аналогом решений конкурентов, некоторым из которых более десяти лет.

kokoc88

Если б ты написал это, обсуждение было бы короче. Я просто не догадывался о том, что человек обсуждавший данную тему может не знать ASP.NET.
Ты уже сам себе противоречишь. Если бы я знал ASP.NET, я бы опроверг твоё ошибочное мнение на порядок быстрее. И уж тем более не стал бы выяснять в десятках постов, что такое strongly typed view.

6yrop

Вообще C# до недавнего времени слабо подходил для WEB
а для чего он подходит?

6yrop

Ты уже сам себе противоречишь. Если бы я знал ASP.NET
здесь идет речь о базовом синтаксисе ASP.NET из первой версии <% %> (кажется, такое скриплетами называется). А в начале треда я писал о твоем незнании ASP.NET MVC.

6yrop

я считал, что синтаксис в <% %> - это специальный язык шаблонизатора ASP.NET MVC
Этот синтаксис скриплетов в точности совпадает с JSP: JSP Expressions, JSP Scriptlets. JSP ты знаешь? Если да, то ход твоих мыслей выглядит еще более загадочным.

kokoc88

Этот синтаксис скриплетов в точности совпадает с JSP: JSP Expressions, JSP Scriptlets. JSP ты знаешь? Если да, то ход твоих мыслей выглядит еще более загадочным.
Ход моих мыслей вполне понятен. Если учитывать, что TreeMap в Microsoft назвали SortedDictionary; а конструктор ReadonlyCollection<T> принимает IList<T>. Впрочем, ты можешь считать, что я не знаю ни C#, ни Java. От этого результат нашей дискуссии сильно не изменяется.

6yrop

И я перед каждым вопросом честно усиленно гуглил.
Гуглом ты, кажется, тоже не умеешь пользоваться. По второй ссылке по запросу asp.net mvc strongly typed view получаем маленькую статью, в которой всё хорошо описано. В частности, из этой статьи
 
Notice above how we do not need to specify the “ProductName” string parameter anymore – lambda expressions are flexible enough that we can retrieve both the name of the property/field on our model object in addition to its value.
  

(если знать основы C#-а) можно понять, что lambda expressions это экземпляры type-а из наймспейса linq.expression (так я и писал в начале треда).

kokoc88

Гуглом ты, кажется, тоже не умеешь пользоваться. По второй ссылке по запросу asp.net mvc strongly typed view получаем маленькую статью, в которой всё хорошо описано. В частности, из этой статьи
Слушай, ты уже определись, чем я не умею пользоваться, и чего я не знаю, и давай на этом закроем тему. Ты всё равно не смог обосновать свой наезд на замшелую Java, поэтому теперь твои упрёки в мой адрес в этой теме выглядят как попытки удовлетворить своё ЧСВ. (С таким же успехом ты можешь начать отдельную тему, в которой будешь всем доказывать, что я не умею гуглить, не знаю основ C#, и так далее.)
(если знать основы C#-а) можно понять, что lambda expressions это экземпляры type-а из наймспейса linq.expression (так я и писал в начале треда).
Лямбды - это лямбды, а в экземпляры LINQ Expressions они преобразуются компилятором. (На самом деле это большой тупняк в языке, но боюсь, что если я буду это доказывать, то начнётся ещё один длинный холи вар.) К основам C# это преобразование имеет такое же отношение, как package annotations к основам Java.

6yrop

На самом деле это большой тупняк в языке, но боюсь, что если я буду это доказывать, то начнётся ещё один длинный холи вар
В принципе, да, я согласен, что вот такое встраивание в язык expression tree была ошибкой разработчиков языка (не путать это с оценкой проекта LINQ в целом). Синтаксис языка следовало бы развивать для возможности реализации полноценного (динамического) ObjectQuery. У меня была попытка двигаться в этом направлении на C# 3.0, и были интересные результаты, но всё больше и больше чувствовалось, что без изменения синтаксиса языка хорошего законченного продукта не получишь.
Но LINQ expression-ы нам дали (пусть неоптимальный вариант) возможность писать “ссылки на свойства”. Такое время от времени требуется в самых разных местах, и я считаю, что ссылки на свойства/методы должны быть в языке.

6yrop

“ссылки на свойства”.
касательно темы треда, в дотнете решением является всего лишь одно из применений "ссылок на свойства", в Java для решения потребовалось: TLD, подкрутка IDE, встраивание в процесс сборки дополнительного шага верификации source code-а вьюшек и т.д.

kokoc88

касательно темы треда, в дотнете решением является всего лишь одно из применений "ссылок на свойства", в Java для решения потребовалось: TLD, подкрутка IDE, встраивание в процесс сборки дополнительного шага верификации source code-а вьюшек и т.д.
Касательно темы треда, в .NET потребовалось: куча кода для анализа LINQ Expressions (и магия, которая привела к проблемам с валидацией подкрутка IDE, встраивание в процесс сборки дополнительного шага верификации source code-а вьюшек и т.д.

6yrop

куча кода для анализа LINQ Expressions
откуда такое заключение? смотрел сорцы? Алгоритм тривиальный же.
магия, которая привела к проблемам с валидацией
Ты про это? Если да, то это как раз проблема идеологии MVC, неспецифичная для конкретной технологии. Как эта проблема решена в Java? Предполагаю, что через введение viewmodel. Это и предлагается по той ссылке.
подкрутка IDE
Такое не требуется. Это ты тупо тролишь.
встраивание в процесс сборки дополнительного шага верификации source code-а вьюшек и т.д.
Такое не требуется. Это ты тупо тролишь.

kokoc88

Такое не требуется. Это ты тупо тролишь.

Как это не требуется? Либо это требуется в .NET точно так же, как в Java; либо вообще нигде не требуется.

kokoc88

в Java для решения потребовалось

Для какого решения? Для data binding ничего нового по сравнению с JSP не требуется, можно сделать свой без каких-либо проблем.
TLD
Точно так же в .NET требуется какое-то описание формата ASP.NET шаблонизатора.
подкрутка IDE
Как без подкрутки Visual Studio распарсила бы и определила то, что находится в файле strongly typed view?
встраивание в процесс сборки дополнительного шага верификации source code-а вьюшек
То есть в .NET файлы для шаблонизатора вообще никак не проверяются?

kokoc88

встраивание в процесс сборки дополнительного шага верификации source code-а вьюшек
Создал проект ASP.NET MVC2, отключил ReSharper, испортил View:
                <div class="editor-field">
<%: Html.TextBoxFor(m => m.UserName2) %>
<%: Html.ValidationMessageFor(m => m.UserName) %>
</div>

Результат: никакого подкрашивания ошибки, никаких предупреждений при компиляции, при попадании на страницу View возникает ошибка:
Ошибка сервера в приложении '/'.
....
Строка 22: <div class="editor-field">
Строка 23: <%: Html.TextBoxFor(m => m.UserName2) %>
Строка 24: <%: Html.ValidationMessageFor(m => m.UserName) %>
Строка 25: </div>

FRider

тебе плюсы уже хотя бы за упорство в отстаивании

kokoc88

"Name" повторен два раза. У -я один раз:
Я прошу прощения, но при создании ASP.NET MVC2 проекта генерируется вот такая модель:
    public class LogOnModel
{
[Required]
[DisplayName("User name")]
public string UserName { get; set; }

[Required]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }

[DisplayName("Remember me?")]
public bool RememberMe { get; set; }
}

Как ты мог плакаться о том, что в классическом JSP надо два имени, если в .NET требуется такой пиздец? Это при том, что среди этих атрибутов даже нет грамотной валидации.
И кроме того, "Remember me?" - эта строка отображается в представлении (на странице в браузере). Это, батенька, вообще полный и окончательный пиздец, потому что прочно смешивает Model и View, что для идеологии MVC недопустимо.

6yrop

Для какого решения? Для data binding ничего нового по сравнению с JSP не требуется, можно сделать свой без каких-либо проблем.
ты не забываешь условие статической валидации сорцов до рантайма?
TLD
Точно так же в .NET требуется какое-то описание формата ASP.NET шаблонизатора.
Насколько я понял тебя, для myform требуются некоторое TLD описание, и затем это описание скармливается IDE. В дотнет ничего такого не требуется, просто пишется чистый C# код для helper-а.
TLD
Точно так же в .NET требуется какое-то описание формата ASP.NET шаблонизатора.
JSP Scriplet это часть? В ASP.NET MVC используется только JSP Scriplet. Если JSP Scriplet не входит в TLD, то ASP.NET MVC нет TLD.
Как без подкрутки Visual Studio распарсила бы и определила то, что находится в файле strongly typed view?

Visual Studio-и требуется понимать только скриплеты <% %>, это она умела еще с Visual Studio 2003. В новых версиях Visual Studio потребовалось только поддержка новых версий языка C#.
То есть в .NET файлы для шаблонизатора вообще никак не проверяются?

Есть только преобразование файла с разметкой в C#-код, такое преобразование было еще в первой версии ASP.NET-а. Никаких других проверок не требуется.

FRider

вообще за DisplayName в атрибутах микрософтовских инженеров надо дубиной по башке без дальнейших разговоров

kokoc88

ты не забываешь условие статической валидации сорцов до рантайма?
Visual Studio этого не делает.
Насколько я понял тебя, для myform требуются некоторое TLD описание, и затем это описание скармливается IDE. В дотнет ничего такого не требуется, просто пишется чистый C# код для helper-а.
Нет, ты не понял. Мы с запутались. На самом деле речь шла о включении представлений одно в другое. TLD для этого не требуется.
Visual Studio-и требуется понимать только скриплеты <% %>, это она умела еще с Visual Studio 2003. В новых версиях Visual Studio потребовалось только поддержка новых версий языка C#.
Не надо путать добавление дата биндинга (до сих пор не могу придти в себя от того, что Microsoft сделало это только в 2010 году) и полную поддержку шаблонизатора. Для добавления дата биндинга в Java вообще ничего нового не требуется.
Есть только преобразование файла с разметкой в C#-код, такое преобразование было еще в первой версии ASP.NET-а. Никаких других проверок не требуется.
Ничем не отличается от Java.

6yrop

Результат: никакого подкрашивания ошибки, никаких предупреждений при компиляции, при попадании на страницу View возникает ошибка:
ну её маё, почитай уже основы ASP.NET. По умолчанию отключен режим полной компиляции сайта, обычно на билд сервере происходит полная компиляция сайта.

kokoc88

вообще за DisplayName в атрибутах микрософтовских инженеров надо дубиной по башке без дальнейших разговоров
Да, только из-за этого должно быть стыдно упоминать о том, что ASP.NET MVC - это что-то новое. (Да, да, я уже молчу о том, что MVC изобрели много лет назад...)

FRider

Ну маза в том, что по философии мс это действительно новое, т.к. сама мс это толкает первый раз. Философия мс - нет ничего кроме технологий, навязываемых продвигаемых мс.

6yrop

ответь, плиз,
JSP Scriplet это часть TLD?
JSP Scriplet это часть шаблонизатора?
А то пока твою терминологию не до конца понимаю.

kokoc88

ну её маё, почитай уже основы ASP.NET. По умолчанию отключен режим полной компиляции сайта, обычно на билд сервере происходит полная компиляция сайта.
Вот здесь написано, как полностью скомпилировать ASP.NET сайт: http://mikehadlow.blogspot.com/2008/05/compiling-aspx-templates-using.html
Это custom build step, то есть допиливание IDE, соответственно Java ни чем не отличается.

kokoc88

JSP Scriplet это часть TLD?
JSP Scriplet это часть шаблонизатора?
Часть шаблонизатора.

6yrop

ребят, чё та вы увлекаетесь слишком. То, что я слышал (пока сам не гуглил): ASP.NET MVC начали разрабатывать два чувака просто из комьюнити (как open source проект). И в начале сама MC даже отмежевывалась от этого, но увидев большой интерес к этому проекту со стороны комьюнити, взяла этот проект под свое крыло, и наняла этих разработчиков к себе в штат.
P.S. атрибуты, да, это полный писец

6yrop

Это custom build step, то есть допиливание IDE
могу ошибаться, но скорее всего, сайт можно скмпилировать на машине, где установлен только .Net Framework без Visual Studio. Так что IDE тут ни причем.

kokoc88

сайт можно скмпилировать на машине, где установлен только .Net Framework без Visual Studio
Сайт можно скомпилировать на машине, где установлена только Java и все библиотеки соответствующего фреймворка, без IntelliJ IDEA.

6yrop

Сайт можно скомпилировать на машине, где установлена только Java и все библиотеки соответствующего фреймворка, без IntelliJ IDEA.
ты не отслеживаешь линии разговора. Поясню позже. Призываю к более конструктивному разговору.

kokoc88

ты не отслеживаешь линии разговора.
Да? А мне-то показалось, что ты в очередной раз попытался на что-то наехать, и тебе это не удалось....

6yrop

И так, в твоей термилогии это выглядит так.
1. Для типизированного байндинга в Java потребовалось расширение шаблонизатора, в .Net шаблонизатор состоит только из JSP Scriplet (это в контексте asp mvc).
2. Теперь о myform. Получается, что мы расширяем набор элементов шаблонизатора. Тем самым вводим некоторую спецификацию для добавления элементов шаблонизатора. В частности, в этой спецификации указывается как помечать атрибуты, которые используются для байндинга (атрибут path в примере). В .Net такого не требуется, help-ы это просто C# код.

kokoc88

Для типизированного байндинга в Java потребовалось расширение шаблонизатора
В Java всё, что связано с JSP, является его расширением. Этих расширений - хоть жопой жуй, и это правильно и хорошо, потому что всё было более-менее правильно спроектировано. Заметь, мы до сих пор не обсуждали GWT, Wicket или другие фреймворки; то есть спор идёт в контексте технологии десятилетней давности против технологии прошлого года. И технология прошлого года пока что ничего особенного из себя не представляет: велосипед, в котором даже не учли проблемы конкурентов.
в .Net шаблонизатор состоит только из JSP Scriplet (это в контексте asp mvc).
В .NET для биндинга кроме всего прочего используются какие-то дикие атрибуты, которые нарушают смысл MVC. Так что пока что речь о сравнении с JSP даже не идёт.
Получается, что мы расширяем набор элементов шаблонизатора. Тем самым вводим некоторую спецификацию для добавления элементов шаблонизатора. В частности, в этой спецификации указывается как помечать атрибуты, которые используются для байндинга (атрибут path в примере). В .Net такого не требуется.

Ты до сих пор не понял, да? Речь не о том, что требовалось, а чего не требовалось. Речь о том, где можно добавить любой биндинг без изменения кода основного SDK, а где нельзя. Сегодня для биндинга мне ничего не требуется писать, я возьму одно из многих десятков готовых решений и получу все плюшки. В то время как под .NET все вынуждены сидеть под одним ужасным решением, а другого просто нет.

6yrop

То есть на Java сайты пишутся с помощью расширения сущностей трех видов:
1. Текст HTML и т.д.
2. Элементы шаблонизатора.
3. Элементы языка Java.
В .Net обходятся двумя типами расширений:
1. Текст HTML и т.д.
2. Элементы языка C#.
Шаблонизатор не расширяется.
Чем меньше сущностей, тем проще :), как правило

kokoc88

Чем меньше сущностей, тем проще .
У тебя в посте ошибка, ты должен был написать вот так:
То есть на .NET сайты пишутся с помощью сущностей трех видов:
1. Текст HTML и т.д.
2. Элементы шаблонизатора.
3. Элементы языка C#.

6yrop

сайты пишутся с помощью сущностей трех видов
сравни с моим:
 
сайты пишутся с помощью расширения сущностей трех видов

kokoc88

сравни с моим:
Сравни с моим:
C#

6yrop

В .NET для биндинга кроме всего прочего используются какие-то дикие атрибуты
Это опцианально. Можно без них.

6yrop

не беспокойся это я прочитал, а вот ты выписал не мою фразу.

6yrop

Речь о том, где можно добавить любой биндинг без изменения кода основного SDK, а где нельзя.
Это предложение я не понял.
 
Сегодня для биндинга мне ничего не требуется писать, я возьму одно из многих десятков готовых решений и получу все плюшки.

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

kokoc88

Это предложение я не понял.
ASP.NET MVC пришлось встраивать в .NET Framework и компилятор ASP.NET
да, когда механизм расширения сложен, приходится уповать на наличие готовых решений.
А когда механизма расширения нет, как в .NET, уповать не на что и приходится годами ждать подачки от Microsoft.

kokoc88

не беспокойся это я прочитал, а вот ты выписал не мою фразу.
Я её и не выписывал. В любом случае я рад, что ты согласен с тем, что в .NET тоже три пункта.

6yrop

ASP.NET MVC пришлось встраивать в .NET Framework и компилятор ASP.NET
эээ тебя совсем понесло. До второй версии ASP.NET MVC разрабатывали вообще не Майкрософт. А в состав framework MVC вошел только в Framework 4.0 (апрель 2010).

6yrop

Я её и не выписывал. В любом случае я рад, что ты согласен с тем, что в .NET тоже три пункта.
думаешь, если ты напишешь фразу, она станет истиной? Не однократно замечал такое за тобой.

kokoc88

думаешь, если ты напишешь фразу, она станет истиной? Не однократно замечал такое за тобой.
Нет, просто ты не стал возражать, что в C# три пункта, тебе не понравилась только формулировка заголовка.

6yrop

Нет, просто ты не стал возражать, что в C# три пункта, тебе не понравилась только формулировка заголовка.
Я не написал возрожение, и ты сделал вывод, что я согласился. Да, логика писец просто :grin: .

kokoc88

Я не написал возрожение, и ты сделал вывод, что я согласился. Да, логика писец просто .
Можешь написать... возрожение [sic]. Если оно есть, потому что как-то не очевидно, откуда ты его ещё можешь высосать.

6yrop

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

6yrop

Можешь написать... возрожение [sic]. Если оно есть, потому что как-то не очевидно, откуда ты его ещё можешь высосать.
всё уже написано в том посте, где пункты.

kokoc88

До второй версии ASP.NET MVC разрабатывали вообще не Майкрософт.
Написано, что Microsoft, и что исходники выложили в 2009 году. Впрочем, неважно.
Заметь, твои аргументы в пользу WEB на .NET могли бы быть сильнее, если бы ты не мусолил всё время одно и то же. Например, ты бы мог упомянуть, что некоторые шаблонизаторы из Java портируют в .NET; мог бы упомянуть о том, что есть другие проекты для WEB под .NET; но зациклился только на том, где стоит клеймо от Microsoft. Ты всё крутишь вокруг дата биндинга и LINQ Expressions, но тебе пора давно понять, что в этом плане под .NET ничего принципиально нового не выпустили.

kokoc88

всё уже написано в том посте, где пункты.
А я тебе ещё раз говорю, что ты тупой тролль. И в Java, и в .NET у тебя должно было получиться по три пункта, о чём я тебе и написал. С чего это вдруг в .NET не надо знать шаблонизатор? Это отдельная, третья сущность.
Вообще тот твой пост написан как-то невнятно и непонятно: то ли ты считаешь, что надо расширять шаблонизатор и HTML (?!); то ли тебе кажется, что шаблонизатор в .NET использовать не нужно...

6yrop

не надо знать шаблонизатор?
стопицотый раз, не перевирай мои фразы, у меня написано, что шаблонизатор не расширяется кастомными элементами.

6yrop

ничего принципиально нового не выпустили
а как ты Razor оцениваешь?

kokoc88

стопицотый раз, не перевирай мои фразы, у меня написано, что шаблонизатор не расширяется кастомными элементами.
Значит, на Java сайты тоже пишутся с помощью двух пунктов. Потому что все необходимые расширения для JSP уже давно придуманы и реализованы в десятках различных фреймворков. Я вообще не знаю людей, которым было бы это неоходимо. (И ещё раз повторю, чтобы ты не тупил, упоминавшийся выше myform - это включение одного представления в другое, а не расширение шаблонизатора.)

kokoc88

а как ты Razor оцениваешь?
Поверхностно рассмотрев его - как очередной шаблонизатор. С тем же успехом я могу попросить тебя оценить любой из более чем 25 шаблонизаторов для Java.

6yrop

С тем же успехом
поскольку я не собираюсь оценивать, следовательно, и ты не собираешься узнавать появилось ли в дотнете что-то новое для веба. А пишешь, что не появилось...

kokoc88

поскольку я не собираюсь оценивать, следовательно, и ты не собираешься узнавать появилось ли в дотнете что-то новое для веба. А пишешь, что не появилось...
Учитывая дату выхода MVC и вялость проектов-клонов Java WEB фреймворков, моя позиция вполне себе обоснована.

6yrop

Учитывая дату выхода MVC
может тебе в историки податься? тебя так увлекают даты.

kokoc88

может тебе в историки податься? тебя так увлекают даты.
Понятно, у тебя кончилась аргументация. Что ж, такое со всеми случается. :smirk:

6yrop

Понятно, у тебя кончилась аргументация. Что ж, такое со всеми случается.
Ой какой ты скучный ... но я продолжаю тебе писать :grin: ... Аргумент такой, дата выхода не говорит о том насколько хорош фрайворк.

kokoc88

Ой какой ты скучный ... но я продолжаю тебе писать ... Аргумент такой, дата выхода не говорит о том насколько хорош фрайворк.
Смотря что вышло в эту дату: если что-то новое, то да, не говорит. Если технология десятилетней давности, то вполне себе говорит.

6yrop

Если технология десятилетней давности, то вполне себе говорит.
ты это о чем? то что MVC плох в принципе?

kokoc88

ты это о чем
О том, что у кого-то это заняло слишком много времени.

FRider

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

6yrop

О том, что у кого-то это заняло слишком много времени.
много времени ушло на что?
На осознание того, что идеалогия Web Forms провальная. Да, абсолютно согласен, что это был долгий тупняк.

Dasar

>ASP.NET MVC пришлось встраивать в .NET Framework и компилятор ASP.NET
в том-то и дело что нет.
asp.net mvc - это внешнее решение по отношению:
a).net framework
b) asp.net
c) IDE (рефакторинг, интеллисенс, отладка и т.д.)
т.е. при создании asp.net mvc не делалось изменения во всем перечисленном.
asp.net mvc - это внешняя либа по отношению к .net framework, asp.net и IDE.
если же брать тоже самое в java-е, то при добавлении ссылок на данные пришлось подкрутить шаблонизатор и пришлось подкрутить IDE.
бонус такого подхода в том, что стоимость разработки самого asp.net mvc была очень низкой (а это и есть ключевой показатель мощности технологии)
такой же низкой будет стоимость расширения asp.net mvc в своих целях.

6yrop

да ебаный ты по голове, в стопицотый раз: о том, что мс взяла старую идею(кстати хорошую, несмотря на недостатки, которые бывают у любой идеи и тем более реализации натужилась включить ее в свой фрамеворк когда все кому не лень ее уже реализовали стопицот раз и пытаецо пропихнуть как нечто новое. Это и есть нечтоновое - среди ущербных поделок от мс конечно
вас возмущает лишь то, что МС называет это "новым"? Мне лично насрать на то как MC это продвигает: новый, не новый. Меня больше волнует качество этого фрайворка (чтобы не вляпаться опять). А вот несказанно радует, что WebForms-ы наконец-то загнулись.

6yrop

низкой будет стоимость расширения asp.net mvc в своих целях.
я вот на это и надеюсь (с mvc только начинаем работать)

FRider

как бе - если "новая технология" - это то, что другие юзают уж много лет, это покащатель развития вообщет. И можно опосредованно судить, по количеству таких вот подобных случаев(можно еще припомнить ремоутиг, вцф вляпаешься ты опять или нет

6yrop

я вот на это и надеюсь (с mvc только начинаем работать)
собственно в этом треде моя личная цель и была обосновать легкость расширения mvc, перед тем как самому ввязывать в это.

6yrop

как бе - если "новая технология" - это то, что другие юзают уж много лет, это покащатель развития вообщет.
Спорно. Тут вроде все признают, что C# продвинутее языка Java. Как тут с развитием?

6yrop

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

6yrop

как бе - если "новая технология" - это то, что другие юзают уж много лет, это покащатель развития вообщет. И можно опосредованно судить, по количеству таких вот подобных случаев(можно еще припомнить ремоутиг, вцф вляпаешься ты опять или нет
я вот перешел бы на Java (готов даже пережить период обучения и потерю в зп но как-то не вижу там особого счастья. Сам то вот на сишарпе остаешься.

kokoc88

если же брать тоже самое в java-е, то при добавлении ссылок на данные пришлось подкрутить шаблонизатор
При каком из добавлений? В Java десятки технологий для WEB, которые не зависят от JDK, а то и от всего остального.
Если говорить про JSP (ещё раз напоминаю, ей 10 лет, а она технически эквивалентна ASP.NET MVC то нет, шаблонизатор в этом смысле подкручивать не пришлось. Если в твоём понимании ASP.NET MVC - сторонняя по отношению к ASP.NET; то ты точно так же должен понимать, что Spring Tags - сторонняя по отношению к JSP.
и пришлось подкрутить IDE
Ты рассматриваешь ASP.NET MVC исключительно в свете дата биндинга? На самом деле ради него много чего подкрутили в IDE, по крайней мере из того, что очевидно при установке 10-ой студии или ReSharper-а.
стоимость разработки самого asp.net mvc была очень низкой (а это и есть ключевой показатель мощности технологии)
Это вообще полный нонсенс. Стоимость разработки никак не связана с мощностью технологии, особенно если эта технология является каким-нибудь фреймворком. А вот стоимость разработки под эту технологию - уже является, и я пока что не заметил в ASP.NET MVC ничего такого, что снижало бы её по сравнению даже со старинным JSP.

Dasar

Если учитывать, что TreeMap в Microsoft назвали SortedDictionary; а конструктор ReadonlyCollection<T> принимает IList<T>.
во-первых: я до сих пор не понимаю, зачем тебе нужны коллекции под .net именно с лейблом microsoft?
чем тебя не устраивают коллекции для .net от других производителей? например, open source?
во-вторых: readonlycollection - это есть wrapper для ilist, которые делает его readonly. было бы странно, если бы wrapper для IList брал бы что-то другое, чем IList
в-третьих, название SortedDictionary лучше, чем TreeMap - т.к. название TreeMap отражает детали реализации, а название SortedDictionary отражает внешний интерфейс и скрывает детали реализации.
и соответственно, с каких это пор класс принято называть на основе деталей внутренней реализации?
ты лучше скажи, что в Java-е есть взамен тому же:
Rx ( http://stackoverflow.com/questions/2845047/reactive-extensio... )
?

Dasar

На самом деле ради него много чего подкрутили в IDE, по крайней мере из того, что очевидно при установке 10-ой студии или ReSharper-а.
например?
если много подкрутили в 10-ой студии, то как asp.net mvc умудряется тогда работать в 2008 студии?

Dasar

А вот стоимость разработки под эту технологию - уже является, и я пока что не заметил в ASP.NET MVC ничего такого, что снижало бы её по сравнению даже со старинным JSP.
имхо, большая часть всех этих jsp и asp.net mvc нужна для monkey и индусов.
продвинутым разработчикам нужен мощный фундамент, на котором легко построить свой web-framework, свой orm для базы и т.д.
и я вижу, что за последние годы - .net далеко шагнуло в этом направлении, я вижу что свой web-framework, свой orm на .net пишется за считанные недели

kokoc88

во-первых: я до сих пор не понимаю, зачем тебе нужны коллекции под .net именно с лейблом microsoft?
чем тебя не устраивают коллекции для .net от других производителей? например, open source?
Любая современная технология должна иметь хороший набор простейших структур данных. Это более чем очевидно, и я даже не собираюсь флеймить на эту тему, если кто-то вдруг с этим не согласен.
во-вторых: readonlycollection - это есть wrapper для ilist, которые делает его readonly. было бы странно, если бы wrapper для IList брал бы что-то другое, чем IList

Readonly обёртку для IList надо было назвать ReadonlyList; особенно в свете того, что есть ещё интерфейс ICollection.
в-третьих, название SortedDictionary лучше, чем TreeMap - т.к. название TreeMap отражает детали реализации, а название SortedDictionary отражает внешний интерфейс и скрывает детали реализации.

Оба этих названия одинаковы с точки зрения отражения деталей реализации (Tree/Sorted и Dictionary/Map разве что без чтения документации нельзя оценить сложность операций с SortedDictionary. И поэтому только по TreeMap можно понять, в каких ситуациях можно использовать эту коллекцию, а в каких этого делать не стоит.
ты лучше скажи, что в Java-е есть взамен тому же: Rx
Я очень сильно не хочу изучать ещё что-то из лаборатории Microsoft только ради того, чтобы спорить с упёртым .NET разработчиком, который уже лет 8 ничего другого не видел и не пробовал. Могу лишь сказать, что начиная с 2005 года почти всё "новое" или даже новое, что выпустили в Microsoft - ужасное, корявое, иногда тормозное и всегда жутко неудобное гавно.

kokoc88

продвинутым разработчикам нужен мощный фундамент, на котором легко построить свой web-framework, свой orm для базы и т.д.
и я вижу, что за последние годы - .net далеко шагнуло в этом направлении, я вижу что свой web-framework, свой orm на .net пишется за считанные недели
А я вот не вижу, куда это оно так шагнуло, что ORM или WEB Framework вдруг стало проще написать под .NET; за исключением языка программирования C# ничего особенного и удобного не появилось.

Dasar

>А я вот не вижу, куда это оно так шагнуло, что ORM или WEB Framework вдруг стало проще написать под .NET; за исключением языка программирования C# ничего особенного и удобного не появилось.
в .net-е появилось:
1. yield-ы
2. extension-ы
3. expression-ы
4. dynamic
в c#: var и lambda
и что самое интересное, что в java-7(как framework) внедрили те фичи, которые были в .net
http://habrahabr.ru/blogs/java/69811/
в .net из java-ы перетекло лишь covariance/contravariance
в java-8 собираются все-таки реализовать lambda-у(замыкания)
> что ORM или WEB Framework вдруг стало проще написать под .NET;
я вижу, что одна и та же задача решенная на java и на C#/.net-е: на C#/.net решается в 1.5-3 раза меньшим кол-вом кода.
у Java-ы плюс только в большем кол-ве уже реализованных библиотек, но сама по себе java - как framework - намного более бедная, чем .net

bav46

но сама по себе java - как framework - намного более бедная, чем .net
как фреймворк да, а как вм?

kokoc88

я вижу, что одна и та же задача решенная на java и на C#/.net-е: на C#/.net решается в 1.5-3 раза меньшим кол-вом кода.

Может быть, какой-нибудь туториал со специфичными языковыми конструкциями содержит в 1.5-3 раза меньше кода. Но реальные большие задачи зачастую решаются намного хуже на C# из-за бедности и низкоуровневости .NET Framework
но сама по себе java - как framework - намного более бедная, чем .net
С точностью до наоборот. Если конечно рассматривать пригодные для использования вещи, а не кучу гавнища, рождённого левыми индусами.

Dasar

Но реальные большие задачи зачастую решаются намного хуже на C# из-за бедности и низкоуровневости .NET Framework
пример бедности

kokoc88

пример бедности
Коллекции, GUI, многопоточность.

bav46

многопоточность.
кстати в 3.5 многопоточность продвинутей стала
вот GUI да в .net это жопа.

Dasar

Коллекции, GUI, многопоточность.
коллекций под .net - хоть жопой жуй.
для GUI-я WPF не плох, но сыроват пока.
а для многопоточности что не хватает?

bav46

для GUI-я WPF не плох
:smirk: если требуется работать на терминале ?

kokoc88

коллекций под .net - хоть жопой жуй.
Сторонних - да, а вот во Framework-е набор скудный.
для GUI-я WPF не плох, но сыроват пока.

Он ужасен и неудобен, биндинги вообще пиздец, тормозит, да и сколько можно быть сыроватым, выпустили лет пять назад.
а для многопоточности что не хватает?
Коллекций и грамотного фреймворка. Взять тот же класс ThreadPool: это ж пиздец, батенька.

FRider

блин, аж встревать страшно. Я вот еще какой вещь хотел бы поднять. Несмотря на то, что ява как язык может и уступает шарпу(согласен с аргументами ДГ но ведь ява она скажем так более многоплатформенна чем .нет. Тут был замечательный пост от вонда(потонувший в споре с упорным шурегом что на самом то деле вопросы вызывает весь "стек технологий" от мс, начиная с кх-м венды. А .нет бурно развивается именно на венде(может кто меня поправит и моно сейчас достиг высот. И это гораздо более важней на мой взгляд, чем эстетство по поводу того, где там есть слово var или даже где более правильные генерики.

bav46

а если еще вспомнить WCF и костыли чтобы его допустим с той же джавой сдружить :grin:

FRider

Сторонних - да, а вот во Framework-е набор скудный.
тут нам стоит все же определится. Я понял твои аргументы, но ведь тут еще говорилось как плюс яве именно наличие большого количества сторонних либ. Так чем плохо, если сторонние либы закрывают потребности в этой области на .нет?

тормозит
маза это проблемы в хп :)

FRider

вцф вспоминать не надо. Конструктива не будет точно

kokoc88

Так чем плохо, если сторонние либы закрывают потребности в этой области на .нет?
Чем плохо закрывать сторонними библиотеками потребности в простейших структурах данных?..

FRider

Сам то вот на сишарпе остаешься.
могу тебя уверить, что это ни разу не связанно с "крутостью" или "отстойностью" технологии и вообще находится в другой плоскости.
Тут бодрячок правильно, имхо, замечал, что мол в общем-то для разработчика(прикладного от себя добавлю) не так уж важны красоты и изыски.И решить свои проблемы я могу в рамках .нет. Что не мешает замечать кривость "новых технологий" от мс, особенно понемногу изучая как обстоят дела в других совершенно платформах.

Dasar

Чем плохо закрывать сторонними библиотеками потребности в простейших структурах данных?..
конечно.
специализированные коллекции не используются для стыка между двумя разными кодами.
сложные коллекции - это деталь реализации, соответственно если каждый будет использовать свой набор специализированных коллекций - то ничего страшного не будет.
вот чего действительно не хватает в .net - это штатного readonly массива (и такую фичу невозможно реализовать "снаружи", внешней либой)

FRider

ну блин, это ж реально близко к холивару. Т.е. я согласен что нужна какая-то база, однако простейшесть каждый ведь понимает по-своему.
Мне например часто нужен ОРМ, и я считаю это достаточно базовой вещью в опр. областях, однако вполне могу пережить, если в стандартной либе его нет. Или вот еще мне одно время часто был нужен хороший csv ридер(кстати у питона есть в базе, что несказанно радовало!)
Все же минимальная "базовость" - это без сомнения массивы, простые списки, очереди, хэштаблицы в базе .нета есть.

bav46

особенно понемногу изучая как обстоят дела в других совершенно платформах.
я не знаю как у Вас, но у нас вообще выбор есть на чем писать. на джаву можно хоть завтра напросится.
джаверы тут либу на шарпе под себя наваяли мы их код ревьили.
так что у нас в этом плане все демократично, и никакого проигрыша в зп как у шурика не будет, как раз таки потому что руководство придерживается правильных взглядов.
кстати руководство работало до этого у Вас :grin:

kokoc88

сложные коллекции - это деталь реализации, соответственно если каждый будет использовать свой набор специализированных коллекций - то ничего страшного не будет.
Я не могу понять твоего аргумента. Может быть, int - это тоже деталь реализации?
Тем более, я не говорю про сложные коллекции, в современном SDK должны быть базовые. С хорошей архитектурой. С read only обёртками и другими вспомогательными утилитами. С масштабируемыми многопоточными реализациями.

kokoc88

это без сомнения массивы, простые списки, очереди, хэштаблицы в базе .нета есть
А как же heap? А read only обёртки?.. Мне, например, многих вещей в .NET всегда не хватает, каким бы проектом я не занимался.

Dasar

да и сколько можно быть сыроватым, выпустили лет пять назад.
если учесть, что рынок desktop-систем стагнирует, то понятно почему wpf не развивается - нет общественного заказа
> Коллекций и грамотного фреймворка. Взять тот же класс ThreadPool: это ж пиздец, батенька.
threadpool - это вообще .net 1.0. нафиг он тебе нужен?
для многопоточности в .net добавили plinq и task parallel library.
в .net 5 добавят async
что такое грамотный фреймворк?

FRider

ну вот натурально те скажу, что без ридонли оберток точно могу пережить. Не, я не утверждаю, что они не нужны, но и прямо сильной боли не вызывают. Вот тот же DisplayName из примера мвц - имхо гораздо более пиздец.

Dasar

С хорошей архитектурой. С read only обёртками и другими вспомогательными утилитами.
имхо, архитектура принятая в Java - с кучей оберток. это плохая архитектура.
каждая обертка - это тормоза, от которых никуда не денешься.
и обертка на обертке - это фактически monkey-код для enterprise-а

Dasar

Вот тот же DisplayName из примера мвц - имхо гораздо более пиздец.
кстати в чем именно он заключается?
для локализации достаточно прогнать replace и заменить DisplayName на MyLocalizedDisplayName

kokoc88

threadpool - это вообще .net 1.0. нафиг он тебе нужен?
Да, нафиг вообще нужен thread pool?... :grin: А ведь ещё на нём вызываются таймеры и I/O...
для многопоточности в .net добавили plinq и task parallel library.
По большей части отношу эти нововведения к фразе: "Могу лишь сказать, что начиная с 2005 года почти всё "новое" или даже новое, что выпустили в Microsoft - ужасное, корявое, иногда тормозное и всегда жутко неудобное гавно."

FRider

не понял, где прогнать реплейс? В рантайме? Это как?
ЗЫ уж молчу, что прогонять всякие реплейсы - это уже какая то внешняя приблуда ;)

kokoc88

имхо, архитектура принятая в Java - с кучей оберток. это плохая архитектура.
Конечно, конечно. И вообще, кому в голову придёт писать immutable классы, да?
каждая обертка - это тормоза, от которых никуда не денешься.
Да, да, классы вообще тормозят, надо вернуться к структурному программированию.

bav46

надо вернуться к структурному программированию.
там соседний тред есть

Dasar

не понял, где прогнать реплейс? В рантайме? Это как?
ЗЫ уж молчу, что прогонять всякие реплейсы - это уже какая то внешняя приблуда
с одной стороны - плохо, что asp.net mvc не поддерживает локализации без перекомпиляции приложения
с другой стороны - это не особо критично по следующим причинам:
а)
ниша asp.net mvc - это framework для быстрой разработки небольшого-среднего веб-приложения.
локализация с быстрой разработкой очень плохо дружит, все известные решения для локализации очень громоздки, страшны и т.д. - в не зависимости от средств разработки.
b)
если все-таки требуется локализовать asp.net mvc приложение, то достаточно displayname заменить на mylocalizeddisplayname
c)
web-приложения редко обслуживается не самими разработчиками

Dasar

Да, нафиг вообще нужен thread pool?... А ведь ещё на нём вызываются таймеры и I/O...
появление ее аж в .net 1.0 намекает на то, что это достаточно низкоуровневая вещь, которую лучше использовать через высокоуровневый доступ, чем напрямую.

FRider

с одной стороны - плохо, что asp.net mvc не поддерживает локализации без перекомпиляции приложения
не, это не плохо. Это просто пиздец и за это надо убивать, имхо.
локализация с быстрой разработкой очень плохо дружит, все известные решения для локализации очень громоздки, страшны и т.д. - в не зависимости от средств разработки.
эээ. МОжет я чего не понимаю. Я говорю о простом таске - на сайте есть комбобокс, который дает возможность выбрать язык отображения. Как тут вообще поможет перекомпиляция, если сайт то крутится тот же самый, а пользователь выбирает язык. Было дело, разрабатывали в два рыла сайт небольшой на пых-пыхе(! ненапряжненько так и не долго. Вышеописанный функционал прикрутили за вечер чтоль, ничего там громоздкого не было, либа называлась чего то там 18n

Dasar

Я говорю о простом таске - на сайте есть комбобокс, который дает возможность выбрать язык отображения
mylocalizeddisplayname берет строку уже из внешнего нужного ресурса, используя захардкоденную строку как ключ
а комбобокс тупо переключает подключенный файл ресурсов

FRider

а, всмысле наследуемся от DisplayName и перегружем свойство Namе или чего там есть? Вот кстати ща прям так и не соображу как переключить файл ресурсов.
Какое то не самое простое решение

Dasar

а, всмысле наследуемся от DisplayName и перегружем свойство Namе или чего там есть? Вот кстати ща прям так и не соображу как переключить файл ресурсов.
Какое то не самое простое решение
как можно сделать проще?
вот код аттрибута

class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private readonly string resourceName;
public LocalizedDisplayNameAttribute(string resourceName)
: base
{
this.resourceName = resourceName;
}

public override string DisplayName
{
get
{
return Resources.ResourceManager.GetString(this.resourceName);
}
}
}

вот код который переключает ресурсы

Thread.CurrentThread.CurrentUICulture = ...

ps
лучше можно сделать, если порекомендовать разработчикам asp.net mvc - сделать, чтобы displayname вел себя как mylocalizeddisplayname на основе настройки из конфига (нет настройки - выдается захардкоденная стройка, есть настройка - захардкоденная строка используется как ключ при поиске в ресурсе)

FRider

а дисплейнейм точно оверрайдится?(а то от мс вполне готов ждать подставы)
Если серъезно, то хз проще ли сиьно, но вот на пыхе либа как то совсем просто интегрировалась со смарти, там тоже тупо писали спецтегами в шаблоне(вполне дескриптивно кстати а потом надо было тока словари подкладывать

Dasar

Конечно, конечно. И вообще, кому в голову придёт писать immutable классы, да?
т.е. ты из под immutable-класса хочешь напрямую возвращать ReadonlyTreeMap "клиентскому" коду?

Dasar

а дисплейнейм точно оверрайдится?(а то от мс вполне готов ждать подставы)

я это взял с первой строки - google:asp.net mvc localization displayname

6yrop

а)
ниша asp.net mvc - это framework для быстрой разработки небольшого-среднего веб-приложения.
локализация с быстрой разработкой очень плохо дружит, все известные решения для локализации очень громоздки, страшны и т.д. - в не зависимости от средств разработки.
o :D , у нас эта проблема закрыта в 2006 году (мной :o ). При всей убогости WebForms-ов локализация там решена хорошо — через навешивание meta:resourceKey-ев на контролы. Единственное что было сильно криво это генерация resx-файлов из aspx файлов в Visual Studio, этот шаг я заменил самописной тулзой, которая делает тоже самое для всего солюшена (парсинг aspx/ascx файлов самописный). Короче, в итоге схема максимально простая:
1. запускаем тулзу, получаем excel-файл с английскими фразами;
2. отдаем этот файл переводчикам на разные языки;
3. запускаем тулзу в режиме генерации локализованных ресурсов из excel-файла.

6yrop

если требуется работать на терминале ?
в принципе, да, у нас один из продуктов крутиться именно на терминалах.

6yrop

ниша asp.net mvc - это framework для быстрой разработки небольшого-среднего веб-приложения.
официально ее вроде позиционируют несколько по другому:
 
•It works well for Web applications that are supported by large teams of developers and Web designers who need a high degree of control over the application behavior.
http://www.asp.net/mvc/tutorials/asp-net-mvc-overview-cs
  
вряд ли large team будет поддерживать небольшой-средний сайт

Dasar

>вряд ли large team будет поддерживать небольшой-средний сайт
large team - это скорее open source, результатом которых является какой-нибудь движок форума, блога и т.д. - что является скорее небольшим-средним приложением.
большие приложения с большей нагрузкой редко разрабатываются на общих движках, чаще разработка идет либо на чем-то своем, либо на каком-то узкоспециализированном движке.
большое конечное приложение - развивается скорее небольшой командой.
большому приложению-framework-у, которое как раз может иметь большую команду, может быть тесно в рамках фреймворка asp.net mvc

kokoc88

появление ее аж в .net 1.0 намекает на то, что это достаточно низкоуровневая вещь, которую лучше использовать через высокоуровневый доступ, чем напрямую.
А что делать, когда нужен thread pool?

kokoc88

т.е. ты из под immutable-класса хочешь напрямую возвращать ReadonlyTreeMap "клиентскому" коду?
А это неважно, что я хочу. Важна польза от immutable объектов и состояний.
ReadonlyTreeMap

Видишь, проблема в том, что я регулярно разрабатываю на Java и C#, а ты из языков этого направления, похоже, используешь только C#; поэтому многие удобные/грамотные/нужные вещи, которые мне уже давно стали очевидны, приходится разжёвывать через жуткий флейм.

kokoc88

как можно сделать проще?
Позволить верстальщикам работать с ресурсами. Удивительно, что ты раньше жаловался на то, что в JSP верстальщикам тяжелее сделать if/then/else для вывода разных значений; и при этом такой грубой примеси представления в код модели ASP.NET MVC не упоминал.

Dasar

А что делать, когда нужен thread pool?
так используй, что не хватает?

kokoc88

так используй, что не хватает?
Так, ты сначала определись, использовать или нет?
Оставить комментарий
Имя или ник:
Комментарий: