考虑以下源代码段:
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() );
问:哪个代码段最面向对象,为什么?
问:每个代码段的优缺点是什么?
答案 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");
我会说最适合你的是最好的。