标签: dry

扩展AngularJS控制器的推荐方法是什么?

我有三个非常相似的控制器.我想要一个控制器,这三个扩展并共享其功能.

javascript dry angularjs

190
推荐指数
7
解决办法
8万
查看次数

为什么代码的"复制和粘贴"很危险?

有时,我的老板会向我们抱怨:

为什么我们需要这么长的时间来实现一个功能?

实际上,该功能之前已经在另一个应用程序中实现,您只需要从那里复制和粘贴代码.成本应该很低.

这真的是一个难题,因为在我看来,复制和粘贴代码并不是一件简单的事情.

你有什么理由向你的非技术老板解释这个吗?

copy-paste dry

129
推荐指数
8
解决办法
2万
查看次数

如何在django模板中重复"块"

我想在同一个django模板中使用相同的{%block%}两次.我希望此块在我的基本模板中出现多次:

# base.html
<html>
    <head>
        <title>{% block title %}My Cool Website{% endblock %}</title>
    </head>
    <body>
        <h1>{% block title %}My Cool Website{% endblock %}</h1>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后扩展它:

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}

# pictures.html
{% extends 'base.html' %}
{% block title %}My Pictures{% endblock %}

# cats.html
{% extends 'base.html' %}
{% block title %}My Cats{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我会得到一个例外,因为Django希望块只出现一次:

在/的TemplateSyntaxError

名称为"title"的'block'标记不止一次出现

一个快速而肮脏的解决方案是将块标题复制到title1title2:

# blog.html
{% …
Run Code Online (Sandbox Code Playgroud)

django dry django-templates

122
推荐指数
8
解决办法
4万
查看次数

重复代码在单元测试中是否更容易被容忍?

我不久前破坏了几次单元测试,当时我经历并重构它们以使它们更加干燥 - 每次测试的意图都不再清晰.似乎在测试的可读性和可维护性之间存在权衡.如果我在单元测试中留下重复的代码,它们更具可读性,但是如果我更改了SUT,我将不得不追踪并更改重复代码的每个副本.

你是否同意这种权衡存在?如果是这样,您是否希望您的测试具有可读性或可维护性?

unit-testing dry code-duplication

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

Java错误:默认构造函数未定义隐式超级构造函数

我有一些简单的Java代码,在其结构中看起来与此类似:

abstract public class BaseClass {
    String someString;
    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}

public class ACSubClass extends BaseClass {
    public ASubClass(String someString) {
        super(someString);
    }
    public String getName() {
        return "name value for ASubClass";
    }
}
Run Code Online (Sandbox Code Playgroud)

我将有很多子类BaseClass,每个子类以getName()自己的方式实现该方法(模板方法模式).

这很好用,但我不喜欢在子类中使用冗余构造函数.打字更多,难以维护.如果我要更改BaseClass构造函数的方法签名,我将不得不更改所有子类.

当我从子类中删除构造函数时,我得到了这个编译时错误:

Implicit super constructor BaseClass() is undefined for default constructor. Must define an explicit constructor

我正在尝试做什么?

java inheritance dry boilerplate

87
推荐指数
3
解决办法
19万
查看次数

在Rails中将整个应用程序共享的部分放在何处?

我将在哪里放置由多个模型共享的部分文件?我有一个名为的页面crop.html.erb用于一个模型 - Photo.现在我想将它用于另一个名为的模型User.

可以复制并粘贴代码,但这不是很干,所以我想我会把它移到局部.

由于它是在两个模型之间共享的 - 我会在哪里放置它

谢谢!

ruby-on-rails dry partials

53
推荐指数
4
解决办法
2万
查看次数

使用哈希参数进行Ruby初始化

我发现自己对构造函数使用了哈希参数,特别是在编写用于配置的DSL或最终用户将要暴露的其他API时.我最终做的事情如下:

class Example

    PROPERTIES = [:name, :age]

    PROPERTIES.each { |p| attr_reader p }

    def initialize(args)
        PROPERTIES.each do |p|
            self.instance_variable_set "@#{p}", args[p] if not args[p].nil?
        end
    end

end
Run Code Online (Sandbox Code Playgroud)

有没有更惯用的方法来实现这一目标?抛弃常数和符号到字符串转换似乎特别令人震惊.

ruby idioms initialization dry

53
推荐指数
3
解决办法
4万
查看次数

如何避免代码重复实现const和非const迭代器?

我正在实现一个具有STL类接口的自定义容器.我必须提供一个常规迭代器和一个const迭代器.两个版本的迭代器的大多数代码都是相同的.我怎样才能避免这种重复?

例如,我的容器类是Foo,我正在实现FooIteratorFooConstIterator.两个迭代器都必须提供operator++()相同的方法.

我的问题类似于如何删除类似的const和非const成员函数之间的代码重复?但是那个问题的答案特定于const和非const方法,尤其是访问器.我没有看到这可能会如何推广到迭代器问题.

我应该FooIteratorFooConstIterator其他非const方法派生并扩展它吗?这要么导致虚拟方法或方法隐藏,这在这里似乎不合适.

也许FooIterator应该包含一个FooConstIterator.虽然这种方法确实减少了实现重复,但它似乎重新引入了许多样板方法定义.

是否有聪明的模板技术从单个定义生成两个迭代器?或许有一种方法 - 颤抖 - 使用预处理器来消除这些几乎相同的类.

我已经尝试查看我的本地STL实现,看看它是如何处理它的.有很多辅助类,我在设计中遇到了麻烦,但看起来功能很简单.

在以前的项目中,我的自定义容器是在标准STL容器之上构建的,所以我不必提供自己的迭代器.在这种情况下,这不是一个选项.

c++ iterator const dry

52
推荐指数
2
解决办法
1万
查看次数

如何从C宏的值创建一个char字符串?

例如,如何避免两次写'func_name'?

#ifndef TEST_FUN
#  define TEST_FUN func_name
#  define TEST_FUN_NAME "func_name"
#endif
Run Code Online (Sandbox Code Playgroud)

我想遵循单点真相规则.

C预处理器的版本:

$ cpp --version
cpp (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14)
Run Code Online (Sandbox Code Playgroud)

c dry c-preprocessor

50
推荐指数
2
解决办法
10万
查看次数

Django Javascript中的DRY URL

我在Appengine上使用Django.我reverse()到处都在使用django 功能,尽可能保持干燥.

但是,我在将这个应用到我的客户端javascript时遇到了麻烦.有一个JS类根据传入的ID加载一些数据.有没有一种标准的方法来对这些数据应该来自的URL进行硬编码?

var rq = new Request.HTML({
    'update':this.element,
}).get('/template/'+template_id+'/preview'); //The part that bothers me.
Run Code Online (Sandbox Code Playgroud)

javascript django ajax google-app-engine dry

50
推荐指数
3
解决办法
2万
查看次数