标签: code-organization

在Scala中对实用程序功能进行分组的首选方法?

对不属于类的实用程序函数进行分组的最佳方法是什么?在Ruby中,我会将它们分组在一个模块中.我应该在Scala中使用特征来获得相同的效果还是对象?

scala code-organization

12
推荐指数
2
解决办法
2224
查看次数

缩进2个空格是否安全?

我知道"我应该如何缩进代码"的一般答案通常是"按照您的意愿行事,但与团队中的每个人一样",但在上一次我看到很多项目和平台都依赖于2空间缩进.

我只是想确保在缩进时获得"最好的帮助",并确保它具有前瞻性.考虑到兼容性等,稍后在项目中更改结构是一个相当大的问题.

现在大多数项目依赖于2个Spaces,4个SpacesTabs.


项目及其缩进:

  1. 标签
    • WordPress的
    • jQuery的
    • CakePHP的
    • 混帐
    • Linux内核(似乎不一致)
  2. 4个空格
    • Django的
    • Symfony的
    • 堆栈溢出
    • Zend框架
    • 雅虎
    • 的MacVim
    • Memcached的
  3. 2个空格
    • 谷歌
    • HTML5 Boilerplate
    • Ruby on Rails
    • Drupal的
    • Node.js的
    • Github上
    • 蓝图的CSS
    • 杰奇
    • 选择
    • Backbone.js的
    • Modernizr的
    • Scriptaculous的
    • Clojure的
    • Facebook(我认为)

问题是"社区"在哪里?2个空格还是4个空格?

我的猜测是2个空间,因为它表现在大公司和所有标准推动项目都在使用它.

您如何看待当前和未来的情况?适应2 Spaces缩进是否明智?

compatibility code-organization indentation

12
推荐指数
1
解决办法
4373
查看次数

haskell - 任何方式来推动你自己的LANGUAGE组合语法?

我有一个经常使用许多语言功能的Haskell项目,我希望每个源文件的语言扩展块都是相同的.这是一个清单,

{-# LANGUAGE Arrows,
             BangPatterns,
             DefaultSignatures,
             DeriveDataTypeable,
             DeriveFunctor,
             EmptyDataDecls,
             FlexibleContexts,
             FlexibleInstances,
             FunctionalDependencies,
             GADTs,
             GeneralizedNewtypeDeriving,
             MultiParamTypeClasses,
             NamedFieldPuns,
             NoImplicitPrelude,
             NoMonomorphismRestriction,
             OverlappingInstances,
             RankNTypes,
             RebindableSyntax,
             ScopedTypeVariables,
             StandaloneDeriving,
             TemplateHaskell,
             TypeFamilies,
             TypeOperators,
             TypeSynonymInstances,
             UndecidableInstances,
             ViewPatterns #-}
Run Code Online (Sandbox Code Playgroud)

也许对某些人来说这是不好的做法,但我认为语言扩展是我经常编写代码的"Haskell +"的一部分.而且,我希望它在模块之间是相同的.例如,NoImplicitPrelude语言显着改变,我希望所有模块都统一.

问题:如何在不将语言块复制粘贴到每个文件中的情况下如何实现此目的?我经常学习新的语言功能,将其添加到模块A,然后开始处理模块B,并意识到我必须从模块中复制语言块,这很烦人A.

仅仅是CPP因为一个没有做到这#include一点的pragma !提前致谢.

haskell code-organization ghc

12
推荐指数
1
解决办法
498
查看次数

如何组织单元测试,不要让重构成为一场噩梦?

我目前组织单元测试的方法归结为以下几点:

  • 每个项目都有自己的专用项目和单元测试.对于项目BusinessLayer,有一个BusinessLayer.UnitTests测试项目.
  • 对于我想要测试的每个类,测试项目中有一个单独的测试类放在完全相同的文件夹结构中,并且与测试中的类完全相同.对于一类CustomerRepository命名空间下BusinessLayer.Repositories,有一个测试类CustomerRepositoryTests的命名空间BusinessLayerUnitTests.Repositories.

每个测试类中的方法遵循简单的命名约定MethodName_Condition_ExpectedOutcome.因此,类CustomerRepositoryTests包含一类测试CustomerRepositoryGet定义方法如下所示:

[TestFixture]
public class CustomerRepositoryTests
{
    [Test]
    public void Get_WhenX_ThenRecordIsReturned()
    {
        // ...
    }

    [Test]
    public void Get_WhenY_ThenExceptionIsThrown()
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法对我很有用,因为它使得对某些代码的定位测试非常简单.在相反的网站上,它使代码重构变得非常困难,应该是:

  • 当我决定将一个项目分成多个较小的项目时,我还需要拆分我的测试项目.
  • 当我想要更改类的名称空间时,我必须记住更改测试类的名称空间(和文件夹结构).
  • 当我更改方法的名称时,我必须完成所有测试并在那里更改名称.当然,我可以使用搜索和替换,但这不是很可靠.最后,我仍然需要手动检查更改.

有没有组织单元测试仍然让我找到测试特定的代码迅速的一些巧妙的方式,并在同一时间更借本身对重构?

或者,是否有一些,呃,也许是Visual Studio扩展,这将允许我以某种方式说"嘿,这些测试是针对方法的,所以当方法的名称发生变化时,请非常友好并改变测试" ?说实话,我正在认真考虑写自己的东西:)

c# tdd nunit unit-testing code-organization

12
推荐指数
1
解决办法
2160
查看次数

在.NET表单中组织UI代码

我是自学编程的人,并且没有接受任何正式的.NET编程培训.

前段时间,我开始使用C#来开发一个GUI程序来控制传感器,项目已经蓬勃发展.我只是想知道如何在我的表单中最好地组织代码,特别是UI代码.

我的表格目前是一团糟,或者至少对我来说是一团糟.

  • 我有一个构造函数,它初始化所有参数并创建事件.
  • 我有一个巨大的State属性,当用户进入应用程序(即:断开连接,连接,设置,扫描)由状态枚举控制时,它会更新我所有表单控件的Enabled状态.
  • 我有3-10个通过属性访问的私有变量,其中一些在更改表单元素的值时有副作用.
  • 我有很多"UpdateXXX"函数来处理依赖于其他UI元素的UI元素 - 即:如果传感器被更改,则更改波特率下拉列表.它们分为几个区域
  • 我有很多事件调用这些Update函数
  • 我有一个后台工作人员,负责所有扫描和分析.

我的问题是这看起来像一团糟,特别是国家财产,并且变得无法维护.此外,我的应用程序逻辑代码和UI代码在同一个文件中,在某种程度上,混合似乎是错误的,这意味着我需要做很多滚动才能找到我需要的东西.

你如何构建.net表单?

谢谢

.net code-organization winforms

11
推荐指数
2
解决办法
2022
查看次数

我应该把很多功能放到一个文件中吗?或者,或多或少,每个文件一个函数?

我喜欢组织我的代码,所以理想情况下我想要每个文件一个类,或者当我有非成员函数时,每个文件需要一个函数.

原因是:

  1. 当我阅读代码时,我将始终知道在哪个文件中我应该找到某个函数或类.

  2. 如果它是每个头文件的一个类或一个非成员函数,那么当我include成为头文件时,我不会包含整个混乱 .

  3. 如果我在函数中做了一些小改动,那么只需要重新编译该函数.

但是,将所有内容拆分为许多标头和许多实现文件都会使编译速度变慢.在我的项目中,大多数函数访问一定数量的模板化其他库函数.因此代码将反复编译,每个实现文件一次.编译我的整个项目目前在一台机器上需要45分钟左右.大约有50个目标文件,每个目标文件使用相同的昂贵编译头.

也许,每个文件有一个类(或非成员函数)是可接受的,但是将许多或所有这些函数的实现放在一个实现文件中,如下例所示?

// foo.h
void foo(int n);

// bar.h
void bar(double d);

// foobar.cpp
#include <vector>
void foo(int n) { std::vector<int> v; ... }
void bar(double d) { std::vector<int> w; ... }
Run Code Online (Sandbox Code Playgroud)

同样,优点是我可以只包含foo函数或只包含bar函数,整个项目的编译速度会更快,因为foobar.cpp一个文件,所以std::vector<int>(这只是其他一些昂贵的例子)编译模板化构造)必须只编译一次,而不是两次编译a foo.cppbar.cpp单独编译.当然,我上面的原因(3)对于这种情况是无效的:刚刚改变foo(){...}之后我必须重新编译整个可能很大的文件foobar.cpp.

我很好奇你的意见是什么!

c++ build-process file-organization compilation code-organization

10
推荐指数
4
解决办法
1万
查看次数

组织PHP网站应用程序的好方法是什么?

在做大型项目时,我的代码似乎到处都是.你们是如何组织代码的?

php code-organization

10
推荐指数
1
解决办法
7330
查看次数

我即将在Sourceforge上开源一个C++项目.我可以获得有关代码组织的一些提示吗?

我即将在GPL下上传一个我一直在使用Sourceforge的项目,并希望得到一些关于如何以易于理解和使用的方式组织代码的建议.它,适用于git,以及Sourceforge呈现的方式.

我的项目是一个跨平台的C++应用程序,包括以下内容:

  • 图书馆部分,负责实际工作
  • 一个单独的GUI部分,它使用库部分
  • 开源库,编译库需要包含路径
  • 修改过的开源库已被修改,因此在某种意义上也是该项目的直接部分
  • 编译所有库的输出

组织这个的最好方法是什么?

在我自己工作的时候,从项目根目录开始我就像这样:
/ LibPortion
/ GuiPortion
/ libs /开源库
/ libs /修改的开源库
/ libs/compiled /来保存已编译的库,包括编译Windows时的一些这不是来自开源库,例如Cygwin库文件

这是组织事物的明智方式吗?这符合惯例和期望吗?

在检查我的项目时,检查开源库以及项目的一部分是否有意义?我认为这样做是有意义的,因为这可以最大限度地减少摩擦,使项目设置并运行新的开发.当然我至少应该检查修改后的开源库.

另外,在编译库下包含在存储库中有什么意义?我认为最好告诉git忽略该目录并将其留空,因为它的内容在每个构建目标上都会有所不同,因为我的项目是跨平台的.

然而,对于那些不想为构建和/或下载所有库本身来提供为主要平台预编译的库而烦恼的人来说,这似乎也很不错.分享这些最聪明的方法是什么?我正在寻找Sourceforge,对我来说,如果不是作为我的git存储库的一部分,我应该如何分享这些内容并不是很明显.

c++ sourceforge code-organization

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

在部分类中实现接口

考虑一个实现大量接口的类,使用partial class定义在单独的文件中实现每个接口是否有意义?

这是滥用语言功能还是我不知道的成语?

.net c# interface code-organization partial-classes

10
推荐指数
1
解决办法
5272
查看次数

如何组织Python API模块使其整洁?

我正在写一个表示某些Web API的Python库。现在,我的库目录看起来与此相似:

  • __init__.py
  • Account.py
  • Order.py
  • Category.py
  • requests.py

在中__init__.py,我有类似以下内容:

from .Account import Account
from .Order import Order
from .Category import Category
from . import requests
Run Code Online (Sandbox Code Playgroud)

这允许先使用import cool_site然后再cool_site.Account(…)进行诸如此类的操作,但是存在以下问题:当我在IDLE中处理代码时,该对象随后被称为cool_site.Account.Account,这感觉很不好。

1.有什么方法可以避免类名重复,并且每个类仍然有单独的文件?

接下来我感到不满意的是我的代码组织。现在,我的Account班级接受初始化凭证,创建一个requests.Session对象,然后处理与服务器的所有通信,即搜索订单等。Account然后,此类实例将自身传递给所有其他实例,例如传递给Order-,因此订单的实例将具有.account保存Account创建它的实例的属性。当另一个类实例本身必须执行某项操作时(例如,更改订单的注释)(通过调用o.comment = 'new comment',由类中的@comment.setter装饰器进行更改Order),它将其转发给一个Account对象,该对象在初始化时传递给该对象,然后使用example self.account.set_order_comment(new_comment)。然后,此方法将使用所有Web请求来实现该目标。

2.最好将服务器通信逻辑放在一个类中,或者将它的不同方面传播到受它们影响的类中?

我想问的最后一件事是如何以及在哪里保留低级请求模板。现在我在cool_site.requests子模块中有它,针对不同的请求有不同的功能,例如SetOrderComment上述情况(这是一个功能,因此应该小写,但是在这种情况下,我认为它在某种程度上类似于类-是可以吗?)。该Account.set_order_comment会使用这样的:

r = cool_site.requests.SetOrderComment(order.id, new_comment)
response = self._session.request(**r)
Run Code Online (Sandbox Code Playgroud)

因为此函数会返回一个带有参数的字典,以Session.requestrequests库中获取函数。身份验证标头已在类实例的_session …

python usability readability api-design code-organization

10
推荐指数
1
解决办法
215
查看次数