问题标签 [code-organization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
8666 浏览

c# - 如何将 C# 代码组织到文件中?

在 C# 中,创建什么类型、应该拥有什么成员以及应该拥有什么名称空间等问题都是面向对象设计的问题。它们不是我在这里感兴趣的问题。

相反,我想问一下您如何将这些存储在磁盘工件中。以下是一些示例规则:

  • 将程序集的所有类型放在一个源文件中。一位这样做的朋友说“文件是一种古老的代码组织工具;今天我使用 classview 和 Collapse to Definitions 来浏览我的代码”。

  • 将所有代码放在一个程序集中。使部署和版本控制更简单。

  • 目录结构反映命名空间结构。

  • 每个命名空间都有自己的程序集。

  • 每种类型都有自己的程序集。(作为一个极端的例子列出。)

  • 每种类型都有自己的源文件。

  • 每个成员都有自己的文件;每种类型都有自己的目录。(作为一个极端的例子列出。)

0 投票
9 回答
13261 浏览

c - 在 C 中定义 const 值

我有一个 C 项目,其中所有代码都组织在*.c/*.h文件对中,我需要在一个文件中定义一个常量值,但是它也将用于其他文件。我应该如何声明和定义这个值?

应该static const ...*.h文件里的一样吗?如extern const ...*.h文件中并在文件中定义*.c?如果值不是原始数据类型(int,double等),而是 achar *或 a ,这有什么关系struct?(虽然在我的情况下它是一个double。)

通常,在文件中定义东西*.h似乎不是一个好主意。应该在文件中声明事物*.h,但在文件中定义它们*.c。但是,这种extern const ...方法似乎效率低下,因为编译器无法内联该值,而是必须始终通过其地址访问它。

我想这个问题的本质是:是否应该在 Cstatic const ...中的文件中定义值*.h,以便在多个地方使用它们?

0 投票
3 回答
1074 浏览

java - 在 Swing 应用程序中组织动作?

我当前的应用程序有一个 JFrame,其中大约 15 个操作存储为 JFrame 中的字段。每个动作都是一个匿名类,其中一些很长。

将动作分解成自己的类是否常见,可能在称为动作的子包中?

如果不是,通常如何驯服这种复杂性?

谢谢

0 投票
4 回答
10752 浏览

c - 关于用 C 组织代码文件的最佳文章

你能推荐我为了用 C 编写一个组织良好的代码我应该阅读/学习什么吗?

我想学习的一件事是在 .h 和 .c 文件中拆分项目的原则,去哪里以及为什么,变量命名,何时使用全局变量......

我对处理这个特定问题的书籍和文章感兴趣。

0 投票
4 回答
5887 浏览

svn - 组织许多小项目的颠覆存储库的最佳方式

首先,我查看了以下页面并没有完全得到我的答案: how-would-you-organize-a-subversion-repository-for-in-house-software-projectshow-do-you-组织你的版本控制存储库

我还查看了使用 Subversion 的实用版本控制的第 8 章。

他们都有很好的建议,但我很难将其与我的需求联系起来。

基本上,我想为我们的 Web 服务器组织代码。我们有一个 $WEBROOT/htdocs 和 $WEBROOT/cgi-bin。在我们的 htdocs 目录下,我们有 $WEBROOT/htdocs/js 和 $WEBROOT/htdocs/css 用于 java 脚本和样式表。

我们的“项目”并不是真正的项目,而是一小段代码——可能是 Perl 脚本、java 脚本文件和样式表。我们可能有大约一百个这样的小“项目”,它们几乎相互独立,但都存在于同一个网络服务器上的同一个 $WEBROOT 下。

我们的代码还没有被颠覆,但我希望它是——我只是在有效地组织它时遇到了麻烦。如果需要,我们可以有多个 svn 存储库,但是如果每个存储库只有 3-10 个元素,那对我来说似乎是一种浪费。

我认为可以工作的是这样的:如果我编写一个脚本来计算网络服务器上正在运行的进程(为了一个例子)。假设我有一个 perl 脚本、一个 js 文件和一个 css 文件。我可以将“项目”命名为 webserver_processes,并将其签入到存储库中:

在树干下,我可以拥有:

我在这个“项目”中没有任何静态 html 文档,但如果我有,它们会进入“html”目录。

我在这种结构中看到的好处是我可以一次签出一个“项目”,而不会真正影响 Web 服务器上的任何其他内容。缺点(也许它不是真正的缺点)是部署。我必须一次从存储库部署 1 个项目。我看不出如何使用这种方法用我的 $WEBROOT/htdocs 和 $WEBROOT/cgi-bin 结构创建工作副本。

另外一个选项:

我可以像这样创建一个 svn 存储库:

在主干下将是我的网络服务器上的所有代码,在这两个目录中:

最大的缺点是,对于 1 个元素的小代码更改,我必须检查我的 Web 环境中的每一段代码。好处(有点)是我可以在我们的 Web 服务器上执行“svn update”来获取提交给存储库的任何更改。

也许我只是让这变得比它应该的更复杂,但是有人对我如何有效地在颠覆中组织我的代码有任何建议吗?

提前谢谢了!

布赖恩

0 投票
9 回答
13776 浏览

c++ - 我应该将许多功能放在一个文件中吗?或者,或多或少,每个文件一个函数?

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

原因是:

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

  2. 如果每个头文件是一个类或一个非成员函数,那么我 include在头文件时不会包含一团糟。

  3. 如果我对一个函数做一个小的改动,那么只有那个函数需要重新编译。

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

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

同样,优点是我可以仅包含 foo 函数或仅包含 bar 函数,并且整个项目的编译会更快,因为foobar.cpp一个文件,所以std::vector<int>(这只是其他一些昂贵的示例compile 模板化构造)必须只编译一次,而不是如果我单独编译 afoo.cpp和两次bar.cpp。当然,我上面的理由 (3) 不适用于这种情况:在更改 foo(){...} 之后,我必须重新编译整个可能很大的 file foobar.cpp

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

0 投票
4 回答
1439 浏览

version-control - 如何组织我的所有代码、数据、脚本、任务等?

您会向“单人团队”推荐哪些工具或方法来保持井井有条?

我正在做涉及大量编码的研究,编写数百个一次性的 perl 脚本,在找到更好的方法之前使用的 C++ 二进制文件,以不同方式预处理的大量数据,其中一些新的预处理使旧方式已过时——直到我发现旧方式实际上更好,依此类推。我的工作本质上是一个移动的目标,因为我必须尝试很多事情,而且往往没有一个是完美的。

这不是一个完全混乱的情况,但也远非完美。在这种情况下,您会推荐一般方法吗?我确实使用SVN了我的代码,但不是用于不同版本的数据,因为它太大了。很难跟踪所有脚本和二进制文件,所以我总是评论它们,写下我是如何运行它们的等等。但我很好奇你是否还有其他想法。

(我在linux系统上工作。)

0 投票
10 回答
20543 浏览

c++ - C++ 头文件顺序

在 header/cpp 文件中应该以什么顺序声明 headers?显然,后续标头所需的那些标头应该更早,并且特定于类的标头应该在 cpp 范围内而不是标头范围内,但是是否有固定的顺序约定/最佳实践?

0 投票
6 回答
473 浏览

code-organization - 在单个文件中包含多少代码?

我今天想知道人们在决定将其拆分为多个较小的文件之前,通常在单个源文件中有多少代码。

就我个人而言,我倾向于保持我的文件相当小(特别是使用 C/C++ 时的头文件)。也就是说,我通常在给定文件中只有一个类或一堆函数,因此文件通常 <500 行。然而,所有相关的东西通常共享相同的命名空间。

另一方面,我使用的一些东西似乎很乐意尝试尽可能多地粘贴到单个文件中,该文件有 1000 行长。

我更喜欢小文件,因为任何更改只需要重新编译那一段代码,而且我发现将源代码分解为每个具有特定目的的较小文件时更容易导航源代码,而不是一个关于整个事物的大文件。几个大文件有什么真正的优势吗?

例如,我的粒子系统被分解为 system.h、emitter.h、load.h、particle.h 等,并且每个都有对应的 .cpp 文件。然而,我查看的一些粒子系统似乎已将整个源放入单个 .h 和 .cpp 1000 行长的行中。

0 投票
9 回答
8550 浏览

c++ - 编译只有头文件的 C++ .lib?

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

为什么是这样?