model-view-controller - Controller 方法应该带参数吗?

标签 model-view-controller design-patterns conventions

鉴于 View 上有文件选择小部件并且 Controller 需要处理选择文件的事件,我应该编写 Controller 方法:

public void fileSelected(String filePath){
  //process filePath
}

或者
public void fileSelected(){
  String filePath = view.getSelectedFilePath();
  //process filePath
}

第一种方法似乎在 C 和 V 之间引入了较少的耦合:C 不知道在处理给定事件时 C 到底需要什么数据。

但是它需要创建很多类似于 getSelectedFile 的冗长方法。在 V 侧。

另一方面,在比示例更复杂的情况下,第二种方法可能会导致困惑的 Controller 方法(要传递的数据比仅 filePath 要多得多)。

根据您自己的经验,您更喜欢哪种方法?

最佳答案

第一种方法是我最喜欢的。唯一的区别是我宁愿使用一个对象(如 Mario 建议的那样)将参数传递给该方法。这样,当您添加或删除某些参数时,方法的签名不会改变。少耦合总是好的:)

还有一件事:
如果您想尝试第二种解决方案,我建议使用 ViewFactory 从 Controller 中删除 View 逻辑。

关于model-view-controller - Controller 方法应该带参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13098287/

相关文章:

模块化方式的 Java Swing + MVC 模式

python - django:如何从数据库对象的主键中散列 URL?

scala - 为什么叫 "cake pattern"

sql - 拥有一个包含同名列的 SQL 表是否是糟糕的编码习惯?

javascript - 在哪里声明类常量?

javascript - AngularJS 不处理 JSON 引用

model-view-controller - 什么设计模式?我的应用程序需要两种模式,编辑和查看

php - 为什么 Yii2 dateTime() 功能不写入时间?

javascript - 组织 jQuery/JavaScript 代码的最佳方式 (2013)

javascript - 在 Ember.js 中实现 Accordion 式 View