在 C# 中创建两个非常相似的软件包有哪些不同的方法

What are the different ways to create two very similar software packages in C#

我正在编写一个软件套件,它主要由使用 WPF 的 C# .Net 中的两个独立应用程序组成。尽管它们看起来可能有点不同,但它们本质上就像是同一软件包的精简版和完整版。完整版包含精简版的所有功能。

我之前通过创建两个单独的应用程序来完成此操作,这两个应用程序共享一个 class 库,其中包含所有常见的用户控件。但是我现在想知道这种架构有没有更好的设计。

我什至想创建一个应用程序,并在运行时让它决定它将作为哪个版本运行。

任何对此类问题有任何经验的人都可以为我指明正确的方向。

保持简单

我的经验法则是尽可能使解决方案尽可能简单。话虽这么说,我会使用您正在使用的相同组合。

通常这样分解项目:

应用程序逻辑: CompanyPrefix.ProjectPrefix.CoreCompanyPrefix.ProjectPrefix.Data...等等

应用程序CompanyPrefix.ProjectPrefix.ApplicationType.App,所以一些例子:

  1. CompanyPrefix.ProjectPrefix.Web.App
  2. CompanyPrefix.ProjectPrefix.Console.App
  3. CompanyPrefix.ProjectPrefix.Wcf.App

因为你有两个 Wcf 应用程序可能想要做一些像

  1. CompanyPrefix.ProjectPrefix.Wcf.Lite.App
  2. CompanyPrefix.ProjectPrefix.Wcf.App

所以在此示例中,CompanyPrefix.ProjectPrefix.Wcf.AppCompanyPrefix.ProjectPrefix.Wcf.Lite.App 都指向 CompanyPrefix.ProjectPrefix.Core 或您的业务逻辑所在的任何位置。

关于动态加载程序集

有一种方法可以在运行时动态加载您的库,但除非您处理的是独立组件的模块化系统,否则建议不要使用它。

如果您愿意的话,MSDN 上有很多资源,可能会开始 here。关于将程序集加载到当前应用程序域的文章。

想出一个清单

我觉得有帮助的一件事是提出一个清单来帮助我做出决定,以防我遇到困难。通常最终会变成这样:

  1. 这有商业价值吗?
  2. 这是否会使调试更难
  3. 与我过去采用的方法相比,采用新方法的优缺点是什么?

这不是我的详尽清单,但解释了这一点。当你有一群人出于个人原因主要坚持 没有任何基础的选择 以及使用工具时,这也很有帮助 当你无法做出决定并坚持下去时

处理应用程序逻辑更改(编写干净的代码)

想出一个过于复杂的 "never need to recompile entire application again" 是我过去犯过的错误。您仍然需要部署和编译一些东西。

处理应用程序变更最重要的是

  1. 在源代码管理上有代码(最重要)
  2. 编写干净的代码
  3. 编写测试
  4. 写文档(我知道没有人喜欢这样做)
  5. 再写一些测试

在处理应用程序更改时,消耗你大部分时间的是调试,所以专注于减少花在调试上的时间,而不是花在编译和部署上的时间

对于部署设置持续集成

如果您有能力设置CI,将消除 99% 的麻烦 ]更改应用程序。第一次设置可能会浪费一两天时间,但这是非常值得的。

查看 TeamCity and Travis CI