假設我有一個班級來模擬一個城市。它的特徵如下:MVC是否打破封裝?
- 它只有兩個屬性「name」和「population」,都是私有的,它們在構造函數中設置。
- 它有這些屬性的getters,但不是setter。
我不希望這個類的任何用戶設置屬性,我希望他們使用公共的.edit()方法。
這種方法需要打開一個表格輸入城市和人口的新名稱,即:一個視圖。然後,如果我有一個視圖,我想實現MVC模式,所以想法是控制器接收.edit()調用,呈現視圖,檢索數據並將其發送到視圖,以便它改變了它的狀態。
但是,如果我這樣做,我必須將城市模型的屬性從私有變爲公共。所以,如果任何用戶實例化我的課程,她/他可以直接更改屬性。
所以,哲學問題:是不是打破封裝?
編輯只是爲了使其更加明確:
這city_instance.edit()
方法應該是變異對象的唯一途徑。
此外,我看到我的部分問題來自於對模型是對象的誤解(您可以在php mvc框架中閱讀它),實際上它是一種不同的抽象,它是一個將業務邏輯(域對象+我想更多的東西)
您是否看到http://programmers.stackexchange.com/questions/168316/isnt-mvc-anti-oop? – 2013-03-14 16:37:02
控制器不應該從視圖中接收到2個值,然後將它們放在.edit()方法中作爲參數嗎? – JeffO 2013-03-14 20:39:32