在我们的工作中,我们有几个不同的.net应用程序,它们共享许多基本功能。我们已经使用干净的n层体系结构构建了这些应用程序,但是到了那一刻,我们意识到我们已经在不同的时间重新实现了相同的功能。显然这违反了DRY,我们希望对此进行更正。我们已经使用Nuget成功实现了通用粘合代码(连接IoC,日志记录,设置),但是我们也希望在所有应用程序之间共享数据和业务层。想法是,UI仅处理其实际需要的业务层部分。
起初这似乎是一个直截了当的问题,但是持续的开发可能会带来一些陷阱,我们不确定如何进行。假设我们建立了一个业务层来全部统治。为简便起见,我将其称为“基金会”。我们将我们的应用程序移植为使用Foundation,并且一切都很好。该基金会通过nuget分发给轻量级UI层,我们看起来很好。但是随后我们开始向应用程序中添加功能,并且遇到了麻烦。
假设我们正在开发Project A,并且添加了一项需要更改Foundation的新功能。我们对基础(Foundation-A)进行更改,并将它们作为不稳定的程序包推送到nuget提要。项目A获得了最新的nuget包,一切都很好。同时,另一位开发人员正在开发ProjectB。他从源代码控制中获得了最新的Foundation,但从一个稳定的分支中获取了最新的Foundation,因此它没有Project A的更改。他进行了更改并创建了Foundation-B。一切都很好。但是随后我们发现,Foundation-A和Foundation-B实施功能实际上可以共享代码,因此我们将它们组合在一起。同时,Foundation-C本身也有自己的变化。最终,Foundation-B可以投入生产,因此我们将其推出。但是然后我们需要更新生产A,B,
这似乎可行,但是我们担心使用不同的数据库模式,并使Foundation信息库的各个分支以及Project A,B和C信息库之间的所有内容保持同步。似乎可能需要大量的手动工作,这可能会出现错误。我希望这尽可能自动化。
这是我们使用的堆栈:C#,具有持续集成功能的TFS,Nuget。我们的应用程序是所有类型的ASP.NET应用程序。如果这会使事情变得更容易,我们愿意研究不同的SCM。
我正在寻找使Nuget对我们不同的源代码分支保持理智的方法。我们不想意外地将开发代码推入生产环境,因为我们引用了错误的Nuget包。