我应该在解决方案中有多个项目,还是在共享相同数据库的控制台和Web应用程序的多个解决方案中?

时间:2015-02-13 20:49:05

标签: c# asp.net asp.net-mvc visual-studio

我目前有一个asp.net控制台应用程序,它只是通过API从远程服务器检索大量数据,并使用Entity Framework将其保存到SQL数据库中。该应用程序需要3-4天才能运行,我每个月都会手动运行一次。

项目分为Models类,Repository类以及应用程序本身。

我现在需要构建一个ASP.NET MVC Web应用程序,它允许用户查看已检索的数据,并正在寻找有关如何最好地构建此数据的建议。

我是否在我的解决方案中创建了一个新的ASP.NET MVC项目,并将其设置为启动应用程序,引用相同的模型和存储库类?如果是这样,我如何运行我的控制台应用程序?或者最好将它们作为单独的解决方案保留,只引用相同的数据库?

还有更好的方法吗? (也就是说,控制台应用程序是否可以通过某种方式重建为前端的一部分,并使用队列或工作人员定期获取数据?)

感谢您的帮助, 罗比。

2 个答案:

答案 0 :(得分:3)

相同的解决方案。不同的项目。通过使用相同的解决方案,您可以轻松地引用共享组件。我实际上建议将你的实体,存储库等分成第三个项目,一个类库,然后你的控制台应用程序和MVC应用程序都会引用它。

如果你没有把所有东西放在同一个解决方案中,那么你要么陷入DLL地狱,你必须在那里构建你的项目并手动将DLL复制到另一个项目中,添加引用,然后在该DLL中进行更改时保持所有内容都是最新的。涉及的项目越多,熵越大,并且您的项目最终在不同版本的DLL上运行的可能性越大。

另一种选择是创建一个包含共享组件的Nuget包,将其托管在您自己的私有仓库中,然后将其添加到需要它的每个项目中。然而,尽管设置这一切非常容易,但它并非100%无摩擦,并且您必须记住在进行更改时重新打包并重新发布Nuget,然后单独更新包中的每个参考项目。

无论多长时间,同样的解决方案始终是最佳方式,除非有充分的理由不这样做。它是唯一的"它只是工作"方法

答案 1 :(得分:2)

就个人而言,我会将这些作为单独的项目和单独的解决方案保留,只引用同一个数据库,但将两个解决方案共享的代码移动到一个单独的类库中。

您的Web应用程序呈现您建模数据的方式很可能与您的控制台应用程序使用它的方式非常不同;所以使用相同的模型和存储库很可能会将您的Web应用程序进一步耦合到您的控制台应用程序。

这与微服务的工作方式非常相似,微服务的行为和增长独立于其消费者(在本例中为您的Web应用程序),并且仅通过明确定义的 API 进行通信。