Здравствуйте, alex_public, Вы писали: _>Так я то не утверждаю, что есть какие-то проблемы, а просто прошу показать мне реализацию простейшего примера (занимающего на C++ несколько строк). На самом деле я думал, что мне просто его покажут и всё (чтобы потом сравнить удобство, безопасность и т.п.), однако с учётом сплошных сомнительных отмазок в ответ, начинают появляться подозрения, что проблемы имеются...
Скрытый текст
using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
namespace ConsoleApplication1
{
public class Db : DbContext { public DbSet<Person> Persons { get; set; } }
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public double Total { get; set; }
[NotMapped] public long Runtime { get { return DateTime.Now.Ticks; } }
}
internal static class Program
{
private static void Main()
{
try
{
using (var db = new Db())
{
db
.Persons
.ToList()
.ForEach(p => Console.WriteLine("{0} {1} {2} {3}", p.Id, p.Name, p.Total, p.Runtime));
}
}
catch (Exception ex)
{
Console.Error.WriteLine(ex);
}
Console.ReadLine();
}
}
internal sealed class Configuration : DbMigrationsConfiguration<Db>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(Db context)
{
for (var i = 0; i < 10; i++)
{
context.Persons.AddOrUpdate(new Person
{
Id = i,
Name = "Name" + i,
Total = (i / 10.0)
});
}
context.SaveChanges();
}
}
}
ХГД>>Да откуда мне знать, как ASP реагирует на SEH-исключения, в частности на C++ исключения?
НС>Если исключения стандартные — маршаллер их самостоятельно как нужно завернет.
Я писал, какие. Завернет?
ХГД>> Я ее первый и последний раз ASP использовал лет 15 назад, там тогда вообще только бейсик был.
НС>Междлу ASP и ASP.NET нет ничего общего.
По мне так все они примерно одинаковые, что ASP, что JSP.
НС>>>С какой стати? С++ не умеет написать один раз код, перехватывающий исключения и потом его везде использовать? ХГД>>Ну как минимум придется на этот код сослаться в 100 местах.
НС>А это уже от тебя зависит.
В смысле?
ХГД>> Странная какая-то экономия получается — писать от нее почему-то больше.
НС>Во-первых больше писать не надо. Во-вторых это все копейки по сравнению с рукопашным написанием веб-части.
Ну-ка, ну-ка? Щас у меня клиентский шаблонизатор (GWT) и динамика прямо из плюсов. С ASP будет серверный шаблонизатор и динамика из тех же плюсов. Где выгода? Притом что сейчас у меня автоматом получается сплошной аякс, а с ASP на эту тему придется что-то специальное делать.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Хон Гиль Дон, Вы писали:
НС>>Если исключения стандартные — маршаллер их самостоятельно как нужно завернет. ХГД>Я писал, какие. Завернет?
ХЗ, не изучал вопрос подробно.
НС>>Междлу ASP и ASP.NET нет ничего общего. ХГД>По мне так все они примерно одинаковые, что ASP, что JSP.
Это говорит только о том, что ты совсем не в теме.
ХГД>>>Ну как минимум придется на этот код сослаться в 100 местах. НС>>А это уже от тебя зависит. ХГД>В смысле?
В смысле как напишешь, так и будет. Можно в одном месте исключения обрабатывать, можно в каждом конкретном обработчике. От наличия/отсутствия ASP.NET тут ничего не зависит.
НС>>Во-первых больше писать не надо. Во-вторых это все копейки по сравнению с рукопашным написанием веб-части. ХГД>Ну-ка, ну-ка? Щас у меня клиентский шаблонизатор (GWT)
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>В смысле как напишешь, так и будет. Можно в одном месте исключения обрабатывать, можно в каждом конкретном обработчике. От наличия/отсутствия ASP.NET тут ничего не зависит.
В тех ASP/JSP с которыми я имел дело, вызов прикладного кода выглядел в виде вставки кода на VB или джаве прямо в HTML страницу в обрамлении треугольных скобок с процентами. Куда там воткнуть обработку исключений, чтобы она работала для каждой такой вставки?
НС>>>Во-первых больше писать не надо. Во-вторых это все копейки по сравнению с рукопашным написанием веб-части. ХГД>>Ну-ка, ну-ка? Щас у меня клиентский шаблонизатор (GWT)
НС>То есть джава. Ну и чего ты тогда споришь?
То есть жабаскрипт, получаемый как из джавы, так местами уже и из кофескрипта. Но это на клиенте, а речь шла о серверной части. Она строго на плюсах, и чо и как мне там ASP может ускорить и облегчить — я пока не въезжаю.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Хон Гиль Дон, Вы писали:
ХГД>В тех ASP/JSP с которыми я имел дело, вызов прикладного кода выглядел в виде вставки кода на VB или джаве прямо в HTML страницу
Я ведь написал ASP.NET MVC. Там прямо в страницу вставляют только презентационную логику. Вся логика подготовки данных находится в классе контроллера.
Но даже в старом ASP был глобальный обработчик исключений.
ХГД> в обрамлении треугольных скобок с процентами. Куда там воткнуть обработку исключений, чтобы она работала для каждой такой вставки?
В global.asp, если речь про древний ASP.
ХГД>То есть жабаскрипт, получаемый как из джавы, так местами уже и из кофескрипта. Но это на клиенте, а речь шла о серверной части.
Тогда к чему ты GWT приплел? ASP.NET это серверная технология.
Вот, это совсем другое дело, спасибо за конструктивный подход к дискуссии. Но по коду сразу же возникло несколько вопросов:
1. Можем ли мы аналогично сделать с чужим (определённым в какой-то сторонней библиотеке) классом Person? Т.е. без правки его исходного кода — в этом и была основная задача (да, в моём примере класс Person находится в том же файле, но при этом видно, что оно вообще ничего не знает ни про какие БД) данного подхода.
2. Не очень понял, можем ли мы в функции Main() просто сохранить в базу данных некий объект типа Person (вызовом типа db.Persons.AddOrUpdate(person);, как я понимаю)? И если можем, то зачем понадобилась отдельная функция вида Seed? В данном примере же это только лишнее усложнение...
3. Не увидел где указывается подключение к конкретной базе данных.
Здравствуйте, alex_public, Вы писали:
_>1. Можем ли мы аналогично сделать с чужим (определённым в какой-то сторонней библиотеке) классом Person? Т.е. без правки его исходного кода — в этом и была основная задача (да, в моём примере класс Person находится в том же файле, но при этом видно, что оно вообще ничего не знает ни про какие БД) данного подхода.
Да, можем. Можем вообще всю модель руками описать без единого аттрибута. См. DbModelBuilder
_>2. Не очень понял, можем ли мы в функции Main() просто сохранить в базу данных некий объект типа Person (вызовом типа db.Persons.AddOrUpdate(person);, как я понимаю)? И если можем, то зачем понадобилась отдельная функция вида Seed? В данном примере же это только лишнее усложнение...
Этот класс сгенерировался автоматически в студии. Ну, не совсем автоматически — нужна команда в консоли nuget. Этот код приведен, потому что я делал миграциями, что бы структуру базы самому не создавать, но ничто не мешает это делать прямо в main. См. code first, code first migrations.
_>3. Не увидел где указывается подключение к конкретной базе данных.
В конфиге. Естественно у DbContext есть конструктор, принимающий строку подключения.
ХГД>>То есть жабаскрипт, получаемый как из джавы, так местами уже и из кофескрипта. Но это на клиенте, а речь шла о серверной части.
НС>Тогда к чему ты GWT приплел? ASP.NET это серверная технология.
Я тебе просто объяснял, как у меня чего работает. Чтобы было понятно, почему там нужен C++ и почему он же достаточен.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Хон Гиль Дон, Вы писали:
ХГД>Все это изначально было сделано на С++, с соответствующим GUI. Не бог весть какой сложности задача. Потом часть научили работать в браузере.
Я не очень понимаю, что значит, все уже было сделано. Вот например авторизация, как она была сделана?
Здравствуйте, Хон Гиль Дон, Вы писали:
ХГД>Я тебе просто объяснял, как у меня чего работает.
Ну то есть сперва ты нас убеждал, что писать веб-часть надо на С++,, а потом оказалось что сам ты своему совету не следуешь. Тамк что у тебя там на С++ написано? REST сервис?
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Ну то есть сперва ты нас убеждал, что писать веб-часть надо на С++,, а потом оказалось что сам ты своему совету не следуешь.
Я убеждал, что для серверной части веб-приложений в ряде случаев С++ — то, что надо. Не более и не менее.
НС>Тамк что у тебя там на С++ написано? REST сервис?
Угу, веб-морда к числомолотилке.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Хон Гиль Дон, Вы писали:
НС>>Тамк что у тебя там на С++ написано? REST сервис? ХГД>Угу, веб-морда к числомолотилке.
Вообще то большинство под веб-мордой понимает вовсе не REST-сервис. Сама морда у вас на java/js, а вовсе не на С++. Если бы ты сразу об этом написал, никто возражать не стал бы.
Здравствуйте, genre, Вы писали:
ХГД>>Все это изначально было сделано на С++, с соответствующим GUI. Не бог весть какой сложности задача. Потом часть научили работать в браузере.
G>Я не очень понимаю, что значит, все уже было сделано.
Ну чего непонятного. 10 лет назад начали разработку клиент-серверного приложения. И сервер, и клиенты — на С++. Все необходимая функциональность была реализована, естественно, на С++. Лет пять назад некоторым клиентам захотелось иметь доступ к кое-каким функциям через веб. Ну вот приделали еще и веб, с максимальным использованием уже написанного кода.
G>Вот например авторизация, как она была сделана?
Что значит "как"? Какой уровень детализации интересует? Если я напишу "ручками", это достаточно понятно? Или надо больше подробностей — ну там что перед вызовом методов объектов, права доступа к которым должны контролироваться, делается вызов каких-то функций, кидающих исключения в случае нехватки прав? Обертки, которые это проверяют, расписать в красках? Или что?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
НС>>>Тамк что у тебя там на С++ написано? REST сервис? ХГД>>Угу, веб-морда к числомолотилке.
НС>Вообще то большинство под веб-мордой понимает вовсе не REST-сервис. Сама морда у вас на java/js, а вовсе не на С++. Если бы ты сразу об этом написал, никто возражать не стал бы.
Пардон, не внимательно прочитал вопрос. На С++, да, REST сервис.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, _Raz_, Вы писали:
_R_>Да, можем. Можем вообще всю модель руками описать без единого аттрибута. См. DbModelBuilder
А можно увидеть пример (скажем на базе того же Person) или это будет длинный код?
_R_>Этот класс сгенерировался автоматически в студии. Ну, не совсем автоматически — нужна команда в консоли nuget. Этот код приведен, потому что я делал миграциями, что бы структуру базы самому не создавать, но ничто не мешает это делать прямо в main. См. code first, code first migrations.
Просто из-за этого пример выглядит существенно сложнее — не ясно обязательно ли нужен этот дополнительный класс или нет? И насколько объёмный код без него будет. Трудно сравнивать с C++ аналогом...
_R_>В конфиге. Естественно у DbContext есть конструктор, принимающий строку подключения.
Я как-то так и думал, но опять же без этой строки пример выглядит немного отличающимся (кроме этого файла исходников требуется ещё что-то) от C++ варианта.
Здравствуйте, Хон Гиль Дон, Вы писали:
ХГД>Ну чего непонятного. 10 лет назад начали разработку клиент-серверного приложения. И сервер, и клиенты — на С++. Все необходимая функциональность была реализована, естественно, на С++. Лет пять назад некоторым клиентам захотелось иметь доступ к кое-каким функциям через веб. Ну вот приделали еще и веб, с максимальным использованием уже написанного кода.
Дьявол в словах "кое-каким". Ну и так и осталось непонятным было ли это решение дешевле.
Здравствуйте, alex_public, Вы писали:
_>А можно увидеть пример (скажем на базе того же Person) или это будет длинный код?
modelBuilder.Entity<Person>().Ignore(t => t.Runtime);
_R_>>Этот класс сгенерировался автоматически в студии. Ну, не совсем автоматически — нужна команда в консоли nuget. Этот код приведен, потому что я делал миграциями, что бы структуру базы самому не создавать, но ничто не мешает это делать прямо в main. См. code first, code first migrations.
_>Просто из-за этого пример выглядит существенно сложнее — не ясно обязательно ли нужен этот дополнительный класс или нет? И насколько объёмный код без него будет. Трудно сравнивать с C++ аналогом...
Нет, не обязательный. См. выделенное. Мне было так удобней, но можно и как у тебя. Добавиться только строка db.SaveChanges().
_>Я как-то так и думал, но опять же без этой строки пример выглядит немного отличающимся (кроме этого файла исходников требуется ещё что-то) от C++ варианта.
Ну а ты чего хотел? Разные фреймворки все-же, на разных языках. Хочешь строчки считать? Это не ко мне. Я ясно показал, что есть штатная возможность легко ислючить свойство из маппинга.
Здравствуйте, genre, Вы писали:
ХГД>>Ну чего непонятного. 10 лет назад начали разработку клиент-серверного приложения. И сервер, и клиенты — на С++. Все необходимая функциональность была реализована, естественно, на С++. Лет пять назад некоторым клиентам захотелось иметь доступ к кое-каким функциям через веб. Ну вот приделали еще и веб, с максимальным использованием уже написанного кода.
G>Дьявол в словах "кое-каким".
В смысле — дьявол? Ну не понадобилось пока все в веб утаскивать, денег за это никто не заплатит. Какая разница, что именно сделали в вебе, а что — нет?
G>Ну и так и осталось непонятным было ли это решение дешевле.
Ну, более дешевых пока никто не предложил Особенно учитывая, что применение того же ASP.NET потребовало бы, как минимум, выплаты гонорара юристу, который бы разобрался в вопросах лицензирования
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Хон Гиль Дон, Вы писали:
ХГД>В смысле — дьявол? Ну не понадобилось пока все в веб утаскивать, денег за это никто не заплатит. Какая разница, что именно сделали в вебе, а что — нет?
Огромная разница. Дописать к существующей системе простенькую веб-странику или полноценный сайт.
ХГД>>В смысле — дьявол? Ну не понадобилось пока все в веб утаскивать, денег за это никто не заплатит. Какая разница, что именно сделали в вебе, а что — нет?
G>Огромная разница. Дописать к существующей системе простенькую веб-странику или полноценный сайт.
Напомню — я изначально говорил лишь о применимости С++ для некоторых конкретных условий, ничего не утверждая о масштабности приложения. Но вообще у нас GWTшных и флэшевских исходников мегабайт 30-40, если это кому-то интересно.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.