我们应该避免在不断变化的项目中使用设计模式吗?
我的一个朋友正在一家小公司工作,每个开发人员都讨厌这个项目:他被迫尽快发布,他是唯一一个关心技术债务,客户没有技术背景的人。 他给我讲了一个故事,使我想到了这样的项目中设计模式的适当性。这是故事。 我们不得不在网站的不同位置展示产品。例如,内容管理者可以通过API查看产品,还可以查看最终用户或合作伙伴。 有时,产品中缺少信息:例如,刚创建产品时,其中一堆没有任何价格,但尚未指定价格。有些没有描述(描述是具有修改历史,本地化内容等的复杂对象)。一些缺乏货运信息。 受到最近关于设计模式的阅读的启发,我认为这是使用神奇的Null Object模式的绝佳机会。所以我做到了,一切都变得顺畅而干净。只需致电product.Price.ToString("c")显示价格或product.Description.Current显示说明即可;不需要有条件的东西。直到一天,涉众要求通过使用nullJSON 来以不同的方式在API中显示它。对于内容管理者,也显示“未指定价格[更改]”,这也有所不同。而且我不得不谋杀我心爱的Null Object模式,因为不再需要它了。 同样,我不得不删除一些抽象工厂和一些建筑商,最终我通过直接和丑陋的调用替换了我美丽的Facade模式,因为底层接口在三个月中每天两次更改,甚至Singleton也离开了我当需求告知相关对象必须根据上下文而不同时。 超过三周的工作包括添加设计模式,然后在一个月后将其撕裂,我的代码最终变得面目全非,甚至包括我自己在内的任何人都无法维护。最好首先不要使用这些模式,这会更好吗? 确实,我必须在那些要求不断变化的项目类型上工作,而这些项目实际上是由那些并不真正考虑产品的凝聚力或一致性的人所决定的。在这种情况下,无论您有多敏捷,都将为问题提供一个优雅的解决方案,当最终实现该问题时,您会发现需求发生了巨大变化,以致于您的优雅解决方案不适合不再。 在这种情况下,解决方案是什么? 是否不使用任何设计模式,停止思考并直接编写代码? 进行一次团队直接编写代码,而另一个团队在打字之前三思而后行的经历会很有趣,这冒着几天后不得不扔掉原始设计的风险:谁知道,也许两个团队都会拥有同样的技术债务。如果没有这样的数据,我只断言,它不觉得不对劲,恕不另行思维上有20人月的项目工作时输入代码。 保留不再有意义的设计模式,并尝试为新创建的情况添加更多模式? 这似乎也不正确。模式用于简化对代码的理解;放置过多的模式,代码将变得一团糟。 开始考虑包含新要求的新设计,然后慢慢将旧设计重构为新设计? 作为一名理论家和偏爱敏捷的人,我完全投入其中。在实践中,当您知道必须每周回到白板并重做以前的设计的大部分内容时,并且客户只是没有足够的资金来支付您的费用,也没有足够的时间等待,这可能行不通。 那么,有什么建议吗?