Я пытаюсь найти лучший способ разместить данные на своих веб-страницах для использования в JavaScript.
Большая часть моего опыта - это использование настольных компьютеров в .Net (WPF и т. Д.).
Технология :
В настоящее время я использую ASP.NET MVC3.У меня есть куча моделей бизнес-уровня.Эти модели иногда могут иметь интересные отношения.Мне нужно перенести эти модели на клиент и сделать с ними что-то в JavaScript, а затем отправить их обратно на сервер для настойчивости и другой бизнес-логики.
Значения ядра :
Я хотел бы найти решение, которое минимизирует связывание, минимизирует дублирование кода / функциональности, поддерживает разделение проблем и легко обслуживается (понятно, IEзная, где что изменить и т. д.).
Есть несколько способов справиться с этим, о которых я подумал.Кажется, что и то, и другое не хватает.
Вариант 1 :
Создайте версии JavaScript моих моделей, которые я назову JavaScript View Models (JSVM).эти JSVM создаются с помощью вызовов Ajax.JSVM сопоставляются с созданными объектами JavaScript на основе моделей на стороне сервера.Это означает, что где-то существует «класс» «Map», который обрабатывает сопоставление с этими двумя моделями (для снижения связи и поддержания SoC).
Даунсайд, много дублирования кода.Когда вы изменяете JSVM или модель на стороне сервера, вам может потребоваться изменить этот «класс» отображения.
Похоже, это решает только некоторые из моих проблем.
Вариант 2 :
Я нашел библиотеку под названием "FluentJson.Net".Это в основном позволяет мне создавать knockoutjs JavaScript объекты из встроенной бритвы.Оттуда я могу просто кодировать этот динамически создаваемый объект.Нет необходимости создавать JSVM.
Недостаток, Очень сильная связь с моделью на стороне сервера.Изменение в модели на стороне сервера может привести к необходимым изменениям на нескольких страницах!
Вероятно, есть несколько комбинаций варианта 1 и варианта 2, которые я мог бы изучить, но я предполагаю, что все они будут иметь недостатки.
Вопросы :
Что я действительно хотел бы знать, так это: каковы лучшие методы работы с моделями на сервере и клиенте?Есть ли решение, которое поддерживает мои основные значения?
(Изменить: добавлен следующий пример)
ПРИМЕР :
C # Модели :
public interface IChartDefinition{
string Name{get; set};
IEnumerable<IChartSeries> Series {get; set;}
}
public interface IChartSeries{
Color Color{get; set;}
Name {get; set;}
}
На сервере это определение определяет базовую диаграмму.Это определение диаграммы сохраняется в базе данных, а затем может быть извлечено и использовано с реальными данными для отображения диаграммы на клиенте.
У меня есть контроллер с именем "ChartDesignerController", и его основная функция - позволить людям управлятьих определения диаграмм.
Итак, у меня есть представление для вызова Create для создания определения диаграммы.На мой взгляд, я хочу кнопку +, чтобы добавить серию.по мере добавления серии, я хочу, чтобы пользовательский интерфейс отображал параметры серии, такие как цвет и имя.Пользователь может удалить серию и т. Д.
Все это взаимодействие выполняется с использованием javascript для базовых объектов javascript, которые содержат эти данные, пока конечный пользователь не нажмет кнопку отправки и не отправит эти данные обратно на сервер для сохранения.
Эти объекты javascript будут выглядеть почти идентично тем моделям C #, которые сохраняются.