Language agnostic 为改变而设计

Language agnostic 为改变而设计,language-agnostic,Language Agnostic,我敢肯定,我们中的大多数人都熟悉项目开始后需求发生变化的概念,这越来越成为一个问题,客户对事情如何运作的了解越少,你与他们的合作越密切 那么,我如何设计一个系统(特别是一个网站,但一般的建议在这里可能是最好的),以便进行微小的更改,是否有任何编程策略可以解决这个问题?我认为最大的问题是确保您有一个全面的测试套件。这样,您可以在需要时自信地进行更改,并知道更改何时中断。我建议对您选择的语言使用经过测试的框架。大多数好的框架都是为适应多种场景而设计的。所有正常的oo原则都适用于这里,减少耦合,增加内

我敢肯定,我们中的大多数人都熟悉项目开始后需求发生变化的概念,这越来越成为一个问题,客户对事情如何运作的了解越少,你与他们的合作越密切


那么,我如何设计一个系统(特别是一个网站,但一般的建议在这里可能是最好的),以便进行微小的更改,是否有任何编程策略可以解决这个问题?

我认为最大的问题是确保您有一个全面的测试套件。这样,您可以在需要时自信地进行更改,并知道更改何时中断。

我建议对您选择的语言使用经过测试的框架。大多数好的框架都是为适应多种场景而设计的。

所有正常的oo原则都适用于这里,减少耦合,增加内聚,不要重复自己等等。这将确保您有一个灵活和可扩展的代码库


除此之外,不要试图先发制人。在任何地方使用雅格尼(你不会需要它)。只构建你知道你的用户需要的东西。不要建造你认为你需要的东西。你很可能猜错了,然后你就得到了一堆可能只是碍事的代码。

首先,你应该确定哪些方面会有很高的更改概率。这些方面应该“抽象出来”。一个典型的例子是网站的风格(即通过css)。但您甚至可以这样定义一个“presenter”类,该类用于显示网页的特定元素


困难的是对变化概率做出正确的估计。但这取决于您:)

如果您没有PHP方面的经验,请对此稍加考虑

但这一切都是为了知道改变将要来临。因此,当您正在编写代码并开始想通过破解来完成这些任务时,停下来思考“如果我需要再次更改该怎么办?”

现在,我知道php是一种脚本语言,但您必须能够库外代码,对吗?这是最好的做法,对于大多数第1部分或第2部分的方法调用,保持UI(网页)尽可能轻

如果您有奇特的渲染逻辑,请将其库化。创造一个可能很常见的漂亮外观?看看可能会发生什么变化(配色方案等),然后选择它。您已经将所有核心代码都放入了库中,对吗?;)

如果你总是在构建你的库,那么当变更请求到来时,你需要做的就是“为它找到合适的书”。。我们所做的最酷之处在于,如果这本书写得好,你可以很容易地为它添加注释;)

这基本上是我目前正在做的工作,我的“项目”是构建未来应用程序将要开发的平台,因此这是我的主要关注点

更新
在应用YAGNI时,考虑到以上所有内容,不要只将内容写入库中,但如果您认为您刚刚创建的性感小表(因为客户需要它)可能会再次使用,那么是时候考虑使其更可用了。一次性客户端的一些模糊功能应该是临时完成的。

好吧,我试着从另一方面解决这个问题:

与客户/用户进行更多沟通。

我自己也在那里,编写了一些不需要的东西,或者没有进行适当的交流,并且不得不重做很多代码。如果进行更多的沟通,或者更确切地说,通过更多正确的沟通,就可以防止这种情况的发生

除此之外:
允许用户改变颜色,并不时询问他们,在哪里放置按钮和概率,他们会满意这个“伟大的控制水平”是相当不错的。然后他们就不想让你重做真正的功能了。是的,我对此很讽刺。

这就是框架发挥作用的地方

如果所有的基线、背景和业务都在框架中,那么您的应用程序就是扩展、特殊情况和附加组件

该框架已经为变革而设计和构建。你的东西是框架设计用来接受的变化


当发生更改时,您将通过修改框架配置和重写插入框架的内容来响应更改。你通过不关注默认的背景内容来应对变化。将其委托给其他人--框架作者。

其他人将有更多内容要添加。我注意到你专攻php,等等,我对它不熟悉,所以我不知道是否有框架可以帮助解决这个问题。没关系,我可能专攻php,但我也使用Python,可能会学到YAGI的优点,很容易变得“太开放”而无法更改:)是的,YAGNI非常重要。很容易过早地陷入过度设计的陷阱。如果你的设计很好,你可以在需要的时候重构它。讽刺的是,人们通常通过设计可扩展性来降低代码的可扩展性。这就是雅格尼的用武之地:-)