2017-04-07 48 views
1

我寫的使用核心數據的大多數應用程序都遵循常見模式 - 模型類繼承自NSManagedObject並通過插入到NSManagedObjectContext中創建。去耦核心數據

由於我評估了幾個上了一個新方項目不同的持久性選項,我很想找到一個方法來分離出從代碼的其餘部分的核心數據的實現。例如,我可能會使用使用協議定義的DataStore的概念。它要求任何實現提供某些功能。例如getCarsaddCardeleteCar。該應用程序不需要知道是否從核心數據,領域,本地文件等中獲取。

我遇到的一個核心數據實現DataStore的一個直接問題是,儘快Car加入作爲實體數據模型,我不能除了通過指定初始化,一個希望將上下文插入到創建Car對象。這顯然不會飛,因爲整個問題是要從各種視圖控制器和其他類中分離出NSManagedObjectContext等的任何知識。

我想使用一些其他的名字都是我的核心數據實體(例如,CDCar),然後從CDCarCar將用於映射到/一串代碼。或者可能爲應用程序中的通用Car制定協議,CDCar將符合該協議。有沒有更常見的方法呢?

+0

請記住,通過使用額外的層,像你的'Car'對象,你將失去最強大的CoreData機制,這是'斷層'特別是關係錯誤。在獲取'Car'時,您還需要獲取'Engine'實體,'Owner'實體等。您將不得不爲所有相關對象構建圖形。 – psci

+0

謝謝,是的,我沒有考慮到這一點。可能是一個交易破壞者。 –

回答

1

添加一個並行實體增添了不少複雜的,到現在還不清楚的是,去耦將是一個淨利益點。

我做的是包括在DataStore類工廠方法來創建按需實例。代碼直接創建Car而不是非DataStore代碼,它會在DataStore上調用新的createCar方法。 DataStore可以做任何事情來創建一個有效的實例並返回結果。這可能意味着你不需要addCar因爲你不會的DataStore之外創建實例。