标签: code-organization

Python代码组织问题:鸡蛋+软件包+构建+单元测试+ SVN

我有几个共享常见模块的python项目.到现在为止,我已经......咳嗽......保留公共代码的多个副本并手动同步.但我显然更愿意做别的事情.

它现在在我看来,好像zc.Buildout可能是我需要的.我想我应该做的是将我系统的每个可重用组件放入一个单独的egg中,然后使用buildout将它们组装到项目中.

我也在想,对于任何特定的模块,我应该将单元测试放入一个单独的包或蛋中,这样我就不会在每个项目中安装组件的单元测试副本.我只想在我的库开发的地方进行单元测试,而不是在刚刚使用的地方.

所以也许我想要这样的东西

projects
  lib1
    tests
    code
  lib2
    tests
    code
  app1
    tests 
    appcode
  app2
    tests
    appcode
Run Code Online (Sandbox Code Playgroud)

等等

app1和app2都是独立的应用程序,有自己的代码和测试,但也包括和使用lib1和lib2.和lib1/test,lib1/code,lib2/test,lib2code,app1,app2是分开的鸡蛋.这听起来不错吗?

但是,我现在感到困惑.我假设当我开发app1时,我希望buildout将lib1,lib2和app1的副本放到一个单独的工作目录中,而不是直接将这些库的副本放在app1下.但是,这如何与我的SVN源代码控制一起使用?如果使用buildout动态构造工作目录,它不能是一个实时SVN目录,我可以从中检查更改回存储库?

我是否误解了如何使用buildout?我会更好地采用完全不同的方法吗?如何在项目之间混合源代码控制和模块重用?

更新:感谢两位目前已回答此问题的人.我正在尝试更多这个.

python svn egg code-organization buildout

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

仅使用头文件编译C++ .lib?

我正在编译一个C++静态库,并且由于所有类都是模板化的,所以类定义和实现都在头文件中.结果,似乎(在visual studio 2005下)我需要创建一个包含所有其他头文件的.cpp文件,以便它能够正确地编译到库中.

为什么是这样?

c++ code-organization

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

C++项目源代码布局

组织项目目录的一种流行方式或多或少是这样的:

MyLib
     +--mylib_class_a.h
        mylib_class_a.cpp
        mylib_library_private_helpers.h
        mylib_library_private_helpers.cpp

MyApp
     +--other_class.h
        other_class.cpp
        app.cpp

app.cpp:

#include "other_class.h"
#include <mylib_class_a.h> // using library MyLib
Run Code Online (Sandbox Code Playgroud)

同一个库的所有.h.cpp文件都在同一目录中.为避免名称冲突,文件名通常是公司名称和/或库名称的前缀.MyLib将位于MyApp的标题搜索路径等中.我不是前缀文件名的粉丝,但我喜欢查看#include并确切知道头文件所属的位置.我不讨厌这种组织文件的方法,但我认为应该有更好的方法.

自从我开始一个新项目以来,我想征求一些目录组织的想法.目前我喜欢这个目录结构:

ProjA
    +--include
             +--ProjA
                    +--mylib
                           +--class_a.h
                    +--app
                           +--other_class.h
    +--src
         +--mylib
                +--class_a.cpp
                   library_private_helpers.h
                   library_private_helpers.cpp
         +--app
              +--other_class.cpp
                 app.cpp
                 util.h

app.cpp:

#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include …
Run Code Online (Sandbox Code Playgroud)

c++ version-control directory-structure code-organization project-organization

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

如何在.NET中组织类似于#region/#endregion的代码?

虽然代码越来越大,但保持一切井然有序变得越来越难.我非常喜欢在.NET中开发的一件事是#region/#endregion,它能够组织逻辑组中的代码并使组织更容易.

有谁知道Java中是否有类似的代码组织?

.net java code-organization regions

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

关于C++编程实践的意见

我有一个我写的程序,不是太大.除了主要功能外,它还有大约15个其他功能,可以在不同时间调用各种任务.代码在一个文件中工作得很好,就像现在一样.

但是,我想知道是否有人有任何建议是否更智能/更高效/更好的编程将这些功能放在一个不同于main的单独文件中,或者它是否甚至是重要的.如果是,为什么?如果不是,为什么不呢?

我不是C++的新手,但绝对不是专家,所以如果你认为这个问题很愚蠢,请随时告诉我.

谢谢你的时间!

c++ code-organization

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

陷入困境,需要帮助突破到一个新的水平

我正在一个简陋的网站上工作,我的平庸,自学成才的PHP技能,目前的界面结构是这样的:

<?php
  if (A) {
    $output = someFunc(A);
  } else if (B) {
    $output = anotherFunc(B);
  } else if (C) {
    $output = yetAnotherFunc(C);
  } else {
    $output = 'default stuff';
  }
?>
<html template top half>

<?php echo $output; ?>

</html template bottom half>
Run Code Online (Sandbox Code Playgroud)

这起初工作正常,看起来组织得很好,但是所需的功能已经增长了10倍,并且很快变成了一个难以维护,令人尴尬的混乱,我不知道如何摆脱它.

我觉得为每种情况调用的函数都写得很好并且集中精力,但是如何处理用户和创建布局并处理返回的函数之间的中间步骤是不知所措的.

我觉得MVC是一个解决方案?但我很难掌握如何从这里到那里......

对于上述代码可能引发的任何令人头疼或不愉快的回忆,我深表歉意.感谢您的时间.

php code-organization

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

"在同一个包中混合类和接口"是不好的做法吗?

我刚刚发现了一些我从未听说过的东西,我不同意(现在).在一个(upvoted和未进一步评论)的答案中,我读到"为什么要在同一个包中混合类和接口"

所以我想知道,如果有理由在Java中分离接口和实现.

我知道我们没有义务将所有实现都放在接口的包中,但是(有时)明智的是没有它吗?


迈克
[;-)

java code-organization

8
推荐指数
3
解决办法
2722
查看次数

CherryPy:有没有最好的方法将项目拆分为多个文件?

我是来自Django的CherryPy的新手.我喜欢Django将项目的各个部分分成许多文件的方式,我想在CherryPy中做同样的事情,而不是有一个大文件.

我认为如果我能在这些部分拆分项目会很棒:

  • application.py:CherryPy的核心,服务器启动的位置
  • urls.py:包含所有URL,可能使用RoutesDispatcher
  • models.py:通过SQLAlchemy,包含所有模型
  • controllers.py:非常明显;)

我不是要求在这里完整的代码粘贴,一个示例/ pastebin/gist的链接也是完美的:)

谢谢你的帮助.

python code-organization cherrypy project-organization

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

Matplotlib创建实时动画图形

我很难设置我的代码来创建一个实时动画图,我的代码是在收集数据后绘图,而不是每次迭代都显示.我的脚本运行一个回归函数,然后存储在一个文件中,然后我访问这些文件并绘制它们,这里是我所拥有的,我需要移动或更改为实时图形?我尝试在for循环中移动绘图函数但是没有用,有什么建议吗?

 fig = plt.figure()
 ax1 = fig.add_subplot(1,1,1)

 num = 10 
 for idx in range(1,num):
    c,e = Regr_magic()
        with open("CK_output.txt",'a') as CK:
            CK.write("{0},{1}\n".format(idx,c))
        with open("error_output.txt",'a') as E:
            E.write("{0},{1}\n".format(idx,e))



    def animate(i):
        pull = open('error_output.txt','r').read()
        data = pull.split('\n')
        xar = []
        yar = []

        for each in data:
            if len(each)>1:
                x,y = each.split(',')
                xar.append(float(x))
                yar.append(float(y))
            ax1.plot(xar, yar)
    ani = animation.FuncAnimation(fig, animate, interval=1000)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

仅供参考,数据文件包含以下内容,迭代编号和Ck值或错误,因此它们看起来像这样

1,.0554
2,.0422
3,.0553
4,.0742
5,.0232
Run Code Online (Sandbox Code Playgroud)

python code-organization matplotlib

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

你喜欢把MVC视图模型数据转换逻辑放在哪里?

这是场景,我需要从多个Web服务服务调用返回的多个域​​对象中加载视图模型对象.将域模型对象转换为可消化视图模型对象的代码是一些相当复杂的代码.我想到的三个地方是:

  1. 控制器内部的内部方法,用于加载实例视图模型.
  2. 视图模型类本身上的静态get方法或属性,它返回已加载的视图模型实例.
  3. 一个完全独立的构建器或辅助类,它具有静态get方法,属性或重载构造函数,用于返回已加载的视图模型实例.

要清楚,我不想使用AutoMapper或类似的工具.从最佳实践的角度来看,我想知道这个逻辑应该去哪里,以及为什么.

编辑

所以这就是我到目前为止所做的,这确实给了我"瘦"的控制器逻辑和关注点的分离.我怎么能让它更好呢?

    // ** Controller **
    public ActionResult Default()
    {

        var viewModel = MyViewModelBuilder.BuildViewModel(MarketType.Spot);

        return View(SpotViewUrl, viewModel);
    }

    // ** Builder **
    // Lives in MVC project under ViewModelBuilders folder
    public class MyViewModelBuilder
    {
        public static ChartsModel BuildViewModel(MarketType rateMarket)
        {
            var result = new ChartsModel
            {
                RateMarket = rateMarket,
                DateRange = new DateRange()
            };
            LoadGroupedRateLists(result, rateMarket);
            LoadCoorespondingRates(result);
            return result;
        }

        private static void LoadGroupedRateLists(ChartsModel model, RateMarket rateMarket)
        {
            var rateHistSvc = new RateHistoryService(RatesPrincipal.Current.Session.Token);
            var serviceResult …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc transform code-organization viewmodel

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