【发布时间】:2009-01-21 16:58:07
【问题描述】:
关于如何开发能够适应不断变化的业务需求的软件的想法?任何模式、架构等。可能一些轶事示例会很棒。这更像是一个调查,而不是一个具体的问题。谢谢
【问题讨论】:
标签: architecture design-patterns
关于如何开发能够适应不断变化的业务需求的软件的想法?任何模式、架构等。可能一些轶事示例会很棒。这更像是一个调查,而不是一个具体的问题。谢谢
【问题讨论】:
标签: architecture design-patterns
您将想要了解有关整个Agile Development 运动的更多信息。敏捷就是它所说的:能够快速适应。
【讨论】:
在我看来,具体代码比通用和抽象代码更易变化。因此,如果您想要可更改的代码,请坚持使用特定代码并避免元编程。
从现在起 6 个月后,很可能没有人会了解这些通用和抽象方法的真实用例并害怕更改它们。
【讨论】:
如果这是您的开发环境,您将需要使用Agile development process。
作为此过程的一部分,您可能希望不断有一个工作系统向您的客户展示,以便他们可以在此过程中进行路线修正。这将帮助他们了解正在取得的进展以及您所处的位置。但更重要的是,这将使他们更好地了解系统如何满足当前的业务需求,以及他们的新更改将产生什么影响。
请注意不要让您的原型在视觉上很吸引人。如果原型看起来图形精美,那么您的业务开发人员很有可能会认为该软件很比实际更完整。相反,我建议尝试让它看起来不那么精致,并更多地关注功能。例如,如果您正在使用 Java Swing,那么有一个很棒的 look & feel called Napkin 可以帮助您解决这个问题。 IT 允许您构建尽可能多的功能,但屏幕看起来就像是在餐巾纸上绘制的。所以人们的注意力和关注点都在功能上,而不是图形细节上。
【讨论】:
试图设计一个可以轻松适应不断变化的需求的通用系统是行不通的。正如 Mark 所暗示的,整个敏捷运动都源于这样一种认识,即简单的特定代码比通用代码更容易适应,只要它编写得好且可维护。
【讨论】:
Domain-Driven Design 是一个很好的方法,有一本好书可以帮助你前进。
这种方法的一个重点是软件中使用的开发领域模型与它所建模的实际“现实世界”之间的紧密反馈循环,因此可以改变现实世界。
【讨论】:
考虑业务需求变化的规模:
【讨论】:
考虑一个业务规则引擎。并不总是合适的,但可以帮助将业务逻辑和需求与您的技术架构/解决方案分开。例如,假设您需要根据一组测试结果设置汽车的安全等级。在汽车上进行的测试可能会改变,分类标准也会改变(包括分类的实际数量,例如从 5 星系统到 10 星系统)。在这种情况下,业务规则引擎可能是对汽车进行分类的好方法。
规则引擎将提供基于文本或 XML 的规则,至少在理论上,这些规则可以由非编程人员(例如业务分析师)编写和维护。这些规则将应用于Car 对象(假设Car 对象包含对TestResults 对象的引用)。规则/规则引擎将分析测试结果并相应地设置Car 对象的SafetyClassification 属性。
实际规则可以驻留在数据库或共享位置,甚至可以通过消息传递基础架构或 Web 服务调用提供给系统。无需重新编译/重新部署系统即可将新规则提供给系统并激活。
不同的技术有不同的规则引擎可用。例如,.Net 有 Drools.Net、WWF 规则引擎,以及其他一些。 Java 有 JBoss 规则以及许多其他规则。
【讨论】:
(几乎)每个程序都有不断变化的业务需求。 尝试与客户谈判(营销或产品经理也是客户)很重要,但还不够。需求总是变化的。 Scrum 有很多技术来管理需求的变化。
【讨论】: