我在asp.net中实现了一个MVP模式,并且与网上的很多例子相混淆。
我认为IEnumerable实现为get;有时候是设定的;另外在其他场景中我看到一个方法void SetCategories(IEnumerable categories);
我的问题是视图合约(例如:IView),它显示了类别列表IEnumerable类别
1)我应该何时实施void SetCategories(IEnumerable<Category> categories);
2)我应该何时实施IEnumerable<Category> Categories { get; set; }
3)我应该何时实施IEnumerable<Category> Categories { set; }
答案 0 :(得分:0)
1和3非常相似,它们提供对类别的只写访问。如果您的演示者不需要阅读“类别”集合,那么您应该使用1或3。
哪一个?此code analysis rule可能适用于此处。
如果替换集合是一个目标,首选的设计模式是包括一个从集合中删除所有元素的方法和一个重新填充集合的方法。
然而,在MVP中,使用属性而不是方法更常见(这可能就是为什么你看到了所有三种场景的例子。)所以这真的是一个首选风格的问题。
选项2提供了上述所有内容以及对该属性的读取权限。如果演示者必须查看集合并从中读取值(或所有值),则需要此项。我认为这里的首选模式是一个属性,使整个集合处于只读状态或选定的类别即。一个Category
。
如果您需要读写访问权限,则选项2可以正常运行 冒犯fxCop。
如果您只需要写入权限,则选项1将取悦fxCop