9

我正在使用 C# 和 Razor 在 ASP.NET MVC3 中开发一个 Web 应用程序。

我需要创建一个实用程序类,在其中放置将字符串转换为日期(年、月、日等)的函数。

在 ASP.NET Web 窗体中,我曾经将此类类放在App_Code文件夹中。在 MVC 中没有这样的文件夹,我认为实用程序类既不属于Models也不属于Helpers(我创建的一个文件夹是为了将我的扩展放在 HTML Helpers 上)。

我读到将实用程序类放在不同的程序集中是一个很好的做法。我想应该有一个不同的项目来完成这项工作,但我应该创建什么样的项目?一个普通的类库项目对我来说似乎是最合乎逻辑的选择。

但是在我的情况下,我只需要放置一个具有多种方法的类,因此,如果我们忽略可重用性,那么将实用程序类放在我的 MVC3 Web 应用程序中的某个地方不是更合乎逻辑吗?

4

4 回答 4

12

你不应该有实用程序类。将它们转换为更好的扩展方法。视图模型甚至更好。

我通常为管道创建一个名为“HtmlHelpers”或“Infrastructure”的文件夹。

“Common”文件夹就像垃圾桶恕我直言。你把所有的垃圾都放进去。

更新

我会将它放置在 DateTime 的扩展方法中(放置在名为 DateTimeExtensions 的类中,该类放置在名为 Infrastructure 的命名空间中)。

我会在视图模型内部或生成视图模型时(在控制器中)使用它。

至于是哪个项目,其实并不重要。重要的是你有特定任务(或职责)的小班。

有些人认为你应该有几个具有不同职责的类库。我不那样做。我为业务逻辑创建了一个 UI 项目和一个项目。但是,我确保这些类实现了一个或多个接口,以便以后能够重构应用程序。KISS 也应该适用于项目结构,而不仅仅是其中的代码。

换句话说:我会将我的助手放在名为基础架构的命名空间中的核心(业务逻辑项目)中。

于 2012-02-10T15:31:52.197 回答
3

Call it Common 把所有东西都放在那里。

然后使用像这些示例这样的命名空间

Common.Formatters Common.Functions Common.Foo Common.Bar

于 2012-02-10T15:30:45.627 回答
1

为什么不在项目中创建另一个名为 Utility、Infrastructure 或类似名称的文件夹(例如在 Helpers 文件夹旁边)并将实用程序类放在那里。

一旦需要重用它,您总是可以将它移到单独的 DLL(类库项目)中。

于 2012-02-10T15:30:49.837 回答
0

我更喜欢按照此处的建议创建一个名为 Helpers 的文件夹和命名空间: 在哪里可以将自定义类放在 ASP.NET MVC 中?

于 2015-02-11T15:38:30.707 回答