From 1152493a782ba34b6af80b53855baec77123e695 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 19 Jul 2019 15:00:35 +0800 Subject: [PATCH] optimize PropertyChangedUtil --- .../Configuration/Tags/PropertyChangedUtil.cs | 28 +++++++++++++++++++ .../Tags/TagBuilders/AbstractTagBuilder.cs | 28 +------------------ .../Tags/TagBuilders/IsPropertyBuilder.cs | 7 +---- 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs b/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs index bc2d545c..a138e90a 100644 --- a/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs +++ b/src/SmartSql/Configuration/Tags/PropertyChangedUtil.cs @@ -1,7 +1,13 @@ +using System; +using System.Xml; +using SmartSql.Exceptions; + namespace SmartSql.Configuration.Tags { public class PropertyChangedUtil { + private const String PROPERTY_CHANGED = nameof(IPropertyChanged.PropertyChanged); + /// /// 验证属性值变更状态是否满足要求 /// @@ -40,5 +46,27 @@ public static bool IsCondition(IPropertyChanged propertyChanged, AbstractRequest } } } + + public static bool? GetPropertyChanged(XmlNode xmlNode, Statement statement) + { + string strVal = xmlNode.Attributes?[PROPERTY_CHANGED]?.Value?.Trim(); + if (String.IsNullOrEmpty(strVal)) + { + if (statement.EnablePropertyChangedTrack) + { + return statement.EnablePropertyChangedTrack; + } + + return null; + } + + if (!Boolean.TryParse(strVal, out var boolVal)) + { + throw new SmartSqlException($"can not convert {strVal} to Boolean from xml-node:{xmlNode.Value}."); + } + + return boolVal; + + } } } \ No newline at end of file diff --git a/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs b/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs index bfb0cfb5..0fbeea23 100644 --- a/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs +++ b/src/SmartSql/Configuration/Tags/TagBuilders/AbstractTagBuilder.cs @@ -8,7 +8,7 @@ namespace SmartSql.Configuration.Tags.TagBuilders { public abstract class AbstractTagBuilder : ITagBuilder { - private const String PROPERTY_CHANGED = nameof(IPropertyChanged.PropertyChanged); + private const String PREPEND = nameof(Tag.Prepend); private const String PROPERTY = nameof(Tag.Property); private const String REQUIRED = nameof(Tag.Required); @@ -33,32 +33,6 @@ public Decimal GetXmlAttributeValueAsDecimal(XmlNode xmlNode, string attributeNa return decimalVal; } - public bool TryGetXmlAttributeValueAsBool(XmlNode xmlNode, string attributeName, out bool boolVal) - { - string strVal = GetXmlAttributeValue(xmlNode, attributeName); - if (String.IsNullOrEmpty(strVal)) - { - boolVal = false; - return false; - } - - if (!Boolean.TryParse(strVal, out boolVal)) - { - throw new SmartSqlException($"can not convert {strVal} to Boolean from xml-node:{xmlNode.Value}."); - } - - return true; - } - - public bool? GetPropertyChanged(XmlNode xmlNode) - { - if (TryGetXmlAttributeValueAsBool(xmlNode, PROPERTY_CHANGED, out var boolVal)) - { - return boolVal; - } - return null; - } - public String GetPrepend(XmlNode xmlNode) { return GetXmlAttributeValue(xmlNode, PREPEND); diff --git a/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs b/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs index 7a7d2bdc..7e896ae3 100644 --- a/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs +++ b/src/SmartSql/Configuration/Tags/TagBuilders/IsPropertyBuilder.cs @@ -9,17 +9,12 @@ public class IsPropertyBuilder : AbstractTagBuilder { public override ITag Build(XmlNode xmlNode, Statement statement) { - var propertyChanged = GetPropertyChanged(xmlNode); - if (statement.EnablePropertyChangedTrack && !propertyChanged.HasValue) - { - propertyChanged = statement.EnablePropertyChangedTrack; - } return new IsProperty { Property = GetProperty(xmlNode), Prepend = GetPrepend(xmlNode), ChildTags = new List(), - PropertyChanged = propertyChanged, + PropertyChanged = PropertyChangedUtil.GetPropertyChanged(xmlNode, statement), Statement = statement }; }