我來自OOP背景,因此一直在尋找建模我的解決方案的最佳方法;我想提出兩種不同的僞造設計,並問哪種更好;特別是在基於MVC的Web應用程序中。代碼是僞代碼和用例,所以我如何解決業務問題並不是真正的導入;只有設計的風格。Web應用程序中的服務層 - 我應該隱藏服務對象嗎?
經典服務界面風格
//create the page, a valid user needs to
CustomPage page = pageService.createCustomPage(session.getUser(), aDocument, "my page", "my content");
page.setLayout(Layout.NORMAL); //set the page layout
page.setPublished(true); //set it to publish
pageService.save(session.getUser(), page); //actually persist new layout and publish
替代隱藏的服務風格
//create a page editable by the user
CustomPage page = pageService.createCustomPage(session.getUser(), aDocument, "my page", "my content");
page.setLayou(Layout.NORMAL); //changes the layout
page.publish(); //publishes the page
的主要區別是,在經典的款式,CustomPage
是一個愚蠢的對象。它只保留屬性,並可能基於屬性值的一些基本行爲。除非與服務一起使用,否則擁有對象本身的實例是無用的。在另一種風格中,CustomPage
擁有對服務和當前正在編輯它的用戶的隱藏引用。所以當我publish()
對象可以做它自己的事情,以及調用事務方法。
經典風格的明顯優勢是您可以安全地使用CustomPage
作爲模型,用戶更改內容時不會嘗試調用任何事務性方法,而使用替代方法時您需要使用命令對象收集用戶輸入,然後將其應用於對象。但是,這種替代方法使開發人員不那麼複雜。 page.publish()
實際上發佈了該頁面,如果我們想知道用戶是誰,我們不需要再提供它。
這兩種方法都好還是壞?有什麼好的資源可以閱讀,討論這些類型的設計和權衡?