ASP.NET MVC и HTML5 JavaScript Практика данных - PullRequest
2 голосов
/ 06 декабря 2011

Я пытаюсь найти лучший способ разместить данные на своих веб-страницах для использования в 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 #, которые сохраняются.

...