Веб-приложение, позволяющее пользователям выбирать объекты, используемые в качестве строительных блоков? - PullRequest
1 голос
/ 17 августа 2011

В настоящее время я занимаюсь разработкой приложения с использованием ASP.NET MVC, и теперь мне нужно создать интерфейс (веб-страницу), который позволит пользователям выбирать из множества различных объектов, которые им нравятсяиспользовать в качестве строительных блоков для построения более сложного объекта.

Мой вопрос должен быть общим, но для обеспечения реального примера, скажем, приложение, которое позволит пользователям проектировать предметы мебели, такие как шкафы, кухонные шкафы и т. д. Итак, я создал классы C #, представляющие основные строительные блоки дизайна мебели, такие как основные формы (кусочки дерева, которые складываются вместе, образуют коробку и т. д.), двери, дверные ручки, ящики и т. д. Каждый изу этих классов есть некоторые общие свойства (ширина, высота, длина) и некоторые специфические свойства, но все они происходят от базового класса, называемого FurnitureItem, поэтому есть способы их «связать» вместе и взаимозаменять.Например, есть разные типы дверей, которые можно использовать в гардеробе ... как SimpleDoor, SlidingDoor и так далее.Пользователь, проектирующий мебель, должен будет выбрать, какой тип объекта «Дверь» применить к текущей мебели.Кроме того, есть и другие элементы, такие как разделительные панели, полки, выдвижные ящики и т. Д. Получившаяся модель, конечно, будет представлять собой, например, полностью адаптированный модульно спроектированный шкаф или кухонный шкаф.

Проблема в том, что пока я могулегко создать экземпляры всех необходимых мне объектов и соединить их вместе с помощью C #, образуя законченный предмет мебели, я должен предоставить пользователям возможность сделать это с помощью веб-интерфейса.Это означает, что у них, вероятно, будет какой-то набор инструментов или панель инструментов, и они будут выбирать (возможно, перетаскивать) элементы на панель дизайна в веб-интерфейсе ... так что пока в браузере у меня не может быть реализации класса C #.... и если я отправляю выбранный элемент на сервер (либо в форме, либо с помощью ajax), мне нужно восстановить всю коллекцию объектов, которые уже были ранее выбраны пользователем, чтобы я мог уместить новый добавленный элемент ..... и вычислить его размеры и т. д., а затем окончательно вернуть полный измененный набор объектов ...

Я пытаюсь придумать различные способы кэширования или сохранения этих объектов, пока пользователь все еще проектирует (добавление и удаление элементов), поскольку на сервере может быть много циклических переходов, поскольку правильный расчет размеров (ширины, высоты и т. д. содержащихся объектов) выполняется на сервере методами моих классов C #.Может быть, было бы неплохо хранить объекты для текущей мебели, разрабатываемой в объекте сеанса или объекте кэширования для пользователя ... даже тогда мне нужно иметь возможность предоставить некоторый тип идентификатора для добавляемого объекта и того, который добавляется вв некотором роде, чтобы я мог правильно идентифицировать экземпляр объекта на сервере, к которому будет подключен новый экземпляр.

Я знаю, что это как-то сбивает с толку ... но я надеюсь, что это дает одинИдея проблемы, с которой я столкнулся ... Другими словами, мне нужно сохранить набор взаимосвязанных объектов на сервере, потому что они отвечают за вычисления и применяют некоторые ограничения, позволяя пользователям манипулировать каждым из этих объектов и какони связаны, добавляя и удаляя их через веб-интерфейс.В конце концов, все это можно сохранить в базе данных.В идеале я хочу даже дать пользователю визуальное представление или обратную связь, чтобы они могли видеть, что они проектируют, по мере продвижения ...

Наконец, вопрос скорее в том, какой подход я должен принять к этой проблеме. Достаточно ли классов C # на сервере (инкапсулируя вычисления и, возможно, генерируя каждый свое графическое представление клиенту)? Нужно ли мне создавать подобные классы в javascript, чтобы сделать работу пользователя более удобной? Будет ли легче, если мне удастся сохранить объекты в сеансе или кешировать объекты между запросами? Или я должен просто создать экземпляр всех объектов, которые образуют всю мебель снова при каждом взаимодействии с пользователем (для расчета)? В таком случае мне придется каждый раз публиковать все объекты и все уже настроенные свойства?

Будем весьма благодарны за любые мысли или идеи о том, как наилучшим образом решить эту проблему ...

Спасибо!

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Из того, как вы это описали, вот что я представляю:

  1. Звучит так, как будто вы действительно хотите гладко выглядящий пользовательский интерфейс, так что да, вы захотите разделить свою логику на два набора; клиентский набор для построения и серверный набор для проверки. Я бы сильно напрягался на javascript, чтобы пользователь мог благополучно отключить свой виджет, а затем проверить все, как только он будет опубликован на сервере.
  2. Сохранение в сеансе открывает целую банку веб-фермерских червей. Если эти виджеты можно воссоздать менее чем за минуту (после того, как они определились с тем, что им нравится), я бы не стал сохранять частичные данные вместе. Хотя, если это абсолютно необходимо, я бы сохранил их в базе данных.
  3. Если количество объектов для создания виджета является разумным, все это может упасть сразу. Но если есть сотни типов «дверей», вы захотите рассмотреть асинхронные вызовы для их загрузки с возможной подкачкой / сортировкой.
  4. Я запутался в вашей последней части о создании / публикации всех объектов, которые образуют всю мебель. Это не должно быть необходимым. Я предполагаю, что пользователь будет делать свою конструкцию на своем клиенте, а затем передаст один объект виджета на сервер для проверки.

Это то, о чем я думаю в любом случае ... кстати, привет, StackOverflow, это мой первый пост.

1 голос
/ 17 августа 2011

Возможно, вы захотите взглянуть на Backbone.js для такого проекта. Это позволяет вам создавать клиентские модели, коллекции, представления и контроллеры, которые бы хорошо подходили для вашей проблемной области. Он включает встроенный Ajax-код для загрузки / сохранения этих моделей / коллекций на / с сервера.

Что касается хранения объектов до того, как весь объект будет отправлен на сервер, вы можете использовать localStorage и сохранять данные вашего объекта в виде строки JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...