发现对标题的思考有点棘手,但基本上我的问题是如何在需要编写客户特殊代码时将系统保持为通用(正确的术语?)。
我的情况是我们有一个生活在颠覆主干中的标准系统。有时客户希望进行不符合标准系统的更改,因此我们的做法通常是分支代码并在该分支上进行开发,但是当干线工作需要包含在特殊客户中或者如果客户想要的想法需要在分支和主干中。
是否有更好的方法或标准来处理此类请求,因为似乎所有编码都非常具体?
答案 0 :(得分:0)
在提高代码可重用性方面,通常有几个部分:
能够交换应用程序的较小部分是核心语言设计问题。许多语言都设计有最大化可重用性的方法。以下是一些示例(一些是C#特定的):
它们将允许您更轻松地重用代码库,但它们本身并不是一个金色的子弹。
即使您利用C#中提供的所有功能,一个经过深思熟虑的项目也可能难以互换。我建议任何更大的解决方案应该分成逻辑的,独立的,子单元。同样,解决方案结构的示例可能是:
MyProgram // Wires up components and subunits.
MyProgram.Core // Contains a core 'kernel' for your application
MyProgram.IO // Contains generic interfaces and implementations for performing IO
MyProgram.UI // Contains UI code that displays and interacts with your core. The core should not depend on UI elements.
MyProgram.Models // Contains structure of databases, data models other components may act on
MyProgram.Models.Serialization // Converts your models for IO etc. Maybe you want MyProgram.IO to be generic enough to reuse.
Helpers // Generic helpers that you tend to use in multiple applications. You will want these to be in a standalone repository so that you can keep the classes validated.
最终,您可能无法处理语言功能和良好项目设计的每个问题。如果您有一个尴尬的客户端请求,有时您可能想要拉动(而不是分支)您可以重复使用的组件并分支您需要编辑的组件。
答案 1 :(得分:0)
这当然是一个困难的场景。
一个选项可能是配置以规定功能是否已打开 - 因此功能会进入主分支,但您只需将配置设置为true即可满足需要它的客户。它仍然有点乱,但我认为它比每个客户有多个分支更清洁。
在更复杂的场景中,您可以将新功能作为一种“插件”架构开发,您可以在其中实现相同的接口的不同实现 - 某种类型的工厂可以决定加载哪个。
我认为维护一个不同客户要求的通用代码库没有任何灵丹妙药。