面向对象的执行

时间:2009-12-10 17:37:56

标签: java oop implementation

考虑以下源代码段:

Snippet#1

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

Snippet#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() );

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

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

2 个答案:

答案 0 :(得分:2)

我的意见:没有,所有这些都在同一时间。

所有代码段都显示一个名为action的方法。 OO设计的一部分一般是每个方法只做一件事,方法名称反映了这一点; action作为方法名称不具有反思性,可以用作任何内容的总括标题。通过查看事物实际上做了什么,这个方法显然应该被称为executeProcName

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

在没有深入研究学术语义的情况下,我认为可以这么说。

答案 1 :(得分:0)

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

我个人喜欢第一个,因为就连接而言,你早先表达了你的意图。您已经知道要对getConnection的连接执行,那么为什么要在以后设置呢?

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

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

我会说最适合你的是最好的。