应该使用多个或单个MVC包吗?

时间:2012-06-08 17:53:42

标签: asp.net-mvc asp.net-mvc-3 iis architecture

目前,有多个(约15-30个)独立的Web应用程序用另一种语言编写。每个人都完全独立于文件,图片,标题,用户,数据库等等。整个9码,除了它们都存在于同一个域之下,应该具有相同的风格(但它们不是' T)。它们很快将转换为C#ASP.NET MVC 2.它们共享相同的LDAP身份验证。

我想到的问题是,这些问题是应该设置为多个MVC解决方案还是在单个MVC应用程序中完成。它们都具有相同的样式,大多数是相同的图像,并且它们分享基本功能会很好。

这对我来说不是一个简单的切割和干燥解决方案的原因是,这些应用程序中的一些本身非常大并且将它们全部放在一起可能很难管理。更不用说新应用程序的开发将继续,并且新功能将添加到现有应用程序中。这可能是一个非常大的解决方案。

我是MVC的新手,尽管我现在已经对它有了很好的了解,但我仍然想在这里和那里重新连接我的大脑来处理方法和设计。

我想我要求的是,那些对MVC有更多经验的人比我在实际使用中分享一些关于MVC的煽动和智慧给我一个开始思考的方向。

6 个答案:

答案 0 :(得分:3)

当我将多个Web应用程序组合成单个时,我会考虑以下几点。

  • 如果所有应用程序都共享一个共同的商业模式。
  • 如果他们共享一个共同的基础设施(安全,验证,记录和其他......)
  • 如果他们共享相同的用户群。
  • 如果将多个项目合并为一个可以帮助我降低维护和增强的成本。

在你的情况下你说他们每个人都完全独立那你为什么需要结合?

答案 1 :(得分:3)

请帮个忙,不要将它们合并到一个解决方案中。我曾经在一个项目中工作过一次,我们有一个巨大的工作解决方案,这是万恶之源。如果你把所有东西都放在一个解决方案中,那么你可能会想到所有项目的复杂性,我实际上是通过重用某些东西来保存几行代码,但实际情况是你正在创造一个致命的解决方案,最终将成为瓶颈

请考虑以下事项:

  • 当您有超过30-40个项目时,Visual Studio的性能会受到影响,这意味着您的构建将花费越来越多的时间。

  • 如果您实现构建服务器(并且您应该),如果您有一个巨大的解决方案,那么仅构建与每个应用程序相关的项目的脚本将非常复杂

现在,当你说:

时,我认为你已经完成了设计中最困难的部分
  

目前有多种(约15-30种)独立网络应用程序用其他语言编写

如果您的应用程序是独立的,这意味着它们具有独立的域,那么没有理由将它们放在单个解决方案中,甚至不将它们视为模块。

管理独立解决方案并不意味着您不能在它们之间共享组件,(当我说共享组件时,我指的是基础架构组件,请不要尝试重用域对象)。

现在问题是我应该如何引用共享组件?

在这些日子里,我发现在解决方案项目中重用基础架构组件的最佳方法是使用 Nugets 。使用Nugets可以轻松分发新版本的组件,因此我的建议是:在您的组织中创建一个私有Nuget服务器(一个简单的IIS应用程序),并将自己的私有软件包添加到此服务器,并从您的解决方案中引用它们

您可以在Nuget包中放置几乎所有需要的东西,包括:

  • 装配体
  • XML配置文件(包括常见的XML记录器配置文件)
  • 常见JavaScript文件
  • 常用样式表文件
  • 等...

这是一篇创建私有Nuget存储库的好文章

创建Nuget:

最后在您的CI服务器中集成Nuget的创建:

答案 2 :(得分:2)

我的推荐是DI,并且像插件一样创建每个项目,因此每个项目都可以在不影响他人的情况下单独开发或管理

我有一些MEF的项目,很容易创建新的或管理exrisnts插件

这是一个入门MVC和MEF ... http://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-%28MEF%29.aspx

以及可下载的示例http://www.hanselman.com/blog/ExtendingNerdDinnerAddingMEFAndPluginsToASPNETMVC.aspx

答案 3 :(得分:2)

只要您在应用中的页面中使用类似的标记,就可以使用所有人引用的统一样式表来完成相同的样式。可以通过统一的类库提供通用功能。对我而言,它实际上取决于应用程序之间的风格和功能有多接近......你想要在每个页面上使用完全相同的标记等。

答案 4 :(得分:1)

每个应用程序都有一个Controller实例,但是如果使用数据驱动的Front Controller实现它,那么在新的WeB应用程序框架中只需要一个类。因此,每个应用程序可能都有一个配置文件,用于将URL映射到Command类文件。这些可以按需构建或从资源池请求。这种方法的一大优点是,许多这些命令将作为一个非常薄的包装器(ServiceToWorker)在现有应用程序和/或ASP视图上启动。

答案 5 :(得分:1)

我完全同意Marks的回答,问自己“为什么”你需要将它们结合起来。他们真的需要独立吗?

我的其他评论是....

你应该绝对想到......

  1. 创建统一的CSS文件,使用相同的图像供应用程序使用

  2. 使用JQuery模板/部分视图编写一些通用JQuery(移动版本,如果这些是面向公众的),以便为所有这些单独的应用程序提供统一的体验

  3. 如果您不打算在DAL等方面统一服务器端代码,那么只需专注于客户端。