Оптимизация обновления коллекций - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, в процессе рефакторинга небольшого приложения, нет идей для улучшения кода. Как мне кажется самый большой минус в такой реализации это обновление модели прямо из " Singleton.Instance.Handle.Add("MessageB", (m) =>{...});", мне кажется это достаточно плохим решеним. Что бы вы посоветовали как это исправить? например пусть есть две ViewModel,
public class AViewModel
{
    AModel A = new AModel();
}
и
public class BViewModel
{
    BModel B = new BModel();
}
Их модели выглядят следующим образом AModel:
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
        });
    }
}
BModel:
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);
            }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.385 из 5