3

考虑以下源代码片段:

片段#1

  StoredProcedure sp = new StoredProcedure( "PROC_NAME", getConnection() );
  sp.putParameter( "ID", getId() );
  sp.execute();

片段#2

  StoredProcedure sp = new StoredProcedure( "PROC_NAME" );
  sp.setConnection( getConnection() );
  sp.putParameter( "ID", getId() );
  sp.execute();

片段#3

  StoredProcedure sp = new StoredProcedure( "PROC_NAME" );
  sp.putParameter( "ID", getId() );
  sp.execute( getConnection() );

问:哪个片段最面向对象,为什么?

问:每个片段的优缺点是什么?

4

2 回答 2

2

我的意见:没有和所有的同时。

所有片段都显示了一个名为action. 一般来说,OO 设计的一部分是每个方法只做一件事,方法名称反映了这一点;action因为方法名称不具有反射性,可以用作任何东西的总称。通过查看这件事的实际作用,这个方法显然应该被称为executeProcName.

OO 也有很多关于得墨忒耳法则,也称为最少知识原则。这意味着使用 getter 是一件好事,因为所有片段都已经这样做了,所以在这种情况下,它们实际上都是 OO 和等价的,就像jball 在他的回答中所说的那样。如果我必须选择我更喜欢的那个,它会是#3,用于在最后一刻获得所需的外部类/值(在这种情况下,它们确实会影响性能)或#2,因为它最容易阅读。

在不深入学术语义的情况下,这几乎就是我认为可以说的。

于 2009-12-10T17:48:17.167 回答
0

正如其他海报所提到的,这是一个高度偏好的问题。

就我个人而言,我喜欢第一个,因为就连接而言,您更早地表明了您的意图。您已经知道您将针对来自 getConnection 的连接执行,那么为什么要稍后设置呢?

p = new Person("Joe", "Smith");

p = new Person();
p.setFirstName("Joe");
p.setLastName("Smith");

我会说对你来说最易读的就是最好的。

于 2009-12-10T17:49:54.310 回答