假设我有ConsumerModel
。 ConsumerModel
有许多模型属性,其中一个是AddressModel
列表。我希望这个Address属性是延迟加载的,因为它没有在ConsumerModel的任何地方使用。它仅用于显示和允许更改消费者地址的AddressViewModel
。
谁负责加载AddressModel,ConsumerModel
或AddressViewModel
?
或者是否存在针对此类事物建议的替代设计,例如从Consumer中分离Addreses列表并将其作为AddressViewModel
内的单独属性处理?
public class ConsumerModel : IModel
{
private List<AddressModel> _addresses;
public List<AddressModel> Addresses
{
get;
set;
}
}
答案 0 :(得分:3)
它属于模型。使用ViewModel模式的关键是首先从View中删除这些类型的决策。该模型负责所有数据收集,组织和管理。 ViewModel仅负责确保模型包含的内容输出到UI。虽然将它放在ViewModel中似乎是一个好主意,但如果规范在下周发生变化并突然在不同的ViewModel中需要该地址(无论出于何种原因),那么你将破坏模式并且你会争先恐后地制造它。起来。
答案 1 :(得分:1)
如果Addresses属性属于ConsumerModel,则ConsumerModel必须负责加载它。 (其他任何东西都打破了封装/某种设计原则 - 我的术语很松散......它只是觉得错误了!)
但是,如果Addresses列表仅用于AddressViewModel,那么可能会将属性移动到该ViewModel,并让它处理加载。