优化电表历史数据采集代码
首先,可以优化的地方是将switch语句改为使用字典来存储key-value对,然后通过字典来获取对应的值。\n\ncsharp\nDictionary<string, Action<dynamic>> propertyMap = new Dictionary<string, Action<dynamic>>\n{\n { "SN", value => sn = value },\n { "TotalPower", value => totalPower = Convert.ToDecimal(value) },\n { "ElectricCurrent", value => model.ElectricCurrent = Convert.ToDecimal(value) },\n { "Voltage", value => model.Voltage = Convert.ToDecimal(value) },\n { "Power", value => model.Power = Convert.ToDecimal(value) },\n { "PowerFactor", value => model.PowerFactor = Convert.ToDecimal(value) },\n { "ReactivePower", value => model.ReactivePower = Convert.ToDecimal(value) },\n { "ApparentPower", value => model.ApparentPower = Convert.ToDecimal(value) },\n { "Frequency", value => model.Frequency = Convert.ToDecimal(value) },\n { "ProfitOrSpend", value => model.ProfitOrSpend = Convert.ToDecimal(value) },\n { "VoltageAB", value => model.VoltageAB = Convert.ToDecimal(value) },\n { "VoltageBC", value => model.VoltageBC = Convert.ToDecimal(value) },\n { "VoltageAC", value => model.VoltageAC = Convert.ToDecimal(value) },\n { "VoltageA", value => model.VoltageA = Convert.ToDecimal(value) },\n { "VoltageB", value => model.VoltageB = Convert.ToDecimal(value) },\n { "VoltageC", value => model.VoltageC = Convert.ToDecimal(value) },\n { "CurrentA", value => model.CurrentA = Convert.ToDecimal(value) },\n { "CurrentB", value => model.CurrentB = Convert.ToDecimal(value) },\n { "CurrentC", value => model.CurrentC = Convert.ToDecimal(value) },\n { "PowerA", value => model.PowerA = Convert.ToDecimal(value) },\n { "PowerB", value => model.PowerB = Convert.ToDecimal(value) },\n { "PowerC", value => model.PowerC = Convert.ToDecimal(value) },\n { "PowerAQ", value => model.PowerAQ = Convert.ToDecimal(value) },\n { "PowerBQ", value => model.PowerBQ = Convert.ToDecimal(value) },\n { "PowerCQ", value => model.PowerCQ = Convert.ToDecimal(value) },\n { "FactorA", value => model.FactorA = Convert.ToDecimal(value) },\n { "FactorB", value => model.FactorB = Convert.ToDecimal(value) },\n { "FactorC", value => model.FactorC = Convert.ToDecimal(value) },\n { "Remarks", value => model.Remarks = value },\n { "COMMStatus", value => model.COMMStatus = value }\n};\n\nforeach (var item in dataList)\n{\n if (propertyMap.TryGetValue(item.Key, out var action))\n {\n action(item.Value);\n }\n}\n\n\n此外,还可以将一些重复的代码提取出来,避免重复计算。\n\ncsharp\ndecimal mLastTotalPower = mLast?.TotalPower ?? 0;\nmodel.ThisPower = model.TotalPower - mLastTotalPower;\n\nif (model.ThisPower < 0)\n{\n _logger.LogError("【电表历史数据采集】累计电量累计值回滚异常:" + json);\n return null;\n}\n\nmodel.ThisElectricityPrice = model.ThisPower * elecPrice;\n\nvar modelSavePower = new ElectricityMeter_History\n{\n CreateTime = DateTime.Now,\n Deleted = false,\n RecordTime = recordTime,\n TotalPower = 0,\n COMMStatus = "正常",\n ThisPower = model.ThisPower\n};\n\nif (queryIsUseElec != null && queryIsUseElec.UseTypeName == EquipmentUseType.总并网.ToString())\n{\n await ReceiveSaveElectricityHistoryDTONew(modelSavePower);\n await ReceiveCityElectricityHistoryDTONew(modelSavePower);\n}\nelse\n{\n await ReceiveSaveElectricityHistoryDTONew(modelSavePower);\n}\n\n\n最后,可以将整个方法分解为多个辅助方法,提高代码的可读性和可维护性。
原文地址: https://www.cveoy.top/t/topic/pZea 著作权归作者所有。请勿转载和采集!