所以這個問題是從這裏(how to deal with multiple event args)的一種跟隨。這個問題引導我思考這個問題,但是有足夠的差異來證明自己的觀點。設計問題/應用結構和問題分離
我正在創建一個遊戲(用於娛樂和學習的目的),並想知道我是否使用了很好的設計標準。我想我可能已經在關注問題上進行了OTT,或者只是把事情弄錯了,但我希望事實並非如此。我沒有問題,因爲我想學習「最佳實踐」及其實際應用。
編輯
讓我解釋一下關於遊戲,它是基於碎石機上很多手機(quick demo found here)發現了一個遊戲。目標是選擇分組中的球來將他們從比賽中移除並獲得儘可能多的分數。
我想擴大一點,有不同類型的棋盤,球以不同的方式移動,以及不同的球類型,球可能會在他們被告知的地方,或者他們可能會沿途做一些事情。
因此,這裏是我所創建的對象的結構,最上面一行顯示了DLL與他們的對象,第二行顯示了這些對象的引用:
alt text http://lh3.ggpht.com/_eoaz2oX5m6U/SypiyjHGQoI/AAAAAAAAAUo/2geWlqNHqbs/structure.jpg
這是我在做UML嘗試:
alt text http://yuml.me/3279d2ac
Click here to link to full page for UML, makes it a little larger and hopefully easier to read
對象DLL包含在遊戲中使用的基本對象,球和棋盤。它們不包含任何關於它們如何對情況採取行動/反應的邏輯(球執行CompareTo和Equals方法)。可能有X個IBall的實現(IBoard也是如此,儘管我不會想象那麼多)。
InstanceManager DLL用作創建對象的一種方式,不確定這是否是100%需要它可能已經在對象DLL中。工廠是具有各種重載方法來創建IBall對象的靜態類。 BallFactory可以採用BallType Enum,Drawing.Color對象等。BoardFactory非常相似。 Jawbreaker是一個單例對象,處理諸如持有隨機對象(Random Object)這樣的事情,因爲它經常使用,還有一些GameConfiguration數據(與本主題不太相關)。
引擎DLL是大部分工作發生的地方。 LogicFactories採用BallType和BoardType對象來創建相關的邏輯對象。邏輯對象用於控制IBall和IBoard對象的工作方式。 BallLogic告訴球在事件發生時它可以做什麼。例如,當選擇一個Ball時,Ball Logic會調用一個方法來說明Y板上的Ball X已被選中。球可以做任何類型的球應該/可以做的事情。 BoardLogic非常相似,涉及董事會的行爲。
引擎對象是另一個單例,並且GUI將如何與整個遊戲進行交互。 GUI不會直接實例化任何其他對象。
因此,總結IBall和IBoard類只保存關於它們的數據,邏輯類處理所有功能。
我想知道的是:
1)這是一個明智的做法?
2)應該(通常)邏輯與對象/數據分開嗎?
3)我是否過分注意分離?
4)關於設計/結構的任何其他註釋
EDIT
我已經使用了幾個單身的原因部分是用於訪問在一個地方的數據的簡單不保持對象的保持所有的時間,也只是因爲它是一個單一的遊戲,不會擴展到高端或跨多臺機器。我明白,他們不是很好,也不是我經常使用的東西,但欣賞評論。
感謝您的意見和反饋。
儘管您對設計的解釋很明確,但我認爲如果您將設計作爲UML類圖(比如說),則可以更清楚地瞭解您的消息。在閱讀文本時,我必須精神上不斷繪製箭頭,以瞭解所有這些類如何相互作用。 – sateesh 2009-12-17 17:09:58
非常好的一點,今晚將做到這一點,儘快把它放好。謝謝Sateesh – Jon 2009-12-17 17:11:44
看看Visual UML或Netbeans UML,它會幫助你設計出uml的類。 – monksy 2009-12-17 17:16:28