你使用旗帜还是做两次操作?

Stu*_*ife 2 web-services coding-style

今天出现了一个有趣的讨论,围绕着一个带有标志的方法和两个方法对于每个标志状态的概念.哪个更有意义,为什么?

void Submit(object data, bool isDraft);
Run Code Online (Sandbox Code Playgroud)

要么

void Submit(object data);

void SubmitAsDraft(object data);
Run Code Online (Sandbox Code Playgroud)

我倾向于后者,每个操作都明确指出交易的执行情况.

哪个更有意义,是否存在众所周知的规则或模式?

编辑:

假设方法通过SOAP服务作为操作公开,并且OO概念不一定适用.虽然OO是服务背后的实现.

小智 12

如果您使用单个函数,请不要使用bool,请使用枚举:

enum DocType { Draft, Final };

void Submit(object data, DocType type );
Run Code Online (Sandbox Code Playgroud)

这有两个主要优点 - 它是在呼叫站点自我记录:

Submit( mydata, Draft );
Run Code Online (Sandbox Code Playgroud)

如果您发现有两种以上的文档类型(或状态),它会自然地延伸.


Wim*_*ink 12

我会这样做:

void Submit(object data) { _Submit(data, false); }
void SubmitAsDraft(object data) { _Submit(data, true); }
(private) void _Submit(object data, bool isDraft);
Run Code Online (Sandbox Code Playgroud)

但那只是我......

  • 这正是您在Web服务中想要的.这两项行动是不同的.您当前使用标志实现它们的事实与调用者无关. (2认同)

Ale*_*x B 5

哪一个更具可读性?

Submit(data, true); // true what?
// vs
SubmitDraft(data);
Run Code Online (Sandbox Code Playgroud)

我认为这里的答案是使用显式单独操作,如果您的编程语言不支持关键字参数,例如

Submit(data, isDraft: true);
Run Code Online (Sandbox Code Playgroud)