每次调用构造函数时都要避免实例化对象

时间:2014-08-22 09:18:09

标签: c# design-patterns

我有一个PersonViewModel类并与Person User Control绑定。每当我选择“人员使用控制”页面时,createPersonCommanddeletePersonCommandviewPersonCommand将始终重新实施。有没有想法创建这些命令一次?执行InitializePersonCollection方法因为将从DB检索最新日期。

我的高级评论我的任务,并在此提到了他。

    private ICommand createPersonCommand;

    public ICommand CreatePersonCommand
    {
        get { return createPersonCommand; }
    }

    private ICommand deletePersonCommand;

    public ICommand DeletePersonCommand
    {
        get { return deletePersonCommand; }
    }

    private ICommand viewPersonCommand;

    public ICommand ViewPersonCommand
    {
        get { return viewPersonCommand; }
    }

    public PersonViewModel()
    {
        createPersonCommand = new DelegateCommand<object>(ExecuteCreatePersonCommand);
        deletePersonCommand = new DelegateCommand<object>(ExecuteDeletePersonCommand);
        viewPersonCommand = new DelegateCommand<object>(ExecuteViewPersonCommand);
        InitializePersonCollection();
    }

2 个答案:

答案 0 :(得分:0)

只要命令执行方法不是static,您就需要这样做。如果由于某种原因您可以创建命令方法static,那么您也可以创建DelegateCommands static并仅将静态实例分配给您的成员。

但正如人们已经提到的那样,那是没有意义的。您拥有的代码是完善的模式。没有理由改变它。

也许您应该检查命令是否实际放置好。是否每个人都需要它自己的命令,或者您是否需要主视图模型中的命令才能将单个人作为参数?这可能更有意义。

答案 1 :(得分:0)

您可以使用&#34;延迟加载&#34;。然后命令将按需实例化,不会影响从数据库加载数据的速度。

private ICommand createPersonCommand;
public ICommand CreatePersonCommand
{
    get {
        if (createPersonCommand == null) {
            createPersonCommand = new DelegateCommand<object>(ExecuteCreatePersonCommand)
        }
        return createPersonCommand;
    }
}