3

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

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

这对我来说不是一个简单的解决方案,因为其中一些应用程序本身就相当大,将它们放在一起可能很难管理。更不用说新应用程序的开发以及添加到现有应用程序的新功能将继续进行。使这可能成为一个非常大的解决方案。

我对 MVC 还很陌生,尽管我现在对它有了很好的理解,但我仍在尝试重新连接我的大脑以使用方法和设计。

我想我想问的是,你们中那些比我有更多 MVC 经验的人分享一些关于 MVC 在实际使用中的启发和智慧,给我一个开始思考的方向。

4

6 回答 6

3

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

  • 如果所有应用程序共享一个共同的业务模型。
  • 如果他们共享一个共同的基础设施(安全、验证、日志记录和其他......)
  • 如果他们共享相同的共同用户群。
  • 如果将多个项目合二为一有助于我降低维护和增强成本。

在您的情况下,您说它们中的每一个都是完全独立的,那么为什么需要合并?

于 2012-06-11T10:21:21.823 回答
3

请帮自己一个忙,不要将它们组合在一个解决方案中。我曾经在一个项目中工作过,我们有一个巨大的解决方案可以解决,这就是万恶之源。如果你把所有东西都放在一个解决方案中,你会增加所有项目的复杂性,你可能会想,我实际上会通过重用一些东西来节省几行代码,但事实是你正在创建一个致命的解决方案终将成为瓶颈

考虑以下:

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

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

现在我认为你已经完成了设计中最困难的部分,当你说:

目前有多个(大约 15-30 个)用另一种语言编写的独立Web 应用程序

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

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

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

这些天来,我发现在解决方案项目中重用基础设施组件的最佳方式是使用Nugets。使用 Nugets 可以轻松分发新版本的组件,所以我的建议是:在您的组织中创建一个私有 Nuget 服务器(一个简单的 IIS 应用程序)并将您自己的私有包添加到该服务器,然后从您的解决方案中引用它们

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

  • 组件
  • XML 配置文件(包括常见的 XML 记录器配置文件)
  • 常见的 JavaScript 文件
  • 通用样式表文件
  • ETC...

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

创建 Nuget:

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

于 2012-06-12T20:17:02.223 回答
2

我的建议是 DI 并像插件一样创建每个项目,因此每个项目都可以单独开发或管理而不会影响其他项目

我有几个使用 MEF 的项目,创建新插件或管理现有插件非常容易

这是 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

于 2012-06-08T18:06:51.490 回答
2

只要您在应用程序的页面中使用类似的标记,就可以使用所有人引用的统一样式表来实现相同的样式。通用功能可以通过统一的类库提供。对我来说,这实际上取决于应用程序之间的样式和功能到底有多接近……您是否希望每个页面上的标记完全相同,等等。

于 2012-06-11T19:36:03.373 回答
1

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

于 2012-06-11T11:58:28.243 回答
1

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

我的补充意见虽然是......

绝对应该想到什么......

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

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

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

于 2012-06-11T20:13:49.217 回答