C# - Ocena kodu aplikacji ToDo

0

Witam

Napisałem sobie taki programik, w większości dlatego, że chciałem się troszkę z LightMVVM zapoznać, i prosiłbym o ocenienie kodu.

Mam kilka pytań, które mnie najbardziej nurtują:

 
PathBuilder = new PathBuilder("Tasks", "FileName", ".xml"); //Czy takie coś to są "Magic stringi" jak używam ich tylko raz (do inicjalizacji PathBuildera) a potem korzystam z niego? 
            _logger.LogIt("Saved and Loaded");

Jak sobie loguje zdarzenie, to powinienem wsadzić tekst do jakiejś statycznej klasy Constants i robić zmienne

 public static string LogEventSaveAndLoad = "Saved and Loaded";

?

Czy robienie asynchroniczności na taskach jest ok? Jak szukałem na SO jakichś rozwiązań asynchroniczności XML opartych na wbudowanych metodach ...Async() to były kosmiczne :/

Z góry dzięki :)

GH: https://github.com/pixellos/ToDoList
2f032a4fdd.png

0

Czy robienie asynchroniczności na taskach jest ok?

Pokaż jakiś przykład bo nie chce mi się w kodzie szukać :P

0
using System;
using System.Threading.Tasks;

namespace PixelloTools.XmlObject
{
    public static class FakeAsyncHelper
    {
        public static async Task<T> ToAsync<T>(this Func<T> func )
        {
            return await Task<T>.Factory.StartNew(func);
        }

        public static async Task ToAsync(this Action action)
        {
            await Task.Factory.StartNew(action);
        } 
    }
} 
 
        public async Task SaveSingleDataAsync(T objectOfType, string FileName = null)
        {
            Action action = () => SaveSingleData(objectOfType, FileName);
            await action.ToAsync();
        }

        public void SaveSingleData(T objectOfType,string FileName = null)
        {
            if (!Directory.Exists(PathBuilder.Folder)) Directory.CreateDirectory(PathBuilder.Folder);
            {
                SaveToPath(
                    PathBuilder.FilePath(FileName), objectOfType);
            }
        }

        protected void SaveToPath(string path, T objectOfType)
        {
            using (StreamWriter writer = new StreamWriter(path))
            {
                XmlSerializer document = new XmlSerializer(typeof(T));
                document.Serialize(writer, objectOfType);
                document.Serialize(_ilogger.GetLoggerTextWriter(), objectOfType);
            }
        }

Coś takiego

A potem użycie

namespace PixelloToDo.ViewModel
{
    public class DataOperationViewModel : ViewModelBase
    {
        private Ilogger _logger;
        private readonly ITaskService _taskService;
        public DataOperationViewModel(ITaskService taskService,Ilogger logger)
        {
           ( ...)
            TaskAddCommand = new RelayCommand(SaveTask);
            DeleteCommand = new RelayCommand<object>(DeleteTask);
            ModifyCommand = new RelayCommand<object>(ModifyTask);
            _logger.LogIt("DataOperationViewModel initialized");

        }
        public RelayCommand<object> DeleteCommand { get; set; }
        public RelayCommand TaskAddCommand { get; set; }
        public RelayCommand<object> ModifyCommand { get; set; }

        private void ModifyTask(object TaskItem){...}
        private async void DeleteTask(object accessName){...}

        private async void SaveTask()
        {
            try
            {
                TaskItem item = new TaskItem(){...};                 
         
                await Task.WhenAll(_taskService.SaveTaskToFile(item)); //Solution to file read lock during _taskService.GetTasksObservableCollectionAsync()
                TaskItems = await _taskService.GetTasksObservableCollectionAsync();
            }
            catch (Exception ex){(logging...)  }
        }
(...)
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1