我正在使用C#和Razor在ASP.NET MVC3中开发一个Web应用程序。
我需要创建一个实用程序类,其中我将函数转换为日期(年,月,日等等)。
在ASP.NET Web窗体中,我曾经将这种类放在 App_Code 文件夹中。在MVC中没有这样的文件夹,我不认为实用程序类既不属于模型也不属于助手(我创建的文件夹)我对HTML Helpers的扩展。)
我认为将实用程序类放在不同的程序集中是一种很好的做法。我想一个不同的项目应该做的工作,但我应该创建什么样的项目?一个简单的类库项目对我来说似乎是最合乎逻辑的选择。
但是在我的情况下,我只需要使用多个方法放置一个单独的类,因此,如果我们忽略了可重用性,那么将实用程序类放在我的MVC3 Web应用程序中的某个地方是不是更合乎逻辑?
答案 0 :(得分:11)
你不应该有实用程序类。将它们转换为更好的扩展方法。查看模型甚至更好。
我通常会为管道创建一个名为“HtmlHelpers”或“Infrastructure”的文件夹。
“Common”文件夹就像垃圾桶imho。你把所有的垃圾都放进去了。
我会将它放在DateTime的扩展方法中(放在名为DateTimeExtensions的类中,该类放在名为Infrastructure的名称空间中)。
我会在视图模型内部或在生成视图模型时(在控制器中)使用它。
至于哪个项目,这并不重要。重要的是你得到了具有特定任务(或职责)的小班。
有些人认为你应该有几个具有不同职责的类库。我不这样做。我为业务逻辑创建了一个UI项目和一个项目。但是,我确保这些类实现了一个或多个接口,以便以后能够重构应用程序。 KISS也应该适用于项目结构,而不仅仅是其中的代码。
换句话说:我会将我的助手放在Core(业务逻辑项目)的名为Infrastructure的名称空间中。
答案 1 :(得分:1)
称之为通用将所有内容放在那里。
然后使用像这些例子那样的命名空间
Common.Formatters Common.Functions Common.Foo Common.Bar
答案 2 :(得分:1)
为什么不在项目中创建另一个名为Utility,Infrastructure或类似文件夹的文件夹(例如,在Helpers文件夹旁边)并将实用程序类放在那里。
一旦需要重用它,您总是可以将它移动到单独的DLL(类库项目)。
答案 3 :(得分:0)
我更喜欢按照此处的建议创建名为Helpers的文件夹和命名空间: Where can I put custom classes in ASP.NET MVC?