2011-08-17 53 views
1

我目前正在開發一個使用ASP.NET MVC的應用程序,現在我需要創建一個接口(網頁),它將允許用戶從一組不同的對象中挑選並選擇他們想要的對象用作構建更復雜對象的構建塊。Web應用程序允許用戶選取用作構建塊的對象嗎?

我的問題應該是通用的,但是爲了提供實際的例子,我們假設應用程序允許用戶設計傢俱,比如衣櫃,櫥櫃等等。所以,我創建了C#類傢俱設計的基本組成部分,如基本形狀(加在一起形成一個盒子的木頭等),門,門把手,抽屜等。每個類都有一些共同的屬性(寬度,高度,長度)和一些具體的屬性,但都來自一個名爲FurnitureItem的基礎類,所以有辦法讓它們「連接」在一起,並互換。例如,可以在衣櫃中使用不同類型的門......如SimpleDoor,SlidingDoor等。設計傢俱的用戶必須選擇適用於當前傢俱的極其類型的門對象。此外,還有其他物品,例如分隔板,擱板,抽屜等。最終的模型當然是例如完全定製的模塊化設計的衣櫃或廚櫃。

問題是,雖然我可以輕鬆實例化所需的所有對象,並使用C#將它們連接在一起,形成一個完整的傢俱項目,但我需要爲用戶提供一種使用Web界面的方法。這意味着,他們可能會有某種工具箱或工具欄,並選擇(也許拖放)項目到設計面板,在Web界面中......所以,在瀏覽器中,我無法實現C#類的實現。 ..如果我將選定的項目發佈到服務器(表單帖子或使用ajax),我需要重建用戶以前已選擇的對象的整個集合,所以我可以適應新添加的項目。並計算它的尺寸等,然後最終返回完整的修改後的對象集合...

我試圖想出不同的緩存方法,或者在用戶仍在設計時保存這些對象(添加和刪除項目),因爲可能會有很多往返於服務器,因爲正確計算尺寸(包含對象的寬度,高度等)是通過我的C#類的方法在服務器上完成的。這將是很好,也許是存儲對象的設計當前會話對象或每個用戶的緩存對象...即使這樣我需要能夠提供某種類型的ID添加到對象和被添加到,以父母所有者的方式,所以我可以正確識別新實例將連接到的服務器中的對象實例。

我知道這在某種程度上令人困惑......但我希望這能給出我面臨的問題的一個想法......換句話說,我需要在服務器中保留一組互相連接的對象,因爲它們負責計算和應用一些約束,同時允許用戶通過Web界面操縱這些對象中的每一個,以及它們如何連接,添​​加和刪除它們。所以最後,整個事情可以堅持在數據庫中。理想情況下,我甚至希望給用戶一個視覺表示或反饋,以便他們可以看到他們正在設計什麼樣的東西...

最後,問題更多的是我應該採取什麼方法來解決這個問題。 C#類是否足夠在服務器中(封裝計算,並且可能會將它自己的圖形表示生成回客戶端)?我是否需要在JavaScript中創建類似的類以允許更加流暢的用戶體驗?如果我設法保持會話或緩存對象在請求之間保持活動狀態,會更容易嗎?還是應該在每次用戶交互(計算)時再次實例化形成整個傢俱的所有對象?在這種情況下,我將不得不每次都發布所有對象和所有已定製的屬性?

如何最好地處理這個問題的任何想法或意見是極大的讚賞...

謝謝!

回答

4

從你所描述的方式,這裏就是我設想:

  1. 這聽起來像你想要做一個漂亮的UI看這樣是的,你會想你的邏輯一分爲二套;一個用於構建的客戶端集合和一個用於驗證的服務器端集合。我會沉重的JavaScript,以便用戶可以愉快地建立他們的小部件斷開連接,然後一旦它被髮布到服務器驗證一切。
  2. 保存到會話將打開一整罐網蟲羣落蠕蟲。如果這些小部件可以在不到一分鐘的時間內重新創建(一旦他們確定了他們喜歡的內容),我會避免將所有部分一起保存。如果這是絕對必要的,我會將它們保存到數據庫中。
  3. 如果要構建小部件的對象數量合理,它可能會一次降下來。但是,如果有數百種'門'類型,你會想要考慮異步調用來加載它們,並且可能會進行分頁/排序。
  4. 我對你最後一部分關於實例化/張貼構成整個傢俱的所有對象感到困惑。這不應該是必要的。我想用戶會在他的客戶端上進行構建,然後將一個小部件對象傳遞給服務器進行驗證。

這就是我在想什麼......順便說一句,你好,StackOverflow,這是我的第一篇文章。

+0

+1 - 不錯的後期mddubs(tho先生配音聽起來還不錯:) - 哦,歡迎來到SO –

+0

保存到會話只有webfarm問題,如果你沒有狀態服務器,或者不持續你的會話信息在數據庫中。這些事情中的任何一件都可以解決這個問題。 –

+0

@jim - 謝謝! mr dubs確實有一個很好的戒指,但在這一點上,我致力於:) – mddubs

1

您可能想看看Backbone.js這類項目。它允許您創建非常適合問題域的客戶端模型,集合,視圖和控制器。它包含內置的Ajax代碼,用於從服務器加載/保存這些模型/集合。

只要在完整對象發送到服務器之前存儲對象,就可以使用localStorage,並將對象數據存儲爲JSON字符串。

+1

淘汰賽可能對此也有好處 –

+0

感謝Jason的回答,以及...從mddubs回答,我會真正研究一些更好的方法來創建更豐富的javascript層來幫助我完成此任務。我瀏覽了Backbone.js和Knockout,並將更深入地研究它們。 @nathan ...感謝您對Knockout的指示...... –

相關問題