Closed. This question is opinion-based。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
                        
                        2年前关闭。
                                                                                            
                
        
我正在编写一个软件套件,该套件基本上由使用WPF的C#.Net中的两个独立的应用程序组成。尽管它们看起来可能有些不同,但它们实际上就像同一软件包的精简版和完整版一样工作。完整版包含lite版的所有功能。

以前,我是通过创建两个单独的应用程序来完成此操作的,这些应用程序共享一个类库,所有公共用户控件都可以在该类库中找到。但是我现在想知道这种架构是否有更好的设计。

我什至在考虑创建一个应用程序,然后在运行时让它决定将其用作哪个版本。

任何对这种类型的问题有经验的人都可以向我指出正确的方向。

最佳答案

把事情简单化

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

通常分解这样的项目:

应用逻辑:CompanyPrefix.ProjectPrefix.CoreCompanyPrefix.ProjectPrefix.Data ...等。

应用程序:CompanyPrefix.ProjectPrefix.ApplicationType.App,因此有一些示例:


CompanyPrefix.ProjectPrefix.Web.App
CompanyPrefix.ProjectPrefix.Console.App
CompanyPrefix.ProjectPrefix.Wcf.App


由于您有两个Wcf Apps,因此可能需要执行以下操作


CompanyPrefix.ProjectPrefix.Wcf.Lite.App
CompanyPrefix.ProjectPrefix.Wcf.App


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

关于动态加载装配体

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

如果您愿意,那么MSDN上有很多资源,可能会以here开头。有关将程序​​集加载到当前应用程序域中的文章。

提出清单

我发现有帮助的一件事是拿出一份清单,以帮助我做出决定,以防万一我被卡住。通常最终是这样的:


这有商业价值吗?
这会使调试更加困难吗?
与过去的方式相比,采用新方式的利弊是什么?


这不是我的详尽清单,但说明了这一点。当您的一群人由于个人原因而没有任何扎根地坚持选择时,以及当您被困做出决定并继续使用时所使用的工具时,这确实可以提供帮助

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

我过去犯过一个错误,即提出一个过于复杂的“不再需要重新编译整个应用程序”。您仍然需要部署和编译某些东西。

处理应用程序更改最重要的事情是


拥有源代码管理(最重要)
编写干净的代码
编写测试
编写文档(我知道没人喜欢这样做)
编写更多测试


在处理应用程序更改时,将花费大部分时间的是调试,因此,应着重于减少调试花费的时间,而不是花费在编译和部署上的时间

对于部署设置,持续集成

如果您具有设置CI的能力,那么将消除99%的更改应用程序的麻烦。您第一次会损失一两天的时间,但这是值得的。

检出TeamCityTravis CI

关于c# - 在C#中创建两个非常相似的软件包有哪些不同的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36285495/

10-10 13:14