假设有一种方法可以按书籍ID搜索图书作者.什么应该作为参数传递给这样的方法 - 只有book.id(int)或整本书对象?
或者另一个例子.在java中,我需要使用页面的当前url做一些工作.什么应该传递给这样的方法 - 只有request.getRequestURL()或整个请求?
我有点看到每种方法的好处,但在使用什么时却无法提出好的规则.
谢谢.
nor*_*ole 10
我不确定是否有最好的"规则",但我经常将我需要的参数传递给方法.所以在你的第一个例子中,我只传入book.id,在你的第二个例子中,我只传递request.getRequestURL().
我尽量避免传球超过我的需要.
我将成为一个反对者并争论传递整个Book对象.
原因1:类型检查.如果你只传递一个整数ID,那么如果你有正确的"种类"整数ID,就无法知道,查看代码.也许你已经传递了一个你认为是Book ID的整数变量,但它实际上是作者ID.编译器不会帮助你捕获这个错误,结果将以意想不到的方式出错.
原因2:未来的证明.有些人认为,如果你只是传递了ID,那么你可以选择稍后更改Book对象的结构,而不会破坏doSomethingWithBook(int ID)方法.这是真的.另一方面,如果你传递整个Book对象,你可以自己选择更改doSomethingWithBook(Book book)的内部结构(可能它希望在将来基于其他一些字段进行搜索)而不会破坏任何(可能很多)你称之为doSomethingWithBook的地方.我认为后者可以帮助你更多.
在Request的情况下,我会给出不同的答案,因为我会认为Request对象与某种类型的接口(web)紧密相关,因此希望限制该对象的使用.我想问自己一个问题:如果我想将这个Web应用程序切换为命令行应用程序,那么有多少类需要更改?如果我正在传递请求,那将使用特定于Web的逻辑"感染"更多类.