|
|
1
5
如果你必须验证某件事,我认为验证它更有意义 在addRecipient方法本身中 但是性能应该差不多。我不知道使用方法链接的任何一般缺点。 |
|
2
2
不能直接从类实例化链接:
您必须先实例化,然后针对已实例化的对象链接:
如果在单独的setter方法中进行验证(如您应该的那样),则需要确保在遇到验证错误时抛出异常。不能简单地在出错时返回布尔值false,否则链接将尝试对布尔值而不是类实例调用下一个方法,然后您将得到。
如果抛出异常,可以将链包装在try中…抓住
但作为警告,这将使实例处于部分更新状态,对于成功验证/执行的方法没有回滚(除非您自己编写一个回滚),并且不会调用异常后面的方法。 |
|
|
3
1
编辑:更新答案以匹配问题
此外,将更复杂的方法链接到Fluent API可能需要对与上一个调用方法相关的数据进行额外的簿记,以便下一个调用可以继续处理该数据,因为所有方法返回构建链的同一对象。 让我们看看您的示例:
这需要你记住
但是,您几乎不会注意到性能损失,除非您的代码在循环中被频繁调用,或者当您对Web服务器有如此多的并发请求,以致于它接近其极限时(对于重载网站就是这样)。 另一个方面是方法链接模式强制使用异常来处理信号错误(我并不是说这是一件坏事,它只是不同于经典的“调用和检查函数结果”编码风格)。 但是,通常会有一些函数产生其他值,而不是它们所属的对象(例如那些返回对象和访问器状态的函数)。 重要的是,API的用户可以在每次遇到新方法时,确定哪些函数是可链接的,哪些函数是不必参考文档的(例如,说明所有的mutator和只有mutator支持链接的准则)。 回答原始问题:
|
|
|
4
0
这是把双刃剑。 好的一面?这比重新寻址类更干净,尽管它主要只是语法更改,但它会稍微加快处理速度。最好是循环这种类型的链,而不是循环长格式的每个调用。 坏的一面?当人们第一次习惯它时,这将导致安全问题。在这个问题上,要努力净化传入的var,这样你就不会在那里传递一些你不应该传递的东西。不要把你的类弄得太复杂。
我认为将这些方法链接到一个循环中没有问题,性能方面。 |
|
|
ShaAnder · 为什么sqllachemy返回的是类而不是字符串 1 年前 |
|
|
D_chez12 · 如果对象键值为空,则过滤掉数组中的对象 1 年前 |
|
MeltingDog · 如何检索嵌套的JS对象并通过索引获取其数据? 1 年前 |
|
VonDerHase · 从列表中删除特定值,Python 1 年前 |