【发布时间】:2013-07-29 15:53:59
【问题描述】:
我正在学习 Rails。
在某个地方,我注意到看似随机的文件夹和文件出现在我的 rails 应用程序目录中。在某些文件夹中有一个concerns 文件夹,里面有一个.keep 文件。 .keep 文件似乎是空的。在其他文件夹中没有concerns 文件夹,但存在一个空的.keep 文件。
有谁知道这些文件/文件夹的处理方式是什么?
【问题讨论】:
标签: git version-control
我正在学习 Rails。
在某个地方,我注意到看似随机的文件夹和文件出现在我的 rails 应用程序目录中。在某些文件夹中有一个concerns 文件夹,里面有一个.keep 文件。 .keep 文件似乎是空的。在其他文件夹中没有concerns 文件夹,但存在一个空的.keep 文件。
有谁知道这些文件/文件夹的处理方式是什么?
【问题讨论】:
标签: git version-control
.keep 文件是 0 字节文件,用于阻止空文件夹被各种进程忽略。没什么好担心的。
【讨论】:
.gitignore 中吗?我宁愿不提交空文件。
.keep 文件在你想用 git 提交空目录时特别有用。
有趣的是,.keep 或 .gitkeep 的名称毫无意义。您可以调用文件.foo 以获得相同的效果,它只是一个可读的约定。
.keep 文件也可以帮助从一个 vcs 移植到另一个 vcs,防止在取消合并会导致这些目录为空的内容时删除重要目录。
例如,考虑一个脚本,它试图将cd dir 放入一个未被 git 跟踪的目录。
这是一种软件设计范式,旨在减少开发人员需要做出的决策数量,获得简单性,但不一定失去灵活性。
【讨论】:
关注是一个简单但强大的概念。它的存在是为了代码的可重用性。基本上,这个想法是提取常见和/或特定于上下文的代码块,以清理模型并避免它们变得过于臃肿和难以管理。
我想明确指出您应该使用服务对象来提供与特定对象无关的功能。例如,一个组织有很多用户。现在组织的管理员需要为此组织导出所有用户的 CSV。这段代码可以放在组织模型中,但由于它不是组织对象的责任,所以这段代码应该放在一个类中,你只需传递组织对象并返回所有用户的 CSV。
class Services::GenerateCsv
def self.get_users org
#add logic the fetch users for the org and generate the CSV and return the CSV data
end
end
当您需要生成 CSV 时,您可以将该逻辑放在上述类中。这种方法使对象(在本例中为组织模型)远离不应由其负责的代码。我遵循的一般原则是:如果代码正在修改 self 对象,则将代码移动到服务对象。
注意:您的问题是关于问题的,但我想添加一些额外的东西来保持代码库的清洁和可管理性,因为它可能会帮助其他程序员。上述方法值得商榷。
【讨论】: