小编cor*_*ath的帖子

deferred/promise是否会违反Demeter法?

我在洗澡时想到了什么.

递延/许模式是降低回调地狱,允许开发者链通话功能,如提到这里:

Parse.User.logIn("user", "pass").then(function(user) {
  return query.find();
}).then(function(results) {
  return results[0].save({ key: value });
}).then(function(result) {
  // the object was saved.
});
Run Code Online (Sandbox Code Playgroud)

从我的头脑中 - 纠正我,如果我错了 - 但似乎使用延期/承诺是打破德米特定律的简单方法?

得墨忒耳法则规定:

对象的方法只能调用以下方法:

  • 对象本身.
  • 方法的一个论点.
  • 在方法中创建的任何对象.
  • 对象的任何直接属性/字段.

每个单位应该对其他单位的知识有限:只有与当前单位"密切"相关的单位.或者:每个单位只应与其朋友交谈; 不要和陌生人说话.

对此有何评论?

2013年12月1日更新:

我的问题的摘要版本.Promise框架旨在简化异步编码并避免" 回调地狱 ".Promise最有用的功能之一是你可以使用链式调用事件.then(),如上例所示.

鉴于所有的代码/函数现在都在使用Promise(就像Benjamin Gruenbaum(下面的作者)目前正在做的那样),它不会打开它以使链调用函数变得非常简单.then().then().then().

编写链接调用函数的代码(.then().then().then())必须是如何打破Demeter法则的教科书示例.

因此,我的问题; Promise框架是否促进/开放/更容易滥用/违反Demeter法?

javascript law-of-demeter promise deferred

15
推荐指数
2
解决办法
1266
查看次数

在Java中编写"异常驱动开发"的性能成本?

通过在Java中创建,抛出和捕获异常,是否有任何性能成本?

我计划将"异常驱动的开发"添加到一个更大的项目中.我想设计自己的异常并将它们包含在我的方法中,迫使开发人员捕获并做适当的工作.

例如,如果您有一种方法可以根据名称从数据库中获取用户.

public User getUser(String name);
Run Code Online (Sandbox Code Playgroud)

但是,用户可能为空,并且在使用用户的公共方法之前忘记检查此操作是很常见的.

User user = getUser("adam");

int age = user.getAge();
Run Code Online (Sandbox Code Playgroud)

这将导致NullPointerException和崩溃.但是,如果我在返回user-object之前进行了检查,如果它为null并抛出'UserIsNullException':

public User getUser(String name) throws UserIsNullException;
Run Code Online (Sandbox Code Playgroud)

我强迫实施者思考并采取行动:

try {

    User user = getUser("adam");

    int age = user.getAge();

}catch( UserIsNullException e) {

}
Run Code Online (Sandbox Code Playgroud)

它使代码更安全地发生意外崩溃并消除更多错误.假设该网站每小时有数百名访问者,这种设计模式几乎无处不在.

这种设计方法将如何影响性能?这些好处是否会超过成本,还是只是简单的编码?

谢谢你的帮助!

UPDATE!要清楚,我的注意力不是包装NullPointerException,正如我的例子所暗示的那样.目标是强制实施者编写一个try/catch,从而避免真正崩溃的头痛:

user == null

被遗忘了.问题涉及比较这两种设计模型:

int age;

try {

User user = getUser("adam");

age = user.getAge();

}catch( UserIsNullException e) {

age = 0;

}
Run Code Online (Sandbox Code Playgroud)

与:

int age;

User user = getUser("adam");

if( user != null ) { …
Run Code Online (Sandbox Code Playgroud)

java performance exception-handling exception overhead

14
推荐指数
6
解决办法
5969
查看次数

字符串是不可变的 - 这意味着我永远不应该使用+ =而且只能使用StringBuffer?

字符串是不可变的,这意味着,一旦创建它们就无法更改.

那么,这是否意味着如果你用+ =附加的东西比你创建一个StringBuffer并附加文本那么需要更多的内存?

如果你使用+ =,每次必须保存在内存中时你会创建一个新的'对象',不是吗?

java string stringbuilder stringbuffer immutability

11
推荐指数
4
解决办法
6310
查看次数

哪个最常用?RSS还是Atom?哪一个更好建立?

我正在考虑在我的项目中使用RSS或Atom,但也使用我的项目专门使用的一些我自己的特殊属性来"增强"Feed.

所以我有两个问题:

1)在网络和大型网站上最常用的是RSS和Atom?

2)哪个最适合通过添加我自己的标签来构建?

更新:

所以RSS最常用,但是我应该选择Atom,因为我需要对feed进行自己的调整?如果RSS更受欢迎,为什么不选择它呢?谷歌为什么不挑选那个?

rss feed atom-feed

11
推荐指数
1
解决办法
3046
查看次数

大型开发团队无法处理单个CSS样式表?

我目前在一个5-7大型开发团队中创建了一个包含大量页面和功能的非常大的网站.

我觉得我们处于这样一种情况,即开发人员可以根据自己的需要更改样式表,但是不知道1000个地方可能会更改它的其他内容.我也不能责怪他,因为我知道很难检查一切.

这是一团糟.

我知道使用一个单一样式表文件可以节省带宽并防止重复代码和维护,但我不能不知道 - 使用样式表对于大型站点来说是一个好主意,还是应该更加面向对象/元素.

假设您忘记了疯狂的大型CSS,而是在每个元素上定义CSS.因此,每次渲染GreenBuyButton时,它都有"style ='bla bla bla'".这对所有元素都是如此.

这将增加带宽,但不会创建重复的代码.

这可能是一个好主意,或者真正的大型团队如何在一个网站上使用CSS来避免它变得一团糟?

html css stylesheet

9
推荐指数
2
解决办法
1138
查看次数

冒号:在HTML(5)的属性名称中有效吗?

冒号:字符是否有效HTML(5)中的属性名称?

像这样:

<p he:llo="world" >Hello world</p>
Run Code Online (Sandbox Code Playgroud)

搜索网页后,我发现这篇文章:

http://razzed.com/2009/01/30/valid-characters-in-attribute-names-in-htmlxml/

这说它有效,但他链接到这个w3文件:

http://www.w3.org/TR/2000/REC-xml-20001006#NT-Name

但是这篇文章的标题是"可扩展标记语言(XML)1.0(第二版)" - 意思是XML而不是HTML.

谁能为我澄清一下这个?

html html5

8
推荐指数
1
解决办法
2113
查看次数

添加空字符串vs toString - 为什么它不好?

根据工具PMD,以下是一个不好的做法:

String s = "" + 123; // bad 
String t = Integer.toString(456); // ok 


This is an inefficient way to convert any type to a `String`.
Run Code Online (Sandbox Code Playgroud)

为什么这样做不好?

java string tostring pmd

7
推荐指数
3
解决办法
7434
查看次数

有没有办法获得Dart语言单元测试的测试覆盖率报告?

有没有办法获得Dart代码单元测试的任何类型的测试或代码覆盖率报告(文本或图形)?

code-coverage dart dart-unittest

7
推荐指数
1
解决办法
872
查看次数

Google云端存储JSON API需要哪些授权令牌?

我正在学习谷歌云存储,JSON api,简单上传:

https://cloud.google.com/storage/docs/json_api/v1/how-tos/simple-upload

该示例说要发送一个如下所示的帖子:

POST https://www.googleapis.com/upload/storage/v1/b/myBucket/o?uploadType=media&name=myObject HTTP/1.1
Content-Type: image/jpeg
Content-Length: [NUMBER_OF_BYTES_IN_FILE]
Authorization: Bearer [YOUR_AUTH_TOKEN]

[JPEG_DATA]
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个"服务帐户"API.

但是如何[YOUR_AUTH_TOKEN]从我新创建的服务帐户中找出要使用的内容?

google-cloud-storage

7
推荐指数
1
解决办法
2603
查看次数

如何从HttpRequest.postFormData的catchError的_XMLHttpRequestProgressEvent中获取HTTP响应文本?

给出以下伪代码:

import "dart:html";

HttpRequest.postFormData(url, data).then((HttpRequest request) {

    ...

}).catchError((error) {

    // How do I get the response text from here?

});
Run Code Online (Sandbox Code Playgroud)

如果Web服务器回复a 400 BAD REQUEST,catchError则将调用.但是,error参数的类型_XMLHttpRequestProgressEvent在Dart库中显然不存在.

那么,如何400 BAD REQUEST从Web服务器发送的响应中获取响应文本?

dart dart-html

6
推荐指数
1
解决办法
1786
查看次数