是否推荐 SilverStripe 3.x 中的命名空间?

Is namespacing in SilverStripe 3.x recommended?

在我的自定义代码上使用名称空间后,在使用 SilverStripe 时遇到很多问题。主要问题是 SilverStripe 用于存储命名空间 类:

的命名约定

名称空间为 MyStore 的名为 Product 的数据对象创建了名为 Product\MyStore 的 table。斜杠在命名约定中是一个相当愚蠢的选择,因为它是 MySQL.

中的转义序列

现在的问题是我正在尝试从 CLI 中手动删除 table 中的过时字段,并且无法手动编写转义此类 table 名称的查询。

describe Product\MyStore
describe "Product\MyStore"
describe 'Product\MyStore'
describe "Product\MyStore"
describe 'Product\MyStore'
describe Product\MyStore

不过这很好:

describe SiteTree

我必须问,是否因此在 SilverStripe 中推荐命名空间?我非常接近撕掉所有命名空间,因为它在 3.5 中的处理方式适得其反。

UPDATE:为了将来的搜索,要在 CLI 中解决这个问题,您必须将 table 名称用反引号括起来。

describe `Product\MyStore`

尽管它们的用途(或导致它们被使用的原因 - 例如命名不当 tables)似乎 arguable in the MySQL community。我会留下这个问题,因为它在事物的命名约定方面可能仍然有效。

简短回答:否(编辑:是?- 见下文)

虽然有可能,但我强烈建议您不要在 SilverStripe 3 中使用命名空间,而是等待 SilverStripe 4。 我本人曾尝试在几个带有 SilverStripe 3.2 的项目中使用命名空间,但在各个方面都遇到了很多麻烦,我最终成功了,但 is/was 不值得付出努力。 因此,我恢复到非命名空间设置。

但有个好消息,SilverStripe 4 目前处于 alpha 阶段,我有一种很好的感觉,我们实际上很快就会看到一个版本(几个月)。 我实际上已经有 2 个项目在开发中使用 SilverStripe 4,其中一个是将在几周内上线的社区项目。 因此,如果您的项目要进行较长时间的开发,或者您只是愿意承担风险,您可能需要考虑已经使用 SilverStripe 4。

编辑:其他人指出他们比我更成功。尤其是 >=3.5。所以我不得不假设在我尝试使用它们之后,与命名空间的兼容性得到了改善。