问题标签 [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.
c++ - C++项目源代码布局
组织项目目录的一种流行方式或多或少是这样的:
app.cpp
:
同一个库的所有.h
和.cpp
文件都在同一个目录中。为避免名称冲突,文件名通常以公司名称和/或库名称作为前缀。MyLib 将位于 MyApp 的头文件搜索路径等中。我不喜欢为文件名添加前缀,但我喜欢查看#include
并确切知道该头文件所属位置的想法。我不讨厌这种组织文件的方法,但我认为应该有更好的方法。
由于我正在开始一个新项目,因此我想征求一些目录组织的想法。目前我喜欢这个目录结构:
app.cpp
:
.cpp
文件和私有(仅对直接库可见).h
文件存储在 src 目录下(src 有时称为 lib)。公共头文件被组织成一个 project/lib 目录结构,并通过<ProjectName/LibraryName/headerName.h>
. 文件名没有任何前缀。如果我需要打包 MyLib 以供其他团队使用,我可以简单地更改我的 makefile 以复制适当的二进制文件和整个 include/ProjA 目录。
一旦文件被检入源代码控制并且人们开始处理它们,就很难更改目录结构。最好一开始就做好。
任何有组织这样的源代码经验的人?你有什么不喜欢的吗?如果你有更好的方法,我很想听听。
java - 引用 JAXB jar - 最佳实践
我的第一篇文章,所以放轻松。
我正在寻找有关组织和引用第三方 jar 以在我的 j2ee Web 应用程序中使用的建议。我需要整理和引用的 jars 是 JWSDP-2.0 JAXB api jars。
我正在使用 Eclipse 和 Tomcat 5.5。我的 Web 应用程序与 Web 服务交换 XML,因此需要使用 JWSDP-2.0 中的 JAXB api 进行一些 XML 编组和解组。
我已经下载了 JWSDP-2.0 并安装到我的电脑上。我现在正在尝试找出最佳方法,使其中包含的必要 jar 文件可用于我机器上的 eclipse 中的 Web 应用程序,以及我机器上的 Tomcat 以及最终的测试和生产服务器上的 Web 应用程序。
我开始只是将 .jar 文件复制到我项目的 WEB-INF/lib 文件夹中。这意味着当部署到 Tomcat 时,jar 文件现在将在 .war 中导出。但是,我不喜欢这样,因为 jar 文件来自 JWSDP-2.0 中的几个不同的库,像这样复制它们意味着它们只是被扔在一起,而不是像 JAXB、JAXP、SAAJ 等那样很好地分开。还有,有一些名称冲突,例如,我的 Web 应用程序已经包含旧的 xml 解析 jar,例如 xalan.jar,它们已经被 Web 应用程序的不同部分使用。
然后我删除了所有这些 jar,并在 eclipse 中创建了一系列用户库,例如“jwsdp-2.0_jaxp”、“jwsdp-2.0_jaxb”,它们从 WSDP-2.0 安装中的位置引用这些 jar。就在 Eclipse 中编译我的 Web 应用程序而言,这工作得很好,但是我现在需要使这些 jar 可用于 Tomcat,而且我在最好的方法上有点卡在那里。
所以,在基本层面上,我的问题是如何获取 Tomcat 中引用的 jar 文件?
更一般地说,我正在寻找一些关于在项目中引用和包含第三方 jar 的最佳实践的建议,以期顺利部署到服务器。
如果有人可以推荐任何关于代码组织和部署的好文章/书籍/资源,这将帮助我学习这种场景的最佳实践,那就太好了
提前喝彩。
php - 如何编写一个简单的版本控制系统?
我想做一个简单的版本控制系统,但我不知道如何构造我的数据和我的代码。
这是一个简短的例子:
- 用户登录
- 上传文件时,用户有两种选择:
- 提交新文件
- 提交文件的新版本
用户应该能够看到树。(不同版本)树最多只能有 2 个级别:
文件也有2种类型,一个final(这是最新批准的版本)和一个draft version(最新上传的文件)文件将物理存储在服务器上。每个文件由一个用户(或多个)拥有,并且只有一个组。
编辑:组代表一组文档,文档一次只能由一个组拥有。用户不依赖于组。
开始编辑:
这是我所做的,但效率不高!
但是很难管理,很难扩展。我认为这是因为组参数...
结束编辑
所以问题是:
- 我怎样才能架构化我的数据库?
- 什么样的信息应该对这个作品的版本有用?
- 文件夹、文件的结构是什么样的?
- 你有什么样的提示,提示你做这种工作?
(应用程序是用PHP和Zend Framework开发的,数据库应该是mysql或postgresql)
asp.net - 在我的项目中组织文件的最佳方式
组织项目中文件的最佳方式是什么?
例如,您是将所有用户控件放在单独的文件夹中还是将它们放在子文件夹中?你有业务逻辑文件夹吗?助手类文件夹?
我曾经这样组织我的项目:
项目/用户控件/模块名称/项目/类/模块名称/
现在我正在学习更多类似的东西:项目/模块名称/用户控件/项目/模块名称/类/
什么是最好的方法?特别是如果项目变得非常大?应该存在什么类型的文件夹结构?
database - 按应用程序主题组织 SQL 文件值得头疼吗?
在我的公司,我们将每个数据库对象(存储过程、视图等)保存为单独的 SQL 文件,并以这种方式将它们置于源代码控制之下。
到目前为止,我们的版本化文件结构中有一个非常扁平的存储模型:
DatabaseProject
Functions
- (这里的所有功能;没有进一步的嵌套)
StoredProcedures
- (所有存储的过程都在这里;没有进一步的嵌套)
Views
- (同上)
对于一个大的新项目,我想到了另一个想法:为什么不按主题存储这些文件,而不是在这些预制平面列表中?
例如:
DatabaseProject
Reports
- (个人存储过程、视图等)
SpecificReport
- (这里有更多对象,必要时进一步嵌套)
SpecificApplication
- (所有类型的 DB 对象,任意深度嵌套)
- 等等....
明显的缺陷是这种文件夹结构没有对数据库对象施加任何类型的命名空间层次结构。它仅用于组织。因此,很容易引入具有重复名称的对象。您需要某种构建工具来调查数据库项目并死于命名冲突。
我想知道的是:有没有人尝试过这种按应用程序主题在其版本化文件结构中组织 SQL 文件的方法?它值得吗?您是否创建了一个构建工具来监督我所描述的项目?
javascript - 将javascript与HTML分开是不可能的吗?
具体来说,我说的是避免这种类型的代码:
在这里,我想将onfocus
和onkeypress
事件句柄分开放置,即放在一个 .js 文件中。像这样:
但是这里的问题是文本框的 ID 需要传递给函数updateCharsLeft()
。不得不从该函数中的文本框的 ID 中提取 id 会很糟糕,因此将事件处理程序放入 HTML 代码中实际上会更干净。
想法?
asp.net - 我应该把我的 JavaScript - 页面或外部文件放在哪里?
在 VS 2008 中,我有一个具有一个母版页的 ASP.NET 内容页面。我想为此页面添加用于客户端验证等的 JavaScript 函数。我的问题是:
- 我应该将这些脚本写在单独的
.js
文件中,还是嵌入.aspx
文件中。 - 这种选择会影响网站的性能吗?
- 编写 JavaScript 文件有什么规则吗?
r - 如何组织大型 R 程序?
当我承担任何复杂的 R 项目时,我的脚本很快就会变得冗长和混乱。
我可以采用哪些实践来使我的代码始终令人愉快地工作?我正在考虑类似的事情
- 在源文件中放置函数
- 何时将某些内容分解为另一个源文件
- 主文件中应该包含什么
- 使用函数作为组织单位(考虑到 R 使得访问全局状态变得困难,这是否值得)
- 缩进/换行实践。
- 对待(像 {?
- 将 )} 之类的内容放在 1 行或 2 行上?
基本上,您组织大型 R 脚本的经验法则是什么?
organization - 有一个大的实用程序文件很淘气吗?
在我的 C 项目中,我有一个相当大的 utils.c 文件。它确实充满了许多不同类型的实用程序。只是在里面塞入不同的杂项功能,我觉得有点调皮。例如,它有一些与低级相关的实用程序,例如小写()函数,它还有一些非常复杂的实用程序,例如转换为/从不同的颜色格式转换。
我的问题是,有这么大的 utils.c 里面有许多不同类型的实用程序是不是很顽皮?我应该把它分解成许多不同类型的实用程序文件吗?比如graphics_utils.c等等你怎么看?
java - 为什么每个公共类都在一个单独的文件中?
我最近开始学习 Java,发现每个 Java 类都必须在单独的文件中声明,这很奇怪。我是 C# 程序员,C# 不强制执行任何此类限制。
为什么Java会这样做?是否有任何设计考虑?
编辑(基于几个答案):
为什么 Java 现在没有在 IDE 时代消除这个限制?这不会破坏任何现有的代码(或者会吗?)。