Оптимизация обновления коллекций - C#
Формулировка задачи:
Добрый день, в процессе рефакторинга небольшого приложения, нет идей для улучшения кода.
Как мне кажется самый большой минус в такой реализации это обновление модели прямо из " Singleton.Instance.Handle.Add("MessageB", (m) =>{...});", мне кажется это достаточно плохим решеним. Что бы вы посоветовали как это исправить?
например пусть есть две ViewModel,
и
Их модели выглядят следующим образом
AModel:
BModel:
Словарь событий
public class AViewModel { AModel A = new AModel(); }
public class BViewModel { BModel B = new BModel(); }
public class AModel { public ObservableCollection<DataType> AItems { get; set; } public AModel() { AItems = new ObservableCollection<DataType>(); UpdateAModel(); } public void UpdateAModel() { // Problem with High Coupling, can not remove into another class Singleton.Instance.Handle.Add("MessageB", (m) => { Dictionary<string, DataType> d = m.Message.Json.GetFirstArgAs<Dictionary<string, DataType>>(); foreach (KeyValuePair<string, DataType> item in d) { // Update AItems } // Many strings of code // Update AItems, problem with add or remove items in ObservableCollection because AItems on UI Thread }); } }
public class BModel { public ObservableCollection<DataType> BItems { get; set; } public BModel() { BItems = new ObservableCollection<DataType>(); UpdateBModel(); } public void UpdateBModel() { // Problem with High Coupling, can not remove into another class Singleton.Instance.Handle.Add("MessageA", (m) => { Dictionary<string, DataType> d = m.Message.Json.GetFirstArgAs<Dictionary<string, DataType>>(); foreach (KeyValuePair<string,DataType> item in d) { // Update BItems } // Many strings of code // Update BItems, problem with add or remove items in ObservableCollection because AItems on UI Thread }); } }
public class Singleton { private static Singleton instance; public Dictionary<string, Action<MessageEventArgs>> Handle { get; set; } private Singleton() { Handle = new Dictionary<string, Action<MessageEventArgs>>(); socket = new Client(UrlSocketServer); socket.Message += Message; } public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } } private void Message(object sender, MessageEventArgs e) { if (Handle.ContainsKey(e.Message.Event)) { Handle[e.Message.Event](e); } } }
Решение задачи: «Оптимизация обновления коллекций»
textual
Листинг программы
public class Singleton { private static Singleton instance; public Dictionary<string, Action<MessageEventArgs>> Handle { get; set; } private Singleton() { Handle = new Dictionary<string, Action<MessageEventArgs>>(); socket = new Client(UrlSocketServer); socket.Message += Message; } public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } } public Model AddModelAndFireEvent<T>(T model), where T : Model, new() { T x = new T(); Handle.Add(x.Message, x.UpdateDelegate); return x; } private void Message(object sender, MessageEventArgs e) { if (Handle.ContainsKey(e.Message.Event)) { Handle[e.Message.Event](e); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д