Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller 更改模型中数据的最佳方式是什么?_Model View Controller_Architecture - Fatal编程技术网

Model view controller 更改模型中数据的最佳方式是什么?

Model view controller 更改模型中数据的最佳方式是什么?,model-view-controller,architecture,Model View Controller,Architecture,想象一个包含一些项目的列表。 每个项目都是一部电影,包括: 标题 星级排名(1-5) “添加到我的列表”按钮 您可以留下评论的文本框 如何做: A) 项将侦听buttonClicked事件,然后调用模型上的方法: onClick: function(event){ this.model.addToMyList(); } 无需指定电影ID,因为“模型”用于此项目。在其他情况下,模型适用于所有项目 B列表将侦听要分派buttonClicked事件的项,从事件中获取数据,并将调用模型上的

想象一个包含一些项目的列表。 每个项目都是一部电影,包括:

  • 标题
  • 星级排名(1-5)
  • “添加到我的列表”按钮
  • 您可以留下评论的文本框
如何做:

  • A) 项将侦听buttonClicked事件,然后调用模型上的方法:

    onClick: function(event){
       this.model.addToMyList();
    }
    
    无需指定电影ID,因为“模型”用于此项目。在其他情况下,模型适用于所有项目

  • B列表将侦听要分派buttonClicked事件的项,从事件中获取数据,并将调用模型上的方法:

    model.addToMyList(movieId)
    
    model.addToMyList(movieId)
    
  • C列表将侦听某个项目以分派buttonClicked事件,此事件将执行该项目的索引(不是电影的id),然后使用列表上的索引查找电影id,并将调用模型上的方法:

    model.addToMyList(movieId)
    
    model.addToMyList(movieId)
    

    • 您没有提到任何语言,因此我将给出一个语言中立的回答

      不建议使用C:通过列表中的索引标识项目似乎是一个简单的选择,但任何扩展功能或可维护性都可能在以后变得混乱(突然对列表排序,让用户过滤列表等)

      考虑到可维护性(不是先发制人的设计,而是更能适应变化的设计),事件处理程序最好能够识别正在处理的内容。这样,您就可以修改将应用于所有项目的处理程序

      对于B:对于更改的集合,我会保留更多,以便控件/组件侦听集合更改(例如INotifyCollectionChangedin.net)。因此,很难说不知道您是否希望对这个集合执行特定的操作,但除非集合(作为数据模型)的更改决定了其他方面,否则它不是我的首选

      因此,考虑到上述情况,(这听起来像是A-B混合,但它是一种常用的解决方案):创建的新项注册到事件处理程序(只需编写一个事件处理程序),并传入对项行本身的引用或标识符。因此,如果可能的话,您将看到:

      onClick: function(MyEvent e)
      {
         this.model.addToMyList(e); //or this.model.addToMyList(e.ID)
      }
      

      因此,您有多个项目注册同一事件,需要维护一个事件处理程序,并且能够在您的列表通过过滤器、排序等更改时保留处理功能。

      您能否澄清“最佳”是什么意思?灵活(可重用)和性能良好问题。我对此一无所知,但答案也会对我有所帮助——特别是重用性这一关键问题。