В настоящее время я занимаюсь разработкой приложения с использованием ASP.NET MVC, и теперь мне нужно создать интерфейс (веб-страницу), который позволит пользователям выбирать из множества различных объектов, которые им нравятсяиспользовать в качестве строительных блоков для построения более сложного объекта.
Мой вопрос должен быть общим, но для обеспечения реального примера, скажем, приложение, которое позволит пользователям проектировать предметы мебели, такие как шкафы, кухонные шкафы и т. д. Итак, я создал классы C #, представляющие основные строительные блоки дизайна мебели, такие как основные формы (кусочки дерева, которые складываются вместе, образуют коробку и т. д.), двери, дверные ручки, ящики и т. д. Каждый изу этих классов есть некоторые общие свойства (ширина, высота, длина) и некоторые специфические свойства, но все они происходят от базового класса, называемого FurnitureItem, поэтому есть способы их «связать» вместе и взаимозаменять.Например, есть разные типы дверей, которые можно использовать в гардеробе ... как SimpleDoor, SlidingDoor и так далее.Пользователь, проектирующий мебель, должен будет выбрать, какой тип объекта «Дверь» применить к текущей мебели.Кроме того, есть и другие элементы, такие как разделительные панели, полки, выдвижные ящики и т. Д. Получившаяся модель, конечно, будет представлять собой, например, полностью адаптированный модульно спроектированный шкаф или кухонный шкаф.
Проблема в том, что пока я могулегко создать экземпляры всех необходимых мне объектов и соединить их вместе с помощью C #, образуя законченный предмет мебели, я должен предоставить пользователям возможность сделать это с помощью веб-интерфейса.Это означает, что у них, вероятно, будет какой-то набор инструментов или панель инструментов, и они будут выбирать (возможно, перетаскивать) элементы на панель дизайна в веб-интерфейсе ... так что пока в браузере у меня не может быть реализации класса C #.... и если я отправляю выбранный элемент на сервер (либо в форме, либо с помощью ajax), мне нужно восстановить всю коллекцию объектов, которые уже были ранее выбраны пользователем, чтобы я мог уместить новый добавленный элемент ..... и вычислить его размеры и т. д., а затем окончательно вернуть полный измененный набор объектов ...
Я пытаюсь придумать различные способы кэширования или сохранения этих объектов, пока пользователь все еще проектирует (добавление и удаление элементов), поскольку на сервере может быть много циклических переходов, поскольку правильный расчет размеров (ширины, высоты и т. д. содержащихся объектов) выполняется на сервере методами моих классов C #.Может быть, было бы неплохо хранить объекты для текущей мебели, разрабатываемой в объекте сеанса или объекте кэширования для пользователя ... даже тогда мне нужно иметь возможность предоставить некоторый тип идентификатора для добавляемого объекта и того, который добавляется вв некотором роде, чтобы я мог правильно идентифицировать экземпляр объекта на сервере, к которому будет подключен новый экземпляр.
Я знаю, что это как-то сбивает с толку ... но я надеюсь, что это дает одинИдея проблемы, с которой я столкнулся ... Другими словами, мне нужно сохранить набор взаимосвязанных объектов на сервере, потому что они отвечают за вычисления и применяют некоторые ограничения, позволяя пользователям манипулировать каждым из этих объектов и какони связаны, добавляя и удаляя их через веб-интерфейс.В конце концов, все это можно сохранить в базе данных.В идеале я хочу даже дать пользователю визуальное представление или обратную связь, чтобы они могли видеть, что они проектируют, по мере продвижения ...
Наконец, вопрос скорее в том, какой подход я должен принять к этой проблеме. Достаточно ли классов C # на сервере (инкапсулируя вычисления и, возможно, генерируя каждый свое графическое представление клиенту)? Нужно ли мне создавать подобные классы в javascript, чтобы сделать работу пользователя более удобной? Будет ли легче, если мне удастся сохранить объекты в сеансе или кешировать объекты между запросами? Или я должен просто создать экземпляр всех объектов, которые образуют всю мебель снова при каждом взаимодействии с пользователем (для расчета)? В таком случае мне придется каждый раз публиковать все объекты и все уже настроенные свойства?
Будем весьма благодарны за любые мысли или идеи о том, как наилучшим образом решить эту проблему ...
Спасибо!