ios - CRUD 操作 - 删除重复代码
问题描述
我尝试同步CoreData
来自后端 SQL 服务器的实体和表之间的所有属性,我刚刚意识到我正在重复使用 3 次相同的属性CRUD
(读取、插入和更新)。如果您有一个具有很多属性的实体,那么代码量就像我的情况一样巨大。有什么办法可以删除这个代码重复?
以下是 CRUD 操作:
override func retrieveAndBuildRowUsing(tblRow: TRow) {
remoteDefectTemplate = DefectTemplate(context: managedContext)
remoteDefectTemplate.id = Int64( tblRow.getCell(columnName: DefectTemplateContract.Columns.id)?.iData() ?? -1)
remoteDefectTemplate.templateId = Int64( tblRow.getCell(columnName: DefectTemplateContract.Columns.templateId)?.iData() ?? -1)
remoteDefectTemplate.compCode = tblRow.getCell(columnName: DefectTemplateContract.Columns.companyCode)?.sData
remoteDefectTemplate.siteNo = Int64( tblRow.getCell(columnName: DefectTemplateContract.Columns.driverSiteNumber)?.iData() ?? -1)
remoteDefectTemplate.title = tblRow.getCell(columnName: DefectTemplateContract.Columns.title)?.sData
remoteDefectTemplate.descript = tblRow.getCell(columnName: DefectTemplateContract.Columns.description)?.sData
remoteDefectTemplate.odo = tblRow.getCell(columnName: DefectTemplateContract.Columns.odometer)?.boolData() ?? Bool()
remoteDefectTemplate.fuel = tblRow.getCell(columnName: DefectTemplateContract.Columns.fuel)?.boolData() ?? Bool()
remoteDefectTemplate.oil = tblRow.getCell(columnName: DefectTemplateContract.Columns.oil)?.boolData() ?? Bool()
remoteDefectTemplate.adBlue = tblRow.getCell(columnName: DefectTemplateContract.Columns.adblue)?.boolData() ?? Bool()
remoteDefectTemplate.defectCreated = tblRow.getCell(columnName: DefectTemplateContract.Columns.created)?.dtData() ?? Date()
remoteDefectTemplate.defectUpdated = tblRow.getCell(columnName: DefectTemplateContract.Columns.updated)?.dtData() ?? Date()
remoteDefectTemplate.declarationNilDefect = tblRow.getCell(columnName: DefectTemplateContract.Columns.declarationNilDefect)?.sData
remoteDefectTemplate.declarationPG9Defect = tblRow.getCell(columnName: DefectTemplateContract.Columns.declarationPG9Defect)?.sData
remoteDefectTemplate.declarationDefect = tblRow.getCell(columnName: DefectTemplateContract.Columns.declarationDefect)?.sData
remoteDefectTemplate.mapId = Int64( tblRow.getCell(columnName: DefectTemplateContract.Columns.damageBitmapId)?.iData() ?? -1)
remoteDefectTemplate.map = Data( tblRow.getCell(columnName: DefectTemplateContract.Columns.damageBitmap)?.binData() ?? [UInt8]())
remoteDefectTemplate.lastVehicleMOTDateRequired = tblRow.getCell(columnName: DefectTemplateContract.Columns.lastVehicleMOTDateRequired)?.boolData() ?? Bool()
remoteDefectTemplate.lastTrailerMOTDateRequired = tblRow.getCell(columnName: DefectTemplateContract.Columns.lastTrailerMOTDateRequired)?.boolData() ?? Bool()
remoteDefectTemplate.nextTrailerSafetyInspectionDateRequired = tblRow.getCell(columnName: DefectTemplateContract.Columns.nextTrailerSafetyInspectionDateRequired)?.boolData() ?? Bool()
remoteDefectTemplate.vehicleHeightCmRequired = tblRow.getCell(columnName: DefectTemplateContract.Columns.vehicleHeightCmRequired)?.boolData() ?? Bool()
}
override func createRow() {
let localDefectTemplate = NSEntityDescription.insertNewObject(forEntityName: "DefectTemplate", into: managedContext) as! DefectTemplate
localDefectTemplate.id = remoteDefectTemplate.id
localDefectTemplate.templateId = remoteDefectTemplate.templateId
localDefectTemplate.compCode = remoteDefectTemplate.compCode
localDefectTemplate.siteNo = remoteDefectTemplate.siteNo
localDefectTemplate.title = remoteDefectTemplate.title
localDefectTemplate.descript = remoteDefectTemplate.descript
localDefectTemplate.odo = remoteDefectTemplate.odo
localDefectTemplate.fuel = remoteDefectTemplate.fuel
localDefectTemplate.oil = remoteDefectTemplate.oil
localDefectTemplate.adBlue = remoteDefectTemplate.adBlue
localDefectTemplate.defectCreated = remoteDefectTemplate.defectCreated
localDefectTemplate.defectUpdated = remoteDefectTemplate.defectUpdated
localDefectTemplate.declarationNilDefect = remoteDefectTemplate.declarationNilDefect
localDefectTemplate.declarationPG9Defect = remoteDefectTemplate.declarationPG9Defect
localDefectTemplate.declarationDefect = remoteDefectTemplate.declarationDefect
localDefectTemplate.mapId = remoteDefectTemplate.mapId
localDefectTemplate.map = remoteDefectTemplate.map
localDefectTemplate.lastVehicleMOTDateRequired = remoteDefectTemplate.lastVehicleMOTDateRequired
localDefectTemplate.lastTrailerMOTDateRequired = remoteDefectTemplate.lastTrailerMOTDateRequired
localDefectTemplate.nextTrailerSafetyInspectionDateRequired = remoteDefectTemplate.nextTrailerSafetyInspectionDateRequired
localDefectTemplate.vehicleHeightCmRequired = remoteDefectTemplate.vehicleHeightCmRequired
do {
try managedContext.save()
print("Inserted successfully a row with id: \(localDefectTemplate.id) in DefectTemplate.")
} catch {
print("Insert failed in DefectTemplate: \(error)")
}
}
override func updateRowWith(idToUpdate: Int64) {
guard let defectTemplatepRowToUpdate = try! DefectTemplate.fetchId(id: "\(idToUpdate)", context: managedContext) else {
print("Error while fetching the idToUpdate from DefectTemplate.")
return
}
defectTemplatepRowToUpdate.id = remoteDefectTemplate.id
defectTemplatepRowToUpdate.templateId = remoteDefectTemplate.templateId
defectTemplatepRowToUpdate.compCode = remoteDefectTemplate.compCode
defectTemplatepRowToUpdate.siteNo = remoteDefectTemplate.siteNo
defectTemplatepRowToUpdate.title = remoteDefectTemplate.title
defectTemplatepRowToUpdate.descript = remoteDefectTemplate.descript
defectTemplatepRowToUpdate.odo = remoteDefectTemplate.odo
defectTemplatepRowToUpdate.fuel = remoteDefectTemplate.fuel
defectTemplatepRowToUpdate.oil = remoteDefectTemplate.oil
defectTemplatepRowToUpdate.adBlue = remoteDefectTemplate.adBlue
defectTemplatepRowToUpdate.defectCreated = remoteDefectTemplate.defectCreated
defectTemplatepRowToUpdate.defectUpdated = remoteDefectTemplate.defectUpdated
defectTemplatepRowToUpdate.declarationNilDefect = remoteDefectTemplate.declarationNilDefect
defectTemplatepRowToUpdate.declarationPG9Defect = remoteDefectTemplate.declarationPG9Defect
defectTemplatepRowToUpdate.declarationDefect = remoteDefectTemplate.declarationDefect
defectTemplatepRowToUpdate.mapId = remoteDefectTemplate.mapId
defectTemplatepRowToUpdate.map = remoteDefectTemplate.map
defectTemplatepRowToUpdate.lastVehicleMOTDateRequired = remoteDefectTemplate.lastVehicleMOTDateRequired
defectTemplatepRowToUpdate.lastTrailerMOTDateRequired = remoteDefectTemplate.lastTrailerMOTDateRequired
defectTemplatepRowToUpdate.nextTrailerSafetyInspectionDateRequired = remoteDefectTemplate.nextTrailerSafetyInspectionDateRequired
defectTemplatepRowToUpdate.vehicleHeightCmRequired = remoteDefectTemplate.vehicleHeightCmRequired
do {
try managedContext.save()
print("Inserted a row successfully in DefectTemplate!")
} catch {
print("Insert failed in DefectTemplate: \(error)")
}
}
以下是我的CoreData
实体的属性:
extension DefectTemplate {
@nonobjc public class func fetchRequest() -> NSFetchRequest<DefectTemplate> {
return NSFetchRequest<DefectTemplate>(entityName: "DefectTemplate")
}
@NSManaged public var id: Int64
@NSManaged public var templateId: Int64
@NSManaged public var compCode: String?
@NSManaged public var siteNo: Int64
@NSManaged public var title: String?
@NSManaged public var descript: String?
@NSManaged public var odo: Bool
@NSManaged public var fuel: Bool
@NSManaged public var oil: Bool
@NSManaged public var adBlue: Bool
@NSManaged public var defectCreated: Date
@NSManaged public var defectUpdated: Date
@NSManaged public var declarationNilDefect: String?
@NSManaged public var declarationPG9Defect: String?
@NSManaged public var declarationDefect: String?
@NSManaged public var mapId: Int64
@NSManaged public var map: Data?
@NSManaged public var lastVehicleMOTDateRequired: Bool
@NSManaged public var lastTrailerMOTDateRequired: Bool
@NSManaged public var nextTrailerSafetyInspectionDateRequired: Bool
@NSManaged public var vehicleHeightCmRequired: Bool
class func fetchId(id: String, context: NSManagedObjectContext) throws -> DefectTemplate? {
let fetchRequest: NSFetchRequest<DefectTemplate> = DefectTemplate.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "id = %@", id)
return try context.fetch(fetchRequest).first
}
class func fetchTemplateId(templateId: String, context: NSManagedObjectContext) throws -> DamageTemplate? {
let fetchRequest: NSFetchRequest<DamageTemplate> = DamageTemplate.fetchRequest()
fetchRequest.propertiesToFetch = ["id"]
fetchRequest.predicate = NSPredicate(format: "templateId = %@", templateId)
return try context.fetch(fetchRequest).first
}
class func fetchIdToUpdateUsing(templateId: String, compCode: String, context: NSManagedObjectContext) throws -> Int64? {
let fetchRequest: NSFetchRequest<DamageTemplate> = DamageTemplate.fetchRequest()
fetchRequest.propertiesToFetch = ["id"]
fetchRequest.predicate = NSPredicate(format: "templateId = %@ AND compCode = %@", templateId, compCode)
let listOfIds = try context.fetch(fetchRequest)
if listOfIds.count == 1 {
return listOfIds.first?.id
}
else {
return -1
}
}
}
感谢您阅读本文!
解决方案
推荐阅读
- reactjs - SCRIPT16389:未指定的错误 - Office Js 插件 - Internet Explorer
- java - 如何更改状态栏颜色
- c - 输出一个字符串,每行一个新字符,形成一个直角三角形
- java - Rabbit MQ 不刷新确认?
- php - laravel 中奇怪的 API 路由错误,一条路线正常工作,另一条路线显示 404 用于同一目的地
- powerbi - 如何将 Power BI 报表发布到网站
- node.js - 我应该在哪个文件夹中安装我的 socket.io 应用程序?
- swift - NSTableView / Cocoa - 具有表宽部分行的多列表
- powershell - 无法安装 Chocolatey Windows 10(新对象错误)PowerShell
- kubernetes - 将 Kubernetes pod 缩放偏移一秒