2009-07-10 40 views
0

我是編程新手(現在6周)。我現在正在閱讀很多書籍,網站和博客,並且每天都會學到新的東西。豆類,方法,訪問和更改?推薦的處理方法是什麼(即在ColdFusion中)?

現在我正在使用coldfusion(job)。我已經閱讀了許多網頁上的oop和cf相關文章,並且我打算在下一步進入mxunit,然後看看一些框架。

一件事困擾着我,我無法找到一個滿意的答案。豆有時被描述爲DataTransferObjects,它們持有來自一個或多個來源的數據。

處理這些數據的建議做法是什麼?

我應該使用一個單獨的對象來讀取數據,對它進行變異並將其寫回到bean中,以便該bean只是一個數據存儲(可通過getter訪問),還是應該實現方法來操作數據在bean中。

我看到兩個選項。
1.該bean只是存儲,其他對象必須對其數據做些什麼。
2.該bean是存儲和邏輯,其他對象告訴它對數據做些什麼。

第二個選擇似乎對我更加遵循封裝,而第一似乎是豆的使用方式。

我相信這兩個選項滿足某人的需要,並在特定的語境中建議,但什麼是一般的建議,尤其是當有人不知道有足夠的瞭解的更大的應用程序的圖片,是一個初學者?

例如:
我已經創建了一個bean,它包含一個來自數據庫的Item,其中包含項目ID,名稱和1d數組。每個數組元素都是一個結構,用於保存用戶的id,其名稱和項目數量。通過一個getter我在表格中輸出數據,我也可以改變每個用戶的數量或者檢查用戶從這個項目中刪除。

我在哪裏放來處理應用程序的用戶輸入的邏輯是什麼?
我是否告訴bean根據用戶輸入更改其數組?
或者我創建一個對象來改變數組並將新數組寫入bean中? (所有的數據庫訪問(CreateReadUpdateDelete)都是通過一個DataAccessObject來處理的,該DataAccessObject獲取bean作爲參數,DAO還包含一個從數據庫讀取多條記錄的網關方法,我使用這個方法得到一個表項目,我可以點擊創建bean和它的數據。)

回答

1

您看到的是一些被稱爲"anemic domain model"。是的,這很常見,不,這不是很好的OO設計。一般來說,邏輯應該與它所操作的數據一致。

然而,也有不少世界separation of concerns事 - 你不想要的一切東西進入的領域模型。例如,數據庫訪問通常被認爲是一個技術上獨立的層,而不是域模型本身應該做的事 - 看起來你已經有了這種分離。究竟應該和不應該成爲領域模型的一部分取決於具體案例 - 好的設計不能真正用絕對規則表達。

另一個問題是通過網絡傳送的模型,例如,應用服務器和Web前端之間。您希望這些僅包含數據本身,以減少badnwidth使用和延遲。但這並不意味着它們不能包含邏輯,因爲方法不是序列化對象的一部分。派生字段和緩存是 - 但它們通常可以以某種方式標記爲暫時的,以便它們不被傳輸。

1

你的bean應該包含你的數據和邏輯。

數據傳輸對象用於通過網絡傳輸對象,例如從ColdFusion到瀏覽器中的Flex應用程序。 DTO僅包含對象數據的相關字段。

在可能的情況下,您應儘量減少將bean的內部實現(例如用戶結構數組)暴露給其他對象。要更改數組,您應該直接在bean上調用mutator函數,例如yourBean.addUser(user),它將用戶結構附加到內部數組。

不需要爲組合的網關對象創建單獨的DAO以便進行數據訪問。只需將所有數據庫訪問方法(CRUD和表查詢)放入單個網關對象即可。

+0

我沒有一個網關對象,只是一個額外的方法在我的dao內(在我看來)接管了網關對象的一部分(在我的情況下查詢數據庫以獲取我想要的所有記錄能夠進一步工作) – mrt181 2009-07-11 21:48:58

相關問題