I am working on a product-related app where the data model for a product attribute feels too heavy. But I can't split it into several small data models because they are all about goods.
At present, my approach is to parse network data directly into a data model. The properties of the data model are readwrite. For example, when I want to modify a property, I will directly modify it, without copying or reinitializing the new data model. I know there may be problems with this, but I don't have a better way, if you have, please help me.
ATProductModel.h
#import "ATBaseModel.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, ATFilterType) {
ATFilterTypeComplex = 0,
ATFilterTypeSales,
ATFilterTypePrice,
ATFilterTypeVoucher,
};
typedef NS_ENUM(NSUInteger, ATFilterLayoutType) {
ATFilterLayoutTypeNone = 0,
ATFilterLayoutTypeOneRows,
ATFilterLayoutTypeMoreRows,
};
@interface ATProductSubModel : ATBaseModel
@property (copy, nonatomic) NSString *productId;
@property (copy, nonatomic) NSString *productURL;
@property (copy, nonatomic) NSString *productURLShort;
@property (copy, nonatomic) NSString *productIcon;
@property (copy, nonatomic) NSString *title;
@property (copy, nonatomic) NSString *voucher;
@property (copy, nonatomic) NSString *currentPrice;
@property (copy, nonatomic) NSString *price;
@property (copy, nonatomic) NSString *couponURL;
@property (copy, nonatomic) NSString *discountRate;
@property (copy, nonatomic) NSString *endTime;
@property (copy, nonatomic) NSString *couponInfo;
@property (copy, nonatomic) NSString *volume;
@property (copy, nonatomic) NSString *couponStartTime;
@property (copy, nonatomic) NSString *couponEndTime;
@property (copy, nonatomic) NSArray <NSString *>* smallImages;
@property (copy, nonatomic) NSString *shopName;
@property (copy, nonatomic) NSString *shopLogo;
@property (copy, nonatomic) NSString *platType;
@property (copy, nonatomic) NSString *shopScore;
@property (copy, nonatomic) NSString *share;
@property (copy, nonatomic) NSString *shareFee;
@property (copy, nonatomic) NSString *income;
@property (copy, nonatomic) NSString *upIncome;
@property (strong, nonatomic) NSNumber *finished;
+ (instancetype)defaultModel;
@end
@interface ATProductModel : ATBaseModel
@property (strong, nonatomic) NSArray <ATProductSubModel *>* products;
@property (assign, nonatomic) ATFilterLayoutType layoutType;
@property (assign, nonatomic) BOOL recommended;
@end
NS_ASSUME_NONNULL_END
ATProductViewController.h
#import "ATProductModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface ATProductViewController : UIViewController
@property (strong, nonatomic) ATProductSubModel *model;
@end
ATProductViewController.m
#import "ATStringUtil.h"
@implementation ATProductViewController
@property (strong, nonatomic) ATProductModel *productModel;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self defaultModels];
}
- (void)defaultModels{
NSMutableArray *smallImages = [NSMutableArray arrayWithArray:self.model.smallImages];
if (![ATStringUtil containStr:self.model.icon inArr:self.model.smallImages]) {
[smallImages insertObject:self.model.icon atIndex:0];
}
self.model.smallImages = smallImages;
}
@end
```