我正在重構兩個類,試圖將它們合併爲一個,其中之前一個是另一個的較重版本。問題在於較重的班級並未完全包圍較輕的班級。我正在考慮創建一個包含所有必需屬性的類,其中每個預先存在的類現在是同一類的一部分,但是使用不同的初始化器實例化。在對象上未使用的屬性有什麼傷害?
爲了給你一個想法,讓我們說,我想,以減少這些:
ClassA.h
@interface
@property int shared1;
@property int shared2;
@property int a1;
@property int a2;
@end
ClassB.h
@interface
@property int shared1;
@property int shared2;
@property int b1;
@property int b2;
@end
我的計劃是把這些結合起來:
ClassC.h
@interface
@property int shared1;
@property int shared2;
@property int a1;
@property int a2;
@property int b1;
@property int b2;
- (id) initHeavyVersion; // this will set b1 and b2 as well as shared but not a1/a2
- (id) initLightVersion; // this will set a1 and a2 as well as shared but not b1/b2
@end
是否有這樣做的時候不造成任何傷害重疊的屬性本身可能是相當大的對象?我看到它的方式,當這些屬性未被使用時,它們應該只是攜帶一些額外的nil
,只不過是。所以性能/內存問題應該是最小的。不利之處在於混亂的公共界面。
我拒絕作文,因爲那仍然會導致兩個班級,而我的目標是將這些班級壓縮成一個(幾乎任何成本)。同樣,代表也會產生同樣的問題。
我看到的唯一選擇是使用關聯的對象,但這看起來不必要地棘手/花哨,並且仍然依賴於單獨的初始化函數。
任何批評或替代建議將是最受歡迎的。