Re[18]: В России опять напишут новый объектно-ориентированны
От: alex_public  
Дата: 06.03.18 15:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Тоже верно. Но мне, как разработчику, хочется сделать этот автовыводимый тип как public. Более того, я еще хочу иметь возможность присвоить этому типу имя.

S>Вот тут мне не вполне понятно — зачем имя этому типу?
S>Вот смотри, как я себе это представляю.
  желаемая структура
S>Допустим, мы хотим отдать клиенту какой-то view (пока что пренебрежём всем этим ajax-ом).
S>Ну там — юзернейм, ласт логин, форумлист, топиклист, и т.п.
S>Для того, чтобы удобно было делать разметку, мы хотим иметь типизированное свойство Model.
S>Пишем (в биндинге, в коде, или ещё где) this.Model.User.LoginNam; — и нам сразу среда автодополняет, а компилятор статически ругается, если мы не дописали свойство правильно.
S>В классике нам для этого нужно продекларировать свойство Model заранее:
S>
S>public class MainView: View
S>{
S>   MainViewModel Model {get; set;}
S>}
S>

S>Без имени типа — никак.
S>Ок, как устроен этот тип? Да там — точно так же: свойства этого класса имеют "проекционные" типы, которые мы, в идеале, описываем исключительно с помощью выражений.
S>То есть лучше всего было бы прямо вот так:

S>
S>public class MainView: View
S>{
S>    var Model {get; } = new {
S>    ForumList = (from f in DB.Forums where f.Parent.IsNull() select f.ShortName, f.Description, f.Id),
S>        TopicList = (from t in DB.Topics where t.ForumID == this.CurrentForum orderby t.LastReplyDate descending select t.Subject, t.ReplyCount, t.LastReplyDate, t.Author.NickName, t.Id),
S>        User = (from u in users where u.Id == this.CurrentUserId).SingleOrDefault()
S>    };
S>}
S>

S>Тут нам имя типа для этого Model вообще ненужно. Он используется ровно один раз.
S>Ну, ок, этот код выглядит не слишком опрятно. Опрятнее было бы как-то так:

S>
S>public class MainView: View
S>{
S>    var Model {get; } = BuildModel();
S>}
S>

S>Да и внутри BuildModel хотелось бы побольше структурированности — чтобы все вот эти вот кишочки стейтментов наружу не торчали. Там же на самом деле будет развесистая-развесистая хрень: и LastReplyDate, и ReplyCount не хранятся, а вычисляются; везде применяются атрибуты безопасности — типа удалённые сообщения нужно прятать от всех, кроме модераторов, ну и прочее, и прочее.

Описанное тобой реализуется вот прямо сейчас на C++ в одну строчку.

Хотя при этом я не вижу ничего ужасного и в использование именованного типа.

Но главное, я не очень понимаю, какое это вообще имеет отношение к обсуждаемой теме отказа от SQL. )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.