css渐变色
在《神秘博士》中,卡梅利恩(Kamelion)角色是一个可以采取任何形式的机器人。 据称,他们使用的物理道具非常麻烦,只有其创建者才能理解,而该创建者并没有帮助纠正它。
因此,Chamelion功能...
考虑以下代码:
public List<Document> getAllDocuments(Request request, int userId, String field) {
Query q = createQueryFrom(request);
switch (field) {
case "title" :
q.addCriteria(Criteria.where( "title" ).is(request.getTitle());
break ;
case "name" :
q.addCriteria(Criteria.where( "name" ).is(request.getName());
break ;
default :
throw new IllegalArgumentException( "Bad field: " + field);
}
return q;
}
上面有很多事情。 让我们来了解它。 出现了某种请求,我们可以从中进行基本查询。 然后,根据调用方提供的字段,我们使用该字段向查询中添加条件,并将操作数从请求中拉出。
最重要的是,如果调用者提供了一个我们不知道如何查询的字段,我们就必须抛出一个错误。
此功能有什么问题?
我会告诉你怎么了...
这不是功能。 这是两个功能。 另请参阅两种音乐。
调用代码可能如下所示:
// one call site
getAllDocuments(request, id, "title" );
// another
getAllDocumetns(request, id, "name" );
我们使用字符串选择来控制单个函数的一半流。
更糟糕的是……当某些调用者发明一个我们从未听说过的字符串时,我们需要抛出一个异常。
让我们再重构一下:
public List<Document> getAllDocumentsByTitle(Request request, int userId) {
Query q = createQueryFrom(request);
q.addCriteria(Criteria.where( "title" ).is(request.getTitle());
return q;
}
public List<Document> getAllDocumentsByName(Request request, int userId) {
Query q = createQueryFrom(request);
q.addCriteria(Criteria.where( "name" ).is(request.getName());
return q;
}
通过将其分为两个功能,它可以自我记录,易于遵循并且不需要处理流氓字符串。 它可能会更快一些,但这并不是真正的主要驱动力。
但是重复呢?
我怀疑变色龙功能的驱动程序是减少代码重复的错误尝试。 请注意,以上示例提供了在两个函数( createQueryFrom)中重用的代码示例,但每个函数中都有独立的逻辑。 它不是重复的代码。
我从中提取的示例最初可能有多行代码,现在我们看到createQueryFrom可能引起了对重复的恐惧,这反过来又造成了怪物。 坚持不懈地进行重构以减少正确的重复,这样的事情就不会发生。
翻译自: https://www.javacodegeeks.com/2019/08/chameleon-function.html
css渐变色