标签: code-reuse

你如何确保代码被正确重用?

通常,当我们将新功能引入应用程序时,我们可能会生成工件,例如可以在我们的应用程序的其他区域中重用的有用方法或类.这些工件不一定记录为功能要求,因为它们通常是我们实现选择的副作用.由于我们经常在团队中开发,因此分享这些代码以防止返工和重复非常重要.

例子:

  • 实用方法和类
  • 基类
  • 一个接口
  • 一个GUI控件

您发现什么是共享这些工件的最有效方式?

您如何表达您在创建时所做的假设?

你如何确保他们被正确消费?

我对文档,代码图,会议(?)方面的最佳实践和经过验证的技术感兴趣,以确保正确地重用代码.

这个问题非常类似于:寻找可重复使用的代码,但我对更积极主动而不是被动的方法感兴趣.

documentation code-reuse communication

5
推荐指数
1
解决办法
263
查看次数

如何在C++中将DRY原则应用于迭代器?(iterator,const_iterator,reverse_iterator,const_reverse_iterator)

好的,所以我现在有两个(完全不相关的,不同的项目)类使用迭代器.一个拥有iterator并按reverse_iterator预期工作,另一个,当前一个具有iterator半破坏const_iterator(具体而言,因为const_iterator派生自迭代器,代码LinkedList<int>::iterator i = const_list.begin()有效并允许您修改const定义的列表......).
我打算将所有四种类型添加到这个类......如果可以的话.

我如何继续最小化复制/粘贴代码并仅更改返回类型?创建一个类似于base_iterator继承的基类?创建一个iteratorconst_iterator从中继承?从某些std :: class继承?如果这些案例中的任何一种都是"最佳"方法,那么代码会在哪里?
也许没有其他选择是好的?我在这里迷路了,找不到太多的参考资料.

任何建议都表示赞赏,但请记住,我是这个主题的新手(一般都是迭代器和C++,尤其是OOP).我试图研究GCC附带的头文件是徒劳的 - 它们并不完全是我正在寻找的教程.

c++ inheritance code-reuse iterator dry

5
推荐指数
1
解决办法
1152
查看次数

内部可重用库 - 重用为dll或项目?

我们在工作中有相当多的可重用代码(一件好事).每当我创建一个使用它们的新项目时,我习惯将他们的项目作为我的解决方案的一部分包含在内,我想知道是否应该将它们重新用作已发布的dll.我包含该项目的原因(或理由)是,如果我发现其中一个错误,我可以在那里进行分支和修复.但它似乎将我的重点放在手头的项目上.

(不确定这是否应该是CW,因为只有两个答案,我有兴趣了解您的偏好)

.net code-reuse

5
推荐指数
1
解决办法
424
查看次数

如何在异常处理中使用接口

我正在为我的应用程序处理异常处理层.

我读过很多关于接口和泛型的文章.我之前已经使用了很多遗产,我对那个领域很满意.

我有一个非常简短的设计,我将要实现:

public interface IMyExceptionLogger
{
   public void LogException();

   // Helper methods for writing into files,db, xml
}
Run Code Online (Sandbox Code Playgroud)

我有点困惑我接下来应该做什么.

public class FooClass: IMyExceptionLogger
{

   // Fields
   // Constructors

}
Run Code Online (Sandbox Code Playgroud)

我应该LogException()在其中实施方法FooClass吗?如果是的话,我正在努力想看看我如何更好地使用界面而不是具体的类......

我有各种各样的类可以使用该接口,但我不想在每个类中编写该接口的实现.

同时如果我在一个类中实现一个接口,然后在应用程序的不同层中使用该类,我将仍然使用具体的类而不是接口,这是一个糟糕的OO设计......

我希望这是有道理的.

欢迎任何反馈和建议.

请注意,我对使用net4log或其竞争对手不感兴趣,因为我这样做是为了学习.

谢谢

编辑:

写了一些代码.因此,我将实现各种与此接口,即记录仪的DBExceptionLogger,CSVExceptionLogger,XMLExceptionLogger等比我仍然会结束与具体的类,我将在我的应用程序的不同层使用.

c# generics code-reuse interface

5
推荐指数
1
解决办法
1837
查看次数

如何简化/重用此异常处理代码

我倾向于编写如下代码:

BufferedWriter w = null; // Or any other object that throws exceptions and needs to be closed
try {
    w = new BufferedWriter(new FileWriter(file));
    // Do something with w
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (w != null) {
        try {
            w.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它通常涉及一个抛出异常并需要关闭的对象,关闭它也可能会抛出异常.

我想知道上述代码是否可以以任何方式简化或重用.

java code-reuse exception-handling exception

5
推荐指数
2
解决办法
1579
查看次数

Yabble入门 - 浏览器端CommonJS模块加载

有人熟悉Yabble或其他浏览器端的CommonJS加载器吗?

我正在尝试使用Node.js,并且非常希望创建可以在服务器端和客户端互换使用的Javascript模块.这可能最终变得更像是"因为它太棒了"而不是"因为它是实用且有用"的东西.

因此,我基本上试图让CommonJS require()方法在浏览器端工作,这正是Yabble应该做的.我不知道从哪里开始.除了在Yabble的Github自述文件中找到的内容之外,我似乎无法找到任何文档,而且这并没有多大帮助.

基本上我所做的就是将它放在HTML页面中......

<script src="yabble.js"></script>

<!-- Uses require -->
<script>
    require.setModuleRoot('http://localhost:8030/')
    my_module = require('my_module')
</script>
Run Code Online (Sandbox Code Playgroud)

但是无论何时我调用该require()函数,我都会Synchronous require() is not supported.抛出异常.

有人可以帮助我开始吗?我应该在哪里加载yabble.js我应该要求的地方?有没有一种特殊的方式来运行我的Javascript模块?

javascript code-reuse commonjs node.js

5
推荐指数
1
解决办法
1670
查看次数

C#可重用函数转储局部变量的当前值

我想编写一个可重用的函数,我可以在任何方法中调用它来记录所有局部变量的快照.例如:

    void somemethod()
    {
        int a = 1;
        string s = "something";
        dumpLocalVariables("step 1", MethodInfo.GetCurrentMethod(), this);

        a++;
        string t = s + "else";
        dumpLocalVariables("step 2", MethodInfo.GetCurrentMethod(), this);
    }
Run Code Online (Sandbox Code Playgroud)

我想获得这样的控制台输出:

step 1
    Int32 a = 1 
    String s = something
step 2
    Int32 a = 2
    String s = something
    String t = somethingelse
Run Code Online (Sandbox Code Playgroud)

我想避免提供一个特定的局部变量名列表.

我能找到的最接近的是MethodInfo.GetCurrentMethod().GetMethodBody().LocalVariables,但我不知道如何使用反射访问局部变量的值.

void dumpLocalVariables(string context, MethodBase currentMethod, object obj)
{
    Console.WriteLine(context);
    MethodBody methodBody = currentMethod.GetMethodBody();
    foreach (LocalVariableInfo lvi in methodBody.LocalVariables)
    {
        string variableType = lvi.LocalType.Name; …
Run Code Online (Sandbox Code Playgroud)

c# reflection debugging code-reuse local-variables

5
推荐指数
1
解决办法
4019
查看次数

iOS应用程序中的代码重用

我是ios开发的新手,而我刚刚开始研究我的第一个应用程序.现在我的应用程序几乎在每个页面上都有一个主页按钮,在该按钮后面调用相同的代码片段以移动到主屏幕.这是每个具有主页按钮的控制器中的大量重复代码.这只是一个例子.还有很多其他场景,程序员仍在学习编码,我认为这是不好的做法,因为任何改变都必须在每个控制器上单独进行.

所以我的问题是,在为ios编码时,这种场景中的最佳实践是什么?

iphone code-reuse refactoring coding-style ios

5
推荐指数
1
解决办法
1132
查看次数

只调用一次的代码块 - 值得拥有自己的方法吗?

通过观察各种Android应用程序的源代码(不是我编写的),我注意到了将某些代码片段放入自己的方法中的模式,尽管实际上没有任何代码重用,因为这些方法只在整个过程中被调用一次应用.

到目前为止,我有一个经验法则,规定如果在应用程序代码中使用两次或更多代码,那么它就有其自身的方法,仅仅是为了消除代码冗余.

但是看到那些整齐地将代码块分解成自己的方法(以及自己的方法调用开销),我开始说,也许我错过了一些东西.

除了用于文档目的之外,还有什么其他原因可以证明只将4行代码(只调用一次!)放入自己的方法中?

java code-reuse refactoring code-readability

5
推荐指数
2
解决办法
596
查看次数

怀疑与可以多次使用的对象(如格式化程序)的并发性

也许是一个愚蠢的问题,但我需要一些确认.

通常,当我处理可以在我的应用程序中多次使用的对象时,我使用如下方法.

例如NSDecimalNumber+Extension,创建一个扩展,或者创建一个数字格式化程序的类实用程序,如下所示.

+ (NSNumberFormatter*)internal_sharedNumberFormatter
{
    static NSNumberFormatter* _internal_numberFormatter = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _internal_numberFormatter = [[NSNumberFormatter alloc] init];
        // other configurations here...
    });

    return _internal_numberFormatter;
}

+ (NSString*)stringRepresentationOfDecimalNumber:(NSDecimalNumber*)numberToFormat
{
    NSString *stringRepresentation = [[self class] internal_sharedNumberFormatter] stringFromNumber:numberToFormat];
    return stringRepresentation;
}
Run Code Online (Sandbox Code Playgroud)

这种方法非常好,因为例如格式化程序的创建成本很高.但它也可以应用于其他情况.

现在,我的问题如下.

在涉及不同执行路径(不同线程)的情况下,此方法是否也有效?

所以,如果我先stringRepresentationOfDecimalNumber在主线程上调用然后在另一个线程中调用,会发生什么?

我认为stringRepresentationOfDecimalNumber在不同的线程中执行不同的调用是有效的,因为共享格式化程序,在这种情况下,只是只读,但我想得到专家的回复.

提前致谢.

concurrency code-reuse objective-c nsformatter

5
推荐指数
1
解决办法
214
查看次数