0

我設計命名爲ContactInfoEntity有一個NSString財產,contactInfoEntityType的對象,容器對象,屬性,存儲基於性能的任意數量的上它的contactInfoEntityType在運行時用戶定義數量的附加屬性的對象的NSMutableDictionary?

目標是讓用戶能夠在運行期間定義新的ContactInfoEntityType

現在,我在ContactInfoEntityType中使用了一個NSMutableDictionary,它有一個鍵:@「typeName」的值:@「Generic」。

要定義一個新的ContactInfoEntityType,我更改鍵的值:@「typeName」並添加新鍵:@「newPropertyName1」,@「newPropertyName2」,...以NSDicts作爲值。嵌套字典的鍵是這樣的:@「defaultValue」,@「index」,@「formatToken」,...

[ContactInfoEntityFactory contactInfoEntityOfType:emailInfoEntityType];發送時,工廠獲取NSMutableDictionary的@「emailInfoEntityType」作爲值因爲它是@「typeName」鍵,並且看到有三個額外的字典條目:@「domain」,@「localPart」和@「emailNickname」。

它然後創建一個@其ContactInfoEntity contactInfoEntityType是「emailInfoEntityType」和性能容器有三個條目與相關defaultValues。

現在我的屬性容器是一個NSArray和一個NSMutableArray。 NSArray包含newPropertyNames,NSMutableArray包含值 - 兩者都在同一個索引處。 NSArray確實複製了實體類型定義中的一些信息,但我覺得它保持了單個實體中的數據有意義,以防定義消失。

這是一個合理的方法來解決這個問題嗎?這是迄今爲止我嘗試過的最抽象的對象,仍然沒有將我的頭包裹在所有常見的設計模式中。

具體來說,有沒有比NSMutableDictionary更適合類的定義和NSArray/MutableArray的屬性對象?

我提出問題的方式的任何輸入也表示讚賞。

+0

這聽起來像是CoreData的工作。 – dreamlax

+0

@dreamlax - 我開始使用CoreData,但沒有看到定義新屬性的方法,直到運行時才能知道其屬性數 - 儘管我的xcdatamodel設計經驗僅限於Xcode的圖形界面。 – jslanger

回答

0

,在跳出我爲潛在惱人的唯一事情是:

「現在我的性容器是一個NSArray和NSMutableArray裏 的的NSArray持有newPropertyNames和NSMutableArray中持有 值 - 都在相同的指數。「

我有一個長期以來不喜歡並行數組作爲關聯數據元素的方式。我建議使用單個對象數組,每個對象都包含一個名稱/值對。它可以防止某些類型的下標錯誤,併爲特定於對的邏輯提供機會(如果需要的話)。

+0

謝謝。並行陣列也讓我感到笨重,但是當我試圖避免創建一個有序的可變字典時,它們就是我想到的。 – jslanger

相關問題