Re[6]: Шаблон APS.NET MVC 2.0 проекта
От: seregaa Ниоткуда http://blogtani.ru
Дата: 19.04.10 18:57
Оценка:
Здравствуйте, Ziaw, Вы писали:

var model = new SomeViewModel
{
  Data = db.Doctors.GroupBy(d => d.Taxonomy).Select(g => new GroupedTaxonomy{ Taxonomy = g.Key, Count = g.Count}).ToList()
}
return View(model);


Разве инициализация объектов в Немерле уже реализована?
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[7]: Шаблон APS.NET MVC 2.0 проекта
От: Ziaw Россия  
Дата: 19.04.10 19:01
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Разве инициализация объектов в Немерле уже реализована?

Код на C#
... << RSDN@Home 1.2.0 alpha 4 rev. 1468>>
Re[7]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 19.04.10 19:08
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Разве инициализация объектов в Немерле уже реализована?


Угу в библиотеке макросов его нет. _FRED_ недавно давал ссылку (я не нашел) на with макрос, который позволяет свойства инициализировать в таком духе:
def x = MyClass() with { A = a(), B = b() }

Где A и B — мутабельные свойства/пропертя.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: Шаблон APS.NET MVC 2.0 проекта
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.04.10 19:54
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, seregaa, Вы писали:


S>>Разве инициализация объектов в Немерле уже реализована?

Z>Код на C#

Лучше использовать конструкторы с именованными параметрами (или без них).

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

На сегодня можно просто возвращать кортежи:
[Record]
class SomeViewModel
{
  public Data : list[string * int];
}

...
SomeViewModel(db.Doctors.GroupBy(d => d.Taxonomy).Select(g => (g.Key, g.Count)).NToList());


Это рабочий код на немерле.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Шаблон APS.NET MVC 2.0 проекта
От: seregaa Ниоткуда http://blogtani.ru
Дата: 19.04.10 20:54
Оценка:
Здравствуйте, hardcase, Вы писали:

S>>Разве инициализация объектов в Немерле уже реализована?


H>Угу в библиотеке макросов его нет. _FRED_ недавно давал ссылку (я не нашел) на with макрос, который позволяет свойства инициализировать в таком духе:

H>
H>def x = MyClass() with { A = a(), B = b() }
H>

H>Где A и B — мутабельные свойства/пропертя.

Хм, а почему здесь используются фигурные скобки (как в шарпе), а для анонимных классов — круглые (не как в шарпе)? Просто исторически так сложилось?

Имхо нужно до релиза первой версии Немерле прийти к единому знаменателю.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[8]: Шаблон APS.NET MVC 2.0 проекта
От: seregaa Ниоткуда http://blogtani.ru
Дата: 19.04.10 21:21
Оценка: +1
Здравствуйте, hardcase, Вы писали:

S>>Ну тогда и предложенный тобой вариант с генерацией модели с именем global::_N_Home_Index_Model тоже не сработает. Ведь типизация методов представления может начаться раньше, чем типизация экшена и тогда к моменту типизации представления класс модели еще не будет определен.


H>Нет, предложенный способ работать будет: aspx файл компилируется в отдельную сборку и proj (App_Code) к нему цепляется референсом, так что тут все чисто. Минус у него следующий: имя модели жестко связано с именем контроллера и представления. Если позволить задавать имя модели явно, то можно ликвидировать этот недостаток.


класс, остроумное в самом хорошем смысле этого слова решение!

С явным определением имени та же засада — у разработчика будет соблазн использовать его в той же сборке, где определяет это имя.
Если связывать имя модели не с названем экшена, а с названием целевого представления, то особых проблем с неявным названием модели я не вижу.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[9]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 20.04.10 04:54
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Здравствуйте, hardcase, Вы писали:


S>>>Разве инициализация объектов в Немерле уже реализована?


H>>Угу в библиотеке макросов его нет. _FRED_ недавно давал ссылку (я не нашел) на with макрос, который позволяет свойства инициализировать в таком духе:

H>>
H>>def x = MyClass() with { A = a(), B = b() }
H>>

H>>Где A и B — мутабельные свойства/пропертя.

S>Хм, а почему здесь используются фигурные скобки (как в шарпе), а для анонимных классов — круглые (не как в шарпе)? Просто исторически так сложилось?


with там был определен как оператор: правым операндом у него выступал секвенс — блок кода. Эз-дезигнед.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: Шаблон APS.NET MVC 2.0 проекта
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.04.10 14:53
Оценка:
Здравствуйте, seregaa, Вы писали:

H>>Угу в библиотеке макросов его нет. _FRED_ недавно давал ссылку (я не нашел) на with макрос, который позволяет свойства инициализировать в таком духе:

H>>
H>>def x = MyClass() with { A = a(), B = b() }
H>>

H>>Где A и B — мутабельные свойства/пропертя.

S>Хм, а почему здесь используются фигурные скобки (как в шарпе), а для анонимных классов — круглые (не как в шарпе)? Просто исторически так сложилось?


S>Имхо нужно до релиза первой версии Немерле прийти к единому знаменателю.


В компиляторе есть ограничение. Или { x; y; } или (x, y,) (последние точка с запятой и запятая не обязательны).

Так что в макросе принципиально не может быть { x, y } или (x; y).

Это правило обрабатывается еще на стадии лексического разбора.

Кроме того запятые и точки с запятой не могут идти вне скобок.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 20.04.10 18:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В компиляторе есть ограничение. Или { x; y; } или (x, y,) (последние точка с запятой и запятая не обязательны).


Да это понятно Я же в браузере писал.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 20.04.10 18:39
Оценка: :)
Здравствуйте, hardcase, Вы писали:

H>Да это понятно Я же в браузере писал.


При том в нетрезвом виде....
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: Шаблон APS.NET MVC 2.0 проекта
От: Ziaw Россия  
Дата: 21.04.10 04:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>На сегодня можно просто возвращать кортежи:

VD>
VD>[Record]
VD>class SomeViewModel
VD>{
VD>  public Data : list[string * int];
VD>}

VD>...
VD>SomeViewModel(db.Doctors.GroupBy(d => d.Taxonomy).Select(g => (g.Key, g.Count)).NToList());
VD>


VD>Это рабочий код на немерле.


Я в курсе.

Только вот во вьюхе придется отличать Taxonomy от Count по индексу тупла. Достаточно добавить в него еще пять полей, чтобы понять, что подход тупиковый. Самое противное, что написать такую вьюху еще можно, но читать потом нереально.
... << RSDN@Home 1.2.0 alpha 4 rev. 1468>>
Re[2]: Шаблон APS.NET MVC 2.0 проекта
От: seregaa Ниоткуда http://blogtani.ru
Дата: 21.04.10 06:49
Оценка:
Здравствуйте, hardcase

Ты в коментариях к коммиту с шаблоном (http://code.google.com/p/nemerle/source/detail?r=8753) написал, что в шаблоне не хватает файла default.aspx. Но в шаблоне, поставляемом с MVC 2.0 этого файла тоже нет. Если у тебя установлены обе версии mvc (1 и 2) можешь сравнить поставляемые шаблоны, они лежат в папке Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Web\1033\

Да, без default.aspx при запуске проекта не на 7-ом IIS-е браузер вместо главной страницы показывает оглавление каталога, что не очень удобно. Зато 1в1 как в референсном шаблоне.

Но если общественность считает, что default.aspx нужна, то добавлю.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[3]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 21.04.10 09:16
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Здравствуйте, hardcase


S>Да, без default.aspx при запуске проекта не на 7-ом IIS-е браузер вместо главной страницы показывает оглавление каталога, что не очень удобно. Зато 1в1 как в референсном шаблоне.


S>Но если общественность считает, что default.aspx нужна, то добавлю.


Не только в IIS-е 7.0. В WebDev-сервере также листинг каталога, впрочим можно настроить и на урлу, но, имхо, добавить стоит.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 21.04.10 09:25
Оценка: 18 (1)
Здравствуйте, seregaa, Вы писали:

S>Здравствуйте, hardcase, Вы писали:


S>>>Ну тогда и предложенный тобой вариант с генерацией модели с именем global::_N_Home_Index_Model тоже не сработает. Ведь типизация методов представления может начаться раньше, чем типизация экшена и тогда к моменту типизации представления класс модели еще не будет определен.


H>>Нет, предложенный способ работать будет: aspx файл компилируется в отдельную сборку и proj (App_Code) к нему цепляется референсом, так что тут все чисто. Минус у него следующий: имя модели жестко связано с именем контроллера и представления. Если позволить задавать имя модели явно, то можно ликвидировать этот недостаток.


S> класс, остроумное в самом хорошем смысле этого слова решение!



Собственно реализация этой идеи.
Макрос формирующий модель:
[HandleError]
public class HomeController : Controller
{
  public Index() : ActionResult
  {
    model ( message = "Hello, world!" )
  }

  public Stub() : ActionResult
  {
    model ( message = "Another hello!" ) view "Index"
  }

  public About() : ActionResult
  {
    model ( description = "Put some text here!", time = DateTime.Now )
  }
}

Синтаксис model () части аналогичен анонимным типам (правда, интеллисенс там пока отключен).
Макрос сейчас использует WebFormsViewEngine. Если указывается часть view "BlaBla", то эту бла-бла вьюху макрос будет искать в текущем проекте и если не найдет — скажет варнинг, если view не указано, используется имя метода и опять же производится поиск.

Добраться до модели из aspx файла можно используя макрос Model():
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%= Html.Encode(Model().message) %></h2>


Кстати, почему-то не работает объявление переменных в asxp, так что покачто сказать:
def model = Model();

покачто нельзя, жаль.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[10]: Шаблон APS.NET MVC 2.0 проекта
От: seregaa Ниоткуда http://blogtani.ru
Дата: 21.04.10 09:35
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Кстати, почему-то не работает объявление переменных в asxp, так что покачто сказать:

H>
H>def model = Model();
H>

H>покачто нельзя, жаль.

Хм, я проверял такой сценарий, он работал. Может дело в том, что у тебя Model — это макрос, а не тип?
Вот этот код точно компилится и отрабатывает внутри aspx файла:
<%
  def date = DateTime();
  Response.Write(date.ToString());
%>
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[11]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 21.04.10 09:39
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Здравствуйте, hardcase, Вы писали:


H>>Кстати, почему-то не работает объявление переменных в asxp, так что покачто сказать:

H>>
H>>def model = Model();
H>>

H>>покачто нельзя, жаль.

S>Хм, я проверял такой сценарий, он работал. Может дело в том, что у тебя Model — это макрос, а не тип?

S>Вот этот код точно компилится и отрабатывает внутри aspx файла:

Это я балбес — у меня же синтаксический макрос со слова model начинается
/* иЗвиНите зА неРовнЫй поЧерК */
Re[10]: Шаблон APS.NET MVC 2.0 проекта
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.04.10 17:29
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Только вот во вьюхе придется отличать Taxonomy от Count по индексу тупла. Достаточно добавить в него еще пять полей, чтобы понять, что подход тупиковый. Самое противное, что написать такую вьюху еще можно, но читать потом нереально.


На самом деле на практике это не так.

Кортежи обычно используются с помощью декомпозиции:
def (x, y, z) = f();

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

Но вот с теми же метаданными проблемы точно возникнут.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Шаблон APS.NET MVC 2.0 проекта
От: alvas  
Дата: 21.04.10 18:30
Оценка:
На последней сборке NemerleSetup-1.0.0.8784.msi создание MVC проекта вылетает с ошибкой

---------------------------
Microsoft Visual Studio
---------------------------
Error: this template attempted to load an untrusted component 'Microsoft.VisualStudio.Web.Mvc.2.0, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. For more information on this problem and how to enable this template, please see documentation on Customizing Project Templates.
---------------------------
ОК
---------------------------

на Win7 64bit.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[12]: Шаблон APS.NET MVC 2.0 проекта
От: hardcase Пират http://nemerle.org
Дата: 21.04.10 19:04
Оценка:
Здравствуйте, alvas, Вы писали:

A>На последней сборке NemerleSetup-1.0.0.8784.msi создание MVC проекта вылетает с ошибкой


A>---------------------------

A>Microsoft Visual Studio
A>---------------------------
A>Error: this template attempted to load an untrusted component 'Microsoft.VisualStudio.Web.Mvc.2.0, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. For more information on this problem and how to enable this template, please see documentation on Customizing Project Templates.
A>---------------------------
A>ОК
A>---------------------------

A>на Win7 64bit.



А это не криво ли поставлен сам ASP.NET MVC 2.0?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[13]: Шаблон APS.NET MVC 2.0 проекта
От: alvas  
Дата: 21.04.10 19:11
Оценка:
Здравствуйте, hardcase, Вы писали:

H>А это не криво ли поставлен сам ASP.NET MVC 2.0?


Хрен его знает. Я его вообще не ставил. Он установился вместе с VS2010.
Путь из проекта на c# показывает такой
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll
http://alvas.net — Аудио-инструменты для .Net разработчиков
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.