Элегантный способ инициализации и хранения многих объектов - PullRequest
0 голосов
/ 07 мая 2018

Сообщество Morning StackOverflow,

Я уже несколько дней грызу ногти об этой проблеме, может быть, у кого-то есть идея.

У меня есть BaseClass ("TaskBase"), содержащий объект Task, который что-то делает. По мере роста приложения будет много этих классов TaskBase. Я не могу сериализовать это, потому что есть вовлеченные Задачи (по крайней мере, я думаю, что это не реально возможно).

public class TaskBase
{
    public TaskImpactLevel ImpactLevel { get; set; }
    public RequiredOnlineStatus RequiredOnlineStatus { get; set; }
    public TaskType Type { get; set; }
    public TaskTarget Target { get; set; }

    private Task _task;
    public Task Task
    {
        get
        {
            if (_task == null)
                _task = new Task(() => Execute());
            return _task;
        }
        set
        {
            _task = value;
        }
    }
    public string Name { get; set; }
    public string Description { get; set; }
    public ParameterCollection Parameters { get; set; }

    public TaskBase()
    {
        Name = "Default Name - please change it in the subclass";
        Description = "Default desciption - please change it in the subclass";
        Parameters = new ParameterCollection();
    }

    public virtual void Execute()
    {
        throw new NotImplementedException();
    }
}

Объекты TaskBase в конечном итоге окажутся в списке, будут переданы через WCF и выполнены на стороне клиента.

Теперь я подумал, что я предопределил их в коде, который прекрасно работает

        TaskBase t = new TaskBase();
        t.Name = "Dummy Task";
        t.ImpactLevel = TaskImpactLevel.High;
        t.Parameters.Add(new TaskParameterViewModel() { DisplayName = "Username", Key = "User", Value = new UserModel() });
        t.Target = TaskTarget.None;
        t.Task = new Task(() => { Console.WriteLine("Hello"); });
        t.Type = TaskType.Executable;

Однако мне не очень нравится тот факт, что мне приходится смотреть на сотни из них, определенных в одном классе, я хотел бы как-то их организовать, но я не могу понять, как ...

Может быть, частичные классы сработают? (Не должно замедлять работу приложения, потому что оно просто скомпилировано в один файл, верно?)

Может быть, какой-то класс менеджера, где я регистрирую свои Задачи?

Может быть, есть способ сериализации Задачи, о которой я просто не знаю?

...