dea*_*mon 7 java naming scala fluent-interface
我有一个PermissionsJava类,方法流畅,如下所示:
somePermissions.setRead(true).setWrite(false).setExecute(true)
Run Code Online (Sandbox Code Playgroud)
问题是,我是否应该命名这些方法set{Property}或仅命名{property}.后者看起来像这样:
somePermissions.read(true).write(false).execute(true)
Run Code Online (Sandbox Code Playgroud)
如果我单独看这些方法,我会期望read读取一些东西,但另一方面,它更接近于像Scala那样使用命名参数的意图:
Permission(read=true, write=false, execute=true)
Run Code Online (Sandbox Code Playgroud)
set{Property}传达意图比仅仅{property}更好.但是,由于您的示例是简单的布尔属性,因此更好的流畅接口可能是:
somePermissions.AllowRead().DenyWrite().AllowExecute();
Run Code Online (Sandbox Code Playgroud)
这是一个流畅的接口的经典问题.虽然我同意@Bozho认为setRead()更加自我解释,但流畅的接口中的目标是使整个"句子"可读,而不是使单个方法调用可读.
因此,我会更进一步.怎么样:
somePermissions.readable().nonWritable().executable()
Run Code Online (Sandbox Code Playgroud)
另见Martin Fowler 关于此主题的帖子.他说:"建立一个像这样的流畅API会导致一些不寻常的API习惯"
set{Property}肯定.它告诉方法正在做什么.想象一下你的财产被称为visible或encoding或algorithm.不使用set没有任何意义.
您可以使用更多描述性操作名称,这些名称与属性名称不同.例如:
visible- > show(..)
encoding- > encode(..)
read> makeReadable(..)
name- > giveName(..)( "名称"是一个动词,但是不明确的)
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |