为什么要建立自己的 CMS?

22
在我的第一次工作面试中,我被问到为什么要构建自己的CMS?为什么不使用现有的CMS,如Wordpress、Joomla、Drupal等?起初,我感到惊讶。我无法立即回忆起构建自己的CMS的所有原因,但这绝对是主要原因之一:这是我的代码,如果我想在CMS中更改某些内容(我经常需要这样做,因为每个我构建的网站都需要不同功能的CMS),那就不是一个大问题。有一段时间我一直在使用WordPress,其中让我分心的主要事情之一是发现了我没有编写的代码中的错误,并且这些错误经常出现,特别是如果我对CMS进行了一些更改或添加了插件...

在这里,我可以找到这8个原因,说明为什么不要构建自己的CMS:

  1. 它不能满足用户的需求

  2. 这是太多的工作

  3. 它不会成为标准解决方案

  4. 它扩展不够快

  5. 它没有经过充分的测试

  6. 它不易于更改

  7. 它不会增加任何价值

  8. 创造内容,而不是功能


来自同一页面的引用:

因此,要问自己的主要问题是:“为什么我要重新解决已经解决了的问题?”


我完全同意说,发明一种此前不存在的CMS是困难的,但另一方面,我认为每个CMS都应该是独特的(或应该是独特的)...它可能没有数百万个功能,但它们的使用方式对于用户来说是清晰的,并能满足一个网站需要具有的所有功能。我还认为,给客户一个拥有许多从未使用过的功能的CMS并不好,当网站和CMS一起看起来像一个产品时,它似乎更专业。

我也想评论一些引用部分:
"这太麻烦了" - 我同意,但是使用现有的CMS并将其定制到网站需求可以是非常困难的工作,甚至可能是不可能完成的任务。
"它不会容易更改" - 对于这一点,我不同意。

你对此有什么看法?你为什么开发或不开发自己的CMS?
Ile


我的观点是,即使一个CMS已经存在,为了满足特定网站的需求而进行定制也是有价值的。一个好的CMS应该具备易用性和可靠性,而不是只有数量庞大的功能。在给客户提供CMS时,我们应该考虑他们的需求,并且需要注意,将一个网站和CMS看起来像是一个产品会让整个网站更具专业性。至于我为什么没有开发自己的CMS,这可能是因为我更喜欢在现有CMS上进行定制,并且我相信有很多优秀的CMS可以满足大部分客户的需求。

5
这应该是一个社区维基问题。 - FrustratedWithFormsDesigner
这个问题只能由满足以下两个条件的人回答:1. 开发过自己的 CMS,并且在生产环境中使用过;2. 使用过现成的 CMS,并将其适应之前存在的需求,并在生产环境中使用过。 - Chris
2
@Chris:我认为任何有丰富的Web开发经验的人都可以回答或发表对这个问题的看法。 - ilija veselica
我不同意将这个问题设为社区维基。这是一个表述清晰的技术问题...也许更适合放在programmers.stackexchange.com上,但无论如何。 - Kos
6个回答

19

这是一个有趣的问题,适用于大多数开发过程,不仅仅是建立内容管理系统时。

总的来说,我认为重新造轮子是不好的想法(你提到的8条理由在大多数情况下都是正确的),但也有例外。我首先想到的是Joel Spolsky在In Defense of Not-Invented-Here Syndrome中提到的一点:

如果它是一个核心业务功能 - 不管怎样,自己做。

重点是,如果你的收益直接来自于构建内容管理系统,你不应该从他人那里拿一个并调整它以使其适合你。你更愿意完全控制自己的产品。

编辑:

此外,不要忘记重新发明事物的冲动源于编程的一个基本规律:

编写代码比阅读代码容易

这并不意味着我们应该选择看起来更容易的道路,但它解释了为什么我们会陷入其中。挑战自己,经常阅读一些代码,而不是只编写代码。


我不知道为什么,但当涉及到使用别人的代码并且知道将来需要对其进行一些更改时,我有点怀疑,也许这就是让我不使用它的原因。有人在这里提到,如果你正在构建CMS以学习它和学习新技术,那么这样做是好的。嗯,我也被这个想法所吸引。 - ilija veselica

15

我希望建立一个CMS,因为这可以是件有趣的事情,同时也是一个很好的学习经验。

然而,任何开源CMS都可以根据客户的需要进行定制。最大的问题在于,您必须理解该CMS的工作方式,才能够很好地进行更改。

无论如何,您都将面临相当大的任务,但我必须同意那些说您不应该从头开始创建(除非您是为了学习一些新技术)的人们,正是基于您提出的原因...就像他们所说的那样:除非您想了解轮子,否则不要重新发明轮子


1
我会构建一个CMS,因为它可以很有趣,也是一个很好的学习经验。虽然我在问题中没有写明,但这也是我开始构建它的主要原因之一。 - ilija veselica
2
除非你想学习轮子,否则不要重复造轮子。这是所有“我想编写自己的编译器/操作系统/CMS/数据库”等问题的答案。太棒了!简短明了,给你加10分! - ERJAN

7
我发现当项目的上下文超出了“内容站点”时,它会起作用。我曾在许多房地产网站上工作过,这些网站的大部分内容都来自数据源,或者已经存在于数据库中,并且其结构早在你参与之前就已经设置好了。实际上,我们只有少量的“内容”页面组成了网站,并且很少更新。他们真正需要的是一个简单的数据输入界面。建立一些独立的组件比试图在现有系统之上强行安装一个开箱即用的CMS要容易得多。
像其他人提到的那样,您必须考虑整体要求。是否涉及工作流程?动态导航?然后我会更倾向于使用开箱即用的CMS,但很多时候人们说他们需要一个CMS,而实际上他们只需要一个所见即所得的界面来访问数据库。但有时并非如此...

7
似乎除了安全问题之外,不建立自己的CMS最大的原因是缺乏支持和升级路径。将客户放在定制的CMS上,然后只能依赖于您提供支持和更新服务,这对客户是一种不负责任的行为。更糟糕的是,让客户支付定制CMS的开发费用 - 无论网站需求多么简单,他们都在付款让您重复发明轮子。
如果您的需求超出了内置功能,则有很多CMS选项可以让您添加自定义扩展。
构建自定义CMS的最佳原因(可能也是唯一的原因)是为了深入学习语言。构建CMS是学习Web开发的好方法,但它并不是为客户提供服务的好方法。

3
作为一个总是被要求用更少的资源做更多事情的团队领导,我也会问“为什么你要自己写呢?”市面上有比编程语言还多的CMS软件包,我很难相信你找不到一个能满足大部分(如果不是全部)客户、业务和成本需求的软件包。
如果你发现需要进行代码更改,请选择开源解决方案,根据需要或愿望进行更改并分享。
我知道很多时候,并不需要CMS系统。许多客户需要一个内容编辑系统。我的意思是,有技术人员将网站放置在特定位置,而客户则添加/编辑/删除页面。这些页面已经设计得很好,格式也很规范。在这些情况下,我可以看出,设计和实现一些东西可能比使用带有访问权限的CMS或删除/隐藏功能更快。

你如何决定哪个CMS系统是最适合客户需求的?你需要调整所选择的CMS,那么哪一个是最好的选择,并且肯定能满足所有要求?你需要多少时间才能熟悉所有现有的CMS系统,从而做出正确的选择?在这种情况下,“最好”的意思是“便宜”。 - Chris
嗯,我不同意找到合适的CMS是如此容易,特别是对于我的客户,当他们大多需要克罗地亚语的网站和CMS时,我必须承认我总是在使用带有变音符号的字符时遇到很多问题。 - ilija veselica
@ile:我猜你的意思是 'šđćčŠĐĆČžŽ' ;-) - Chris

2

除非您是为了经验而建立一个,否则建立自己的唯一真正原因是:它比使用市场上符合您要求的产品更便宜和/或更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接