【发布时间】:2017-01-17 00:45:54
【问题描述】:
我有一个 ASP.NET MVC 解决方案,并且我在 ASP.NET MVC 项目中有大量 HtmlHelper 类,它们获取数据并生成各种 html 的 sn-ps 以显示在各种页面上。
我现在必须运行一堆预定的作业,其中许多作业会生成电子邮件。我将所有这些工作转移到解决方案中的一个单独项目(称为 AdminJob.csproj)中,但现在我发现我必须生成许多具有与我在视图页面中非常相似的 HTML 的电子邮件。我试图让管理作业不依赖于 ASP.NET MVC 项目(因为如果需要,我想将 adminjob 项目作为命令行运行),并且我还想避免拥有我的 ASP.NET MVC 项目依赖于 AdminJob 项目(因为这看起来很奇怪)。
关于如何避免在我的 ASP.NET MVC 项目和我的 AdminJob 项目中重复相同的 HTML 呈现代码的任何建议?
我唯一能想到的就是在解决方案中创建另一个名为“ViewHelpers”或类似的项目,并将我的所有 HTMLHelpers 移动到该项目中,以便我的 MVC 项目和 AdminJob 项目都可以引用它。为这段代码创建一个单独的项目似乎有点矫枉过正,但我想不出另一种不会产生重复的解决方案。
对于更好的方法来做到这一点并避免任何重复,还有其他建议吗?
【问题讨论】:
-
您的建议似乎合乎逻辑。然而,这个问题主要是基于意见的,将被解释为离题。
-
我不同意这完全是基于意见的,因为我在这里寻找最佳实践,这似乎是一种常见的情况,您同时拥有 MVC 视图和具有重叠要求的电子邮件生成,所以我认为有证据考虑到关注点和其他目标的分离,以及基于主体的答案。有什么建议可以改变问题中的某些内容以使您认为它不会离题吗?
-
我会按照你的建议去做,为共享代码创建一个单独的项目。但是不要将它创建为“SharedHTML”或类似的东西,最终会显示更多应该共享的代码,您可以使用这个项目来完成所有这些。
-
可能是另一种选择(如果您不想共享视图)是从电子邮件实用程序对 mvc 操作进行 http 调用以获取 html。
-
您的 HTML 是否嵌入在您的代码中?
标签: asp.net-mvc html-email html-helper