2

在我正在重構的iOS應用程序中,我將Core Data用作主要持久層。我正試圖重構一個適當的MVC模式。不過,我一直試圖從UI中刪除NSManagedObject *對象,因爲我相信這些模型應該是關心持久層的。控制器是否應該知道iOS應用程序中的NSManagedObjectContext

如果我應該允許UI保留一個NSManagedObjectContext,或者如果模型應該維護一個用於檢索UI請求的信息的上下文,那麼我很努力地決定這種或那種方式,然後返回一個啞對象(而不是NSManagedObject )到UI。根據我的經驗,我傾向於讓模型知道所有的持久性來區分顧慮,但我也努力爲這種模式辯護。

有人能幫助我理解我應該做什麼,爲什麼?

+0

你在這種情況下是什麼意思?常見的模式是將NSManagedObjectContext傳遞給UIViewController。從那裏你可以使用NSManagedObjects本身在你的視圖上設置屬性。控制器(UIViewController)正在管理模型層和視圖(UIViewController的視圖)之間的橋樑。 – 2012-02-04 00:24:28

回答

0

經過多次思考,閱讀和其他審查,我決定控制器意識到上下文是可以接受的。上下文可以或多或少地用作模型,只要視圖邏輯不知道它,那麼它就不會違反MVC。我個人寧願將上下文保留在服務層下面,而且我儘量讓它們保持在地下,但使用UI管理的對象上下文具有很大的便利性;只要確保你瞭解成本。

0

概念上,NSPersistanceStoreCoordinatorNSManagedObjectContexts的堆棧,作爲NSManagedObjects的圖表。您可以並應該使用多個託管對象上下文來執行UI中的任務,以便從後臺計算中分離出來。這將防止由於不同線程共享相同的NSManagedObjectContext造成的死鎖。

當將信息保存到兩個獨立的NSManagedObjectContext中時,您需要將更改合併到其他線程上下文中。

- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification 

摘自「核心數據編程指南」的部分內容。 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/CoreData.pdf

+0

這是否回答您的問題? – MobileOverlord 2012-02-07 19:40:58

+0

不,它沒有。我知道如何在線程中使用多個上下文並分配工作,但是我有一個強大的問題,即在控制器級別的領域知識。將上下文置於UI抽象中似乎是一種非常糟糕的模式。 – 2012-04-12 14:13:37

相關問題