Model或ViewModel应该处理模型属性的延迟加载吗?

时间:2011-02-11 15:39:05

标签: c# mvvm lazy-loading

假设我有ConsumerModelConsumerModel有许多模型属性,其中一个是AddressModel列表。我希望这个Address属性是延迟加载的,因为它没有在ConsumerModel的任何地方使用。它仅用于显示和允许更改消费者地址的AddressViewModel

谁负责加载AddressModel,ConsumerModelAddressViewModel

或者是否存在针对此类事物建议的替代设计,例如从Consumer中分离Addreses列表并将其作为AddressViewModel内的单独属性处理?

public class ConsumerModel : IModel
{
    private List<AddressModel> _addresses;

    public List<AddressModel> Addresses
    {
        get;
        set;
    }
}

2 个答案:

答案 0 :(得分:3)

它属于模型。使用ViewModel模式的关键是首先从View中删除这些类型的决策。该模型负责所有数据收集,组织和管理。 ViewModel仅负责确保模型包含的内容输出到UI。虽然将它放在ViewModel中似乎是一个好主意,但如果规范在下周发生变化并突然在不同的ViewModel中需要该地址(无论出于何种原因),那么你将破坏模式并且你会争先恐后地制造它。起来。

答案 1 :(得分:1)

如果Addresses属性属于ConsumerModel,则ConsumerModel必须负责加载它。 (其他任何东西都打破了封装/某种设计原则 - 我的术语很松散......它只是觉得错误了!)

但是,如果Addresses列表仅用于AddressViewModel,那么可能会将属性移动到该ViewModel,并让它处理加载。