我目前正在使用ASP.NET MVC开发一个应用程序,现在我需要创建一个界面(网页),它将允许用户从一组不同的对象中挑选,这些对象是他们想要用作构建更复杂对象的构建块。
我的问题应该是通用的,但为了提供实际的示例,假设应用程序将允许用户设计家具,如衣柜、厨房橱柜等。因此,我创建了代表家具设计的基本构建块的C#类,如基本形状(拼接在一起形成盒子的木块等)、门、门把手、抽屉等。这些类中的每一个都有一些共同的属性(宽度、高度、长度)和一些特定的属性,但所有这些类都来自一个名为FurnitureItem的基类,所以它们可以“连接”在一起,并相互交换。例如,有不同类型的门可以在衣柜中使用...比如SimpleDoor、SlidingDoor等等。设计家具的用户必须选择应用于当前家具的门对象的类型。此外,还有其他物品,如分隔板,架子,抽屉等。当然,最终的模型将是一个完全定制的模块化设计的衣柜或厨房橱柜,例如。
问题是,虽然我可以很容易地实例化我需要的所有对象,并使用C#将它们连接在一起,形成一个完整的家具项目,但我需要为用户提供一种使用web界面完成此操作的方法。这意味着,他们可能会有某种工具箱或工具栏,并在web界面中选择(可能拖放)项目到设计面板中……因此,在浏览器中,我不能让我的C#类实现...如果我将选定的项发布到服务器上(无论是表单发布还是使用ajax),我需要重新构建用户先前已经选择的整个对象集合,这样我就可以适应新添加的项……并计算其尺寸等,然后最终返回修改后的完整对象集……
当用户还在设计(添加和删除项目)时,我正在尝试不同的缓存或持久化这些对象的方法,因为可能会有许多到服务器的往返,因为尺寸(所包含对象的宽度、高度等)的正确计算是由我的C#类的方法在服务器上完成的。也许将当前设计的家具的对象存储在每个用户的会话对象或缓存对象中会更好……即使这样,我也需要能够以父所有者的方式为要添加的对象和要添加到的对象提供某种类型的ID,这样我就可以在服务器中正确地识别新实例将连接到的对象实例。
我知道这有点让人困惑。但我希望这能让我对我所面临的问题有一个概念。换句话说,我需要在服务器中保留一组相互连接的对象,因为它们负责计算和应用一些约束,同时允许用户通过web界面操作这些对象中的每个对象以及它们如何连接、添加和删除它们。因此,最后,整个过程都可以保存在数据库中。理想情况下,我甚至希望给用户一个直观的表示或反馈,这样他们就可以看到他们正在设计的东西…
最后,问题更多的是我应该采取什么方法来解决这个问题。服务器中的C#类足够了吗(封装计算,或者生成自己的图形表示返回给客户端)?我是否需要在javascript中创建类似的类来提供更流畅的用户体验?如果我设法在会话中保持对象的活动状态,或者在请求之间缓存对象,会不会更容易?或者我应该在每次用户交互时再次实例化构成整个家具的所有对象(用于计算)?在这种情况下,我必须每次都发布所有对象和所有已经自定义的属性?
任何关于如何最好地处理这个问题的想法或想法都是非常感谢的。
谢谢!
发布于 2011-08-18 03:10:42
从你描述的方式来看,这是我的设想:
不管怎样,我就是这么想的。顺便说一下,你好,StackOverflow,这是我的第一篇文章。
发布于 2011-08-18 03:18:39
你可能想看看这类项目的Backbone.js。它允许您创建非常适合您的问题域的客户端模型、集合、视图和控制器。它包括内置的Ajax代码,用于将这些模型/集合加载到服务器或从服务器保存这些模型/集合。
至于在将完整的对象发送到服务器之前存储对象,您可以利用localStorage,并将对象数据存储为JSON字符串。
https://stackoverflow.com/questions/7097578
复制相似问题