0

我很難弄清楚這種應用程序的正確架構:它是一種類似MS Visio的圖表應用程序。這些圖用於生成傳遞給另一個應用程序的數據。以用戶界面爲中心的應用程序的分離演示

在設計應用程序時,我一直試圖使用分層,但現在當數據與演示緊密結合時,我無法決定如何做到這一點。例如,畫布中的某個對象具有(X,Y)數據,僅用於演示目的,但必須像域數據一樣存儲。

我哪裏錯了?我很確定我從錯誤的角度看待這個問題,但我找不出合適的解決方案。

再次感謝!

UPDATE:

我也知道,也許我不應該在這種情況下被分離域UI。如果是這樣,請給我一些關於什麼時候應用分離和什麼時候不分離的理由。

回答

2

在一個圖表工具中,形狀的x/y位置是域數據的一部分(形狀的位置是圖的一部分 - 如果沒有它,不能繪製圖),使用這些x/y座標並在屏幕上繪製一個形狀是表示層的一部分。

我知道一些人認爲僅用於顯示的數據應該單獨保存,但是在我曾經分別保存的每個項目中分別保存的數據,這成爲一個巨大的維護和支持的噩夢。

在一個簡單的圖表工具中(如果該工具只是繪製和編輯圖表而沒有基於圖表的任何奇特處理)就沒有業務邏輯,只有繪製和編輯圖表的代碼(屬於演示文稿層)和圖數據(即域模型)。

如果沒有業務邏輯,通過使用單獨的一組對象來進行域和表示,您將不得不復制所有模型數據兩次(一次在模型對象中,一次在演示文稿對象中)從業務邏輯與演示分離中獲得任何優勢(因爲沒有)。另一方面,如果你確實有一些算法運行在數據上,你可以通過從圖形代碼中分離圖形數據來獲得某些東西 - 你可以在算法之外運行算法,你可以有更好的自動化測試等

也如果編寫上至少可以共享模型定義和保存/加載代碼,如果你從圖代碼中分離它相同的數據進行操作的另一系統。

所以,讓我們總結一下:

  • 所有圖表數據模型(包括僅用於演示目的,數據)的一部分。

  • 繪製到屏幕或處理用戶輸入的任何內容都在表示層(顯然)中。

  • 如果這兩個覆蓋了您的代碼和數據,而不是您的應用程序,那麼您的應用程序就沒有任何「業務邏輯」,並且層間隔可能過大。

  • 如果您有任何代碼不符合這兩個類別,並且您認爲它應該是模型的一部分,那麼應該構建兩個單獨的層。

  • 如果系統之間有代碼共享的機會,你應該確保共享代碼沒有與表示代碼混合在一起。

  • 還有最後一個「獎勵」要點 - 如果這是一個長期積極開發並且未來增加新功能的項目 - 您可能需要分離UI /數據,以便製作未來的工作更容易 - 你必須決定這個未來的儲蓄是否值得現在的額外時間,以及這種分離是否真的有可能在未來有所幫助。

+0

我害怕賞金會在沒有任何我想要的答案的情況下結束。另一個答案很好,我把它提高了,但它並沒有解開我心中的結。您的意見是:繪製形狀的代碼是演示文稿,形狀本身就是域。 此外,隨着詳細程度的提出,答案是非常值得的賞金。非常感謝您的幫助。 – 2010-07-12 18:28:03

0

你可以試着實現某種視圖模型,它保存了你的對象的當前佈局。這樣,x/y值與對象的id一起存儲在佈局文件中,而純模型數據存儲在別處。

也許這有點幫助,

1

我認爲你需要確保你保持什麼以及如何獨立。你所展示的是抽象的,座標集合,形狀類型。你如何顯示它非常具體。我會確保域模型純粹處理什麼和視圖層是如何處理的。儘管不瞭解您的應用程序,但很難進入具體細節。

相關問題