Detect and visualize property value changes
public class ChangeBuilder { public class CompareProp { public CompareProp(string description, string left, string right) { Description = description; Left = left; Right = right; } public string Description { get; set; } public string Left { get; set; } public string Right { get; set; } } private readonly List<CompareProp> compareProps = new List<CompareProp>(); public ChangeBuilder Add(string description, string left, string right) { compareProps.Add(new CompareProp(description, left, right)); return this; } public IEnumerable<CompareProp> GetChanges() => compareProps.Where(x => !StringHelper.StrEquals(x.Left, x.Right)).ToList(); } // Use: private static void LogChanges(string message, IEnumerable<ChangeBuilder.CompareProp> changes) { var changesDescription = string.Join(Environment.NewLine, changes.Select(x => $"{x.Description}: '{x.Left}' => '{x.Right}'")); _ = DomainPorts.LogMessageStore.Info($"{message}{Environment.NewLine}{changesDescription}"); } var registrationChanges = new ChangeBuilder() .Add("FreightRegistrationId", existingOrder.FreightRegistrationId, registration.Id.ToString()) .Add("DeliveryDate", existingOrder.DeliveryDate?.ToString("yyyy-MM-dd"), registration.FreightRegistrationTimeSlot.Date.ToString("yyyy-MM-dd")) .Add("MiddleOfTimeSlotString", existingOrder.MiddleOfTimeSlotString, registration.FreightRegistrationTimeSlot?.MiddleOfTimeSlot.ToAs400Time()) .Add("LicensePlateName", existingOrder.LicensePlateName, registration.LicensePlate?.Name ?? string.Empty) .Add("LicensePlateNumber", existingOrder.LicensePlateNumber, registration.LicensePlate?.LicensePlateNumber) .Add("SaveLicensePlate", existingOrder.SaveLicensePlate, registration.LicensePlate?.SaveAsNewLicensePlate.ToAs400String()) .GetChanges(); if (registrationChanges.Any()) { LogChanges($"{transportOrder.OrderNumber}: Has registration changes:", registrationChanges); }
572200cookie-checkC# ChangeBuilder