对于有便携式区域经验的人,
我想知道使用它们是否有缺点,以及为什么不使用它们将大型 MVC 应用程序分解为组件部分。
对于有便携式区域经验的人,
我想知道使用它们是否有缺点,以及为什么不使用它们将大型 MVC 应用程序分解为组件部分。
让我们从
定义:
APortable Area
是一个 dll,其中包含items
通常是您的解决方案的一部分。可移植区域包含视图、控制器、模型,甚至 JS 脚本、CSS 文件和图像。
理想情况下,items
您的便携式区域中的 一起工作以创建有凝聚力的功能。如果没有,您可能不会从拥有便携式区域中受益。
益处
我将 Portable Areas 与 Web-Forms 进行比较,Web Parts
因为它们都试图回答这个问题:
如何创建可重用的功能?
如果您想创建可在多个项目中使用的功能,或者作为功能分发给第 3 方使用,您将从 Portable Areas 中受益。
坏处
每次您对 Portable Area 中的任何视图、JS 文件、CSS 文件或图像进行更改时,您都需要重新构建它。我强调这些组件是因为它们在测试或开发时通常不需要重新构建。
这可能会成为一个问题。如果您发现每次调整 CSS 时都在重新构建,那么 30 秒的更改会变成 2 分钟的更改。做 30 次,你就可以将 15 分钟的工作时间延长到 2 小时。
Portable Areas 旨在让成熟的功能按原样在多个项目或解决方案中重复使用。
便携式区域对于处于早期开发阶段的功能并不理想。
便携式区域不适用于仅存在于 1 个解决方案或项目中的功能。
很多事情已经说了。我在使用 Portable Areas 方面有一些经验,这是我个人的观点。
MvcContrib 一年以来没有更新(参见nuget)。如果您查看codeplex,您会发现自上一个版本以来源代码没有太多更新。它可能是成熟的,但没有任何支持可能是有问题的。
一个可移植区域是自包含在一个程序集中的。重用和升级肯定更容易,但挑战在于如何允许客户端应用程序对用户界面进行足够的控制。即使它是一个可重用的功能,您有时仍希望使用主布局或部分布局。
所有网络资源(CSS、Js、视图)都必须是嵌入式资源(包含在 dll 中)。这意味着开发/调试真的很痛苦,因为每次代码修改都需要重新构建。此外,您需要在客户端网站上托管便携式区域。
便携式区域使用自定义虚拟路径提供程序。自定义虚拟路径提供程序代码未经测试且完全不可测试。ASP.Net 团队不鼓励使用虚拟路径提供程序,因为它们会导致性能问题。
便携式区域与 Nuget 包。Portable Areas 是四年前设计的(在 Nuget 之前)。Portable Areas 解决了将文件轻松传输、查看和资产(Css、javacript)到单独的应用程序的能力。Nuget 也解决了这个问题。
然而,即使有所有这些缺点,我的团队仍在使用它。为什么 ?因为它是在正确的时间为我们提供正确的解决方案。