关于路径的最佳做法是什么?

时间:2013-10-13 13:53:48

标签: path pseudocode

我多次被这个话题搞糊涂了,被它咬了一口。我查阅了许多最佳实践文章和定义,但在我看来,路径并没有精确定义,绝对和相对路径似乎根据上下文而变化很大。

问题的简短版本:始终随身携带(并转换成)代码中的绝对路径?但总是把它们写成亲戚。

作为一个业余爱好者,由于同时处理后端和前端,我不断切换上下文,并且我没有提出规则来保持一致并在涉及路径时创建可移植代码。

基本上似乎有路径类型。 绝对路径相对路径。但我经常遇到第三种类型,对我来说可能会被命名为绝对相对路径。我面临的挑战是知道应该存储哪一个以及可能出现的并发症。

这是绝对路径:

/home/me/css/style.css

但不是在Windows上。上面会在Windows上做什么?它必须是这样的:

C:/home/me/css/style.css

在Linux上运行的绝对路径是指使用Windows是完全不同的东西。它变得相对于当前分区。

/home/me/css/style.css

变为

C:/home/me/css/style.css

在这种情况下这是正确的,但如果实际应用程序在不同的分区上运行,则可能不正确。使用绝对路径因此,如果需要可移植性,“Unix风格”是有问题的。

这是目录的绝对路径:

/home/me/css/

但这也是目录的绝对路径:

/home/me/css

因此,添加另一个斜杠纯粹是向作者传达其他信息,是吗?

这是一个相对路径:

css/style.css

到目录:

css/

如果在HTML文档中使用,则为绝对相对路径:

<a href="/css/style.css">Link</a>

虽然它指向最顶层的css目录,而不管地址当前指向的位置,但它仍指向Web服务器分发的目录。因此它是绝对使用的,但相对于实际的文件系统。或者在许多情况下,到当前的工作目录。纯粹的相对路径也是如此。如果我创造这样的路径,我必须记住,即使它们看起来像绝对路径,它们实际上不是。混乱。

如果应用程序本身被移动到另一个目录,那么我必须提出一个解决方案。这就是我想知道存储相对路径是不是一个坏主意的地方。假设我们编写一个名为blogger的静态博客生成器,它通过git下载到某个目录。

/home/me/blogger

应用程序中的所有路径都是相对的,因此我们在伪代码中调用类似于create_dir('output')的东西。现在我们可能认为将应用程序移动到其他位置并让用户有机会自己提供输出目录是个好主意。突然间,所有路径定义都将中断。它们变为create_dir(absolute($output_dir) + 'output')

我发现这种计算在某些时候变得非常冗长和复杂。特别是如果仍然存在一些相对于应用程序保留的文件或目录,例如模板或类似文件。但他们也可能会在未来移动,所以我发现自己编写的代码如copy_dir(cwd() + 'templates', absolute($output_dir) + 'output')

但是等等,当前正在运行的目录不一定是应用程序所在的位置,尤其是在类似unix的系统上。 如果应用程序不知道它对应用程序目录是绝对的还是对当前目录是绝对的,那么绝对如何生成绝对路径?我们必须假设后者,因此调用absolute()不是一个好主意,而是cwd() + $output_dir。值得庆幸的是cwd()通常会返回已经绝对的路径。我们只能在用户提供的路径实际上是相对的时才这样做,但如果它是绝对的则不行。值得庆幸的是标准库有办法解决这个问题,但是天真的方法会爆炸,我们最终会得到像“C:/ C:/ css”这样的东西。

假设用户从未提供我们可以使用的绝对路径:

copy_dir(absolute(app_dir()) + 'output', cwd() + $output_dir)

然后我对自己说,好吧,我每次使用这些文件时都必须这样做,那么为什么不一次这样做并随身携带$abs_output_dir呢?突然间我遇到了一个问题,我必须将绝对相对路径输出到HTML文档中,我不能使用$abs_output_dir,因为我不得不切断绝对部分,因此它相对于用户提供的{ {1}}。在这一点上,我的思绪通常都会被摧毁,我要么对每条路径进行硬编码,要么随身携带$output_dir $output_dir$abs_output_dir以及$rel_abs_output_dir,并尝试保持一致日期。

因此,只有携带绝对路径的想法似乎是一个好的,除非我们每个人都必须输出相对路径或绝对相对路径到文件。程序员通常是这样做的吗?

0 个答案:

没有答案