【发布时间】:2008-09-25 10:23:54
【问题描述】:
我敢肯定,我们中的大多数人都熟悉项目启动后需求发生变化的概念,随着客户对事情如何运作的了解越少,您与他们的合作越密切,这就会成为一个越来越重要的问题。
那么我该如何设计一个系统(特别是一个网站,但一般建议在这里可能是最好的)以便可以进行微小的更改,是否有任何编程策略可以解决这个问题?
【问题讨论】:
我敢肯定,我们中的大多数人都熟悉项目启动后需求发生变化的概念,随着客户对事情如何运作的了解越少,您与他们的合作越密切,这就会成为一个越来越重要的问题。
那么我该如何设计一个系统(特别是一个网站,但一般建议在这里可能是最好的)以便可以进行微小的更改,是否有任何编程策略可以解决这个问题?
【问题讨论】:
所有正常的 oo 原则都适用于此,减少耦合、增加内聚、不要重复自己等。这将确保您拥有灵活且可扩展的代码库。
除此之外,不要试图抢占变革。在任何地方都应用 YAGNI(你不会需要它)。只构建您知道用户需要的东西。不要建造你认为你会需要的东西。你更有可能猜错,然后你有一堆可能只是妨碍你的代码。
【讨论】:
我认为最重要的是确保您拥有一个全面的测试套件。这样一来,您就可以在需要时自信地进行更改,并知道何时出现问题。
【讨论】:
没有使用 PHP 的经验,请稍加注意。
但这一切都是为了了解变化将会到来。因此,当您开始编写代码并开始想要破解某些东西以完成它们时,停止并思考“如果我需要再次更改它怎么办?”。
现在,我知道 php 是一种脚本语言,但是您必须能够从代码库中提取代码,对吗?这是最好的做法,让 UI(网页)尽可能轻巧,大多数情况下只需要 1 或 2 次方法调用。
如果您有精美的渲染逻辑,请将其库化。创建一个可能很常见的漂亮外观?看看可能会发生什么变化(配色方案等),将其库化。您已经将所有核心代码放入库中,对吧? ;)
如果您一直致力于构建自己的库,那么当收到更改请求时,您需要做的就是“为它找到合适的书”。我们所做的事情很酷的是如果这本书写得很好,你可以很容易地给它添加注释;)
这基本上是我目前正在做的工作,我的“项目”是构建未来应用程序将使用的平台,所以这确实是我的主要关注点。 :)
Mendelt made a good point 在应用 YAGNI 时,结合以上所有内容,不要只是将东西写到库中,而是如果你想一想你刚刚创建的性感小桌子(因为客户想要它)可能会再次使用,那么是时候考虑让它更有用了。一次性客户端的一些晦涩功能应该临时完成。
【讨论】:
好吧,我会尝试从另一面解决这个问题:
与客户/用户进行更多沟通。
我自己也去过那里,编写不需要或没有正确沟通的东西,并且不得不重做大量代码。通过更多的沟通,或者更确切地说:通过更多的正确沟通,它会被阻止。
除此之外: 让用户不时改变颜色,问他们,在哪里放置按钮以及概率,他们会满意这种“高度控制”是相当不错的。然后他们不希望你重做真正的功能。是的,我对此很讽刺。
【讨论】:
我建议为您选择的语言使用久经考验的框架。大多数优秀的框架将被设计为适应多种场景。
【讨论】:
首先,您应该确定具有高变化概率的方面。这些方面应该“抽象出来”。一个典型的例子是您网站的风格(即通过 css)。但您甚至可以定义一个“演示者”类来展示网页的特定元素。
困难在于正确估计更改概率。但这取决于你:)
【讨论】:
这就是框架发挥作用的地方。
如果所有基线、背景、一切照旧在框架中,那么您的应用程序就是扩展、特殊情况和附加组件。
该框架已经为改变而设计和构建。你的东西是框架设计接受的变化。
当发生变化时,您将通过修改框架配置和重写插入框架的内容来响应变化。您通过不关注默认的背景内容来应对变化。将其委托给其他人——框架作者。
【讨论】: