Web应用程序允许用户挑选和选择用作构建块的对象?

时间:2011-08-17 18:22:40

标签: c# asp.net-mvc design-patterns caching user-interface

我目前正在使用ASP.NET MVC开发应用程序,现在我需要创建一个界面(网页),允许用户从一组不同的对象中挑选和选择他们喜欢的对象用作构建更复杂对象的构建块。

我的问题应该是通用的,但是为了提供实际的例子,让我们说应用程序将允许用户设计家具,如衣柜,厨柜等。所以,我创建了C#类代表家具设计的基本构建块,如基本形状(加在一起形成一个盒子的木块等),门,门把手,抽屉等。这些类中的每一个都有一些共同的属性(宽度,高度,长度)和一些特定的属性,但都来自一个名为FurnitureItem的基本类,因此有一些方法可以将它们“连接”在一起并互换。例如,有不同类型的门可用于衣柜......如SimpleDoor,SlidingDoor等。设计家具的用户必须选择适用于当前家具的门对象类型。此外,还有其他项目,如分隔板,架子,抽屉等。例如,最终的模型将是一个完整的定制模块化设计的衣柜或厨柜。

问题在于,虽然我可以轻松地实例化我需要的所有对象并使用C#将它们连接在一起,形成一个完整的家具项目,但我需要为用户提供一种使用Web界面进行操作的方法。这意味着,他们可能会有某种工具箱或工具栏,并在Web界面中选择(可能是拖放)项目到设计面板......所以,在浏览器中我不能拥有我的C#类实现。 ..如果我将所选项目发布到服务器(表单帖子或使用ajax),我需要重建之前已由用户选择的整个对象集合,因此我可以适应新添加的项目..并计算它的尺寸等,然后最终返回完整修改过的一组对象......

我正在尝试考虑不同的缓存方式,或者在用户仍在设计(添加和删除项目)时保留这些对象,因为可能有很多往返服务器,因为正确计算了维度(宽度)包含对象的高度等,是通过我的C#类的方法在服务器上完成的。如果为每个用户在会话对象或缓存对象中设计的currrent家具存储对象会很好...即使这样我也需要能够为要添加的对象提供某种类型的ID,并将其添加到,在父级所有者的方式,所以我可以正确识别新实例将连接到的服务器中的对象实例。

我知道这有点令人困惑......但我希望这能让我对我面临的问题有所了解......换句话说,我需要在服务器中保留一组互连的对象,因为它们负责计算并应用一些约束,同时允许用户通过Web界面操纵每个对象及其连接方式,添加和删除它们。所以最后,整个事情可以保存在数据库中。理想我甚至想要给用户一个可视化的表达或反馈,这样他们就可以看到他们在设计时的设计......

最后,问题更多的是我应该采取什么方法来解决这个问题。 C#类在服务器中是否足够(封装计算并可能将每个自己的图形表示生成回客户端)?我是否需要在javascript中创建类似的类以允许更流畅的用户体验?如果我设法在请求之间保持会话或缓存对象中的对象存活,会更容易吗?或者我应该在每次用户交互时再次实例化形成整个家具的所有对象(用于计算)?在这种情况下,我每次都必须发布所有对象和所有已经定制的属性?

非常感谢任何关于如何最好地解决这个问题的想法或想法......

谢谢!

2 个答案:

答案 0 :(得分:4)

从你描述的方式来看,这就是我想象的:

  1. 听起来你确实想要一个漂亮的UI,所以是的,你要把你的逻辑分成两组;用于构建的客户端集和用于验证的服务器端集。我会对javascript感到厌烦,以便用户可以愉快地构建他们的小部件,然后在发布到服务器后验证所有内容。
  2. 保存到会话会打开一整套webfarm蠕虫。如果这些小部件可以在不到一分钟内重新创建(一旦他们决定了他们喜欢的东西),我就会避免将部分内容保存在一起。如果它绝对必要,我会将它们保存到数据库中。
  3. 如果构建窗口小部件的对象数量合理,那么它可能会立即生效。但是,如果有数百种类型的“门”,您将需要考虑异步调用来加载它们,并可能进行分页/排序。
  4. 我对你最后一部分关于实例化/发布构成整个家具的所有对象感到困惑。这不应该是必要的。我想用户会在他的客户端上进行构建,然后将一个小部件对象传递给服务器进行验证。
  5. 这就是我在想的......顺便说一下,你好StackOverflow,这是我的第一篇文章。

答案 1 :(得分:1)

您可能需要查看Backbone.js这类项目。它允许您创建非常适合您的问题域的客户端模型,集合,视图和控制器。它包含内置的Ajax代码,用于从服务器加载/保存这些模型/集合。

至于在将完整对象发送到服务器之前存储对象,您可以使用localStorage,并将对象数据存储为JSON字符串。