gpt4 book ai didi

c# - Web应用程序允许用户选择用作构建 block 的对象?

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:58 25 4
gpt4 key购买 nike

我目前正在使用ASP.NET MVC开发应用程序,现在我需要创建一个界面(网页),该界面将允许用户从一组不同的对象中进行选择,这些对象是他们希望用作的对象。构建更复杂对象的基础。

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

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

我试图考虑在用户仍在设计(添加和删除项目)时进行缓存或保留这些对象的不同方式,因为可能会多次往返服务器,因为尺寸的正确计算(宽度,高度,等包含的对象)是在服务器上通过C#类的方法完成的。也许最好将要设计的当前家具的对象存储在每个用户的会话对象或缓存对象中……即使那样,我仍需要能够为要添加的对象提供某种类型的ID,而要向其中添加一个ID ,以父级所有者的方式进行,因此我可以正确地在服务器中识别出新实例将连接到的对象实例。

我知道这有点令人困惑...但是我希望这能给我一个我面临的问题的想法...换句话说,我需要在服务器中保留一组互连的对象,因为它们负责计算并应用一些限制,同时允许用户通过Web界面操作这些对象以及它们的连接方式,以及添加和删除它们。因此,最后,整个事情可以保存在数据库中。从概念上讲,我什至希望为用户提供可视化的表示或反馈,以便他们在进行过程中可以看到自己的设计...

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

非常感谢您对如何最好地解决此问题的任何想法或想法。

谢谢!

最佳答案

从您描述的方式来看,这是我的设想:


听起来您确实想要光滑的用户界面,所以是的,您需要将逻辑分为两组;一个用于构建的客户端集和一个用于验证的服务器端集。我会花很多精力在javascript上,以便用户可以愉快地断开其窗口小部件的连接,然后在将所有内容发布到服务器后对其进行验证。
保存到会话将打开一整罐Webfarm蠕虫。如果可以在不到一分钟的时间内(只要他们决定了自己喜欢的东西)就可以重新创建这些小部件,那么我将避免将部分代码保存在一起。如果绝对必要,我会将它们保存到数据库中。
如果构造窗口小部件的对象数量合理,则可以一次全部减少。但是,如果有数百种“门”,您将要考虑异步调用以加载它们,并可能进行分页/排序。
我对您最后一部分关于实例化/发布构成整个家具的所有对象感到困惑。这不是必须的。我想用户将在其客户端上进行构造,然后将单个小部件对象传递给服务器进行验证。


无论如何,这就是我在想的...顺便问一下,StackOverflow,您好,这是我的第一篇文章。

关于c# - Web应用程序允许用户选择用作构建 block 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com