2009-09-29 45 views
11

我目前正在研究一个ASP.net MVC网站项目。哪里可以帮助我执行控制器任务?

我已经把所有数据库相关的东西放在我的模型中,比如查询和更新/删除/保存功能。

我还创建了一对执行逻辑的控制器。我添加了一个Helpers命名空间,并且在该命名空间内有几个包含分页,国际化等逻辑的类。

我想知道什么是放置函数和类的最佳做法,它执行一些常规工作,例如生成发票?

+0

如果可以的话,我会给这个问题+100票。我真的很想知道别人怎么解决这个问题。我刚开始尝试使用ASP.NET MVC(在一个中等规模的项目上),我发现自己经常被目录结构和一些MVC概念所困扰。 – 2009-09-30 14:27:48

回答

4

正如我在上面的评论中表达的,我对这个问题非常感兴趣。

首先,在您的ASP.NET MVC项目中直接创建额外的目录(对于其他类和实用程序)似乎是错误的。另外,我不认为它应该在模型中。对我而言,模型或多或少是以某种方式表示数据库(或我们试图建模的数据)的数据类。最重要的是,业务功能(或者应用程序中的“真实”代码段)一次处理几个模型类,因此在某些模型类中可能没有自然的地方。

所以我想我对下面的模式倾斜:

  • 控制器动作极小;每行只有几行代码。
  • 保留型号简单和大多无功能,并把它放到一个单独的项目
  • 将所有放入您的代码,将所有“真实”工作(“业务层”)转换为单独的项目

这样,你会在选择自己的命名空间得到了完全的自由,你就可以创建任意数量的实用工具类,函数,一般能为你喜欢不通过ASP的限制来构建你的代码。 NET MVC。

这只是一个想法。目前我正在处理我的第一个较大的ASP.NET MVC应用程序。所以我实际上会去了解它是否以及如何在实践中发挥作用。

+0

我想我会把所有的实际工作放在一个单独的项目中。 – jao 2009-10-02 14:00:54

0

您可能会考虑创建一些您注入控制器的服务。

这是一个几乎太宽泛的问题。

+0

你究竟是什么意思?你有链接的例子? – jao 2009-09-29 09:55:24

+0

http://en.wikipedia.org/wiki/Business_logic_layer – 2009-09-29 10:30:34

+0

@jao你使用依赖注入吗?那里有很多例子。看看s#arp体系结构一个 – dove 2009-09-29 10:59:03

0

这种业务逻辑应该在你的模型中的某个地方。

但是,我发现当只有某些东西不能真正“适合”任何地方 - 并且您可能想要创建一个实用程序类时 - 通常这是使用扩展方法的好地方。

也许你可以在你的数据集中添加扩展方法来帮助你分页?

0

我真的需要最好练习,考虑看看Domain Driven Design。它不适合所有项目,并且需要良好的面向对象技能,但我认为它毫无疑问是一种“最佳实践”......只要您能负担得起;-)

请注意,您已经违反了DDD因为你使用Active Record模式(将持久性逻辑放入实体中)。所以,我并不是说你跟随DDD。但无论如何,它会很有用。

0

我有像你一样有Crud和Poco的Model类。

除此之外,我有用于键入视图的Viewmodels。

我的ViewModel非常大,并在一些视图中使用(对于整个应用程序,大约有10-15个视图模型)。在我的应用程序中,这些ViewModel最终成为代码的完美之处,它代表着控制器操作的重要性和重复性。

例如,当我将产品添加到购物车时,我有一些相当接近UI的逻辑。我现在在ViewModel:AddToCart(IProductService productService,ICartService cartService)中有一个方法。

0

我认为这个关于实践的问题的最佳解决方案是: 如果要在控制器中使用模型,请将逻辑放入模型中。 如果它是特定于控制器的,只需将其放入控制器即可。 当我说模型时,这可能是一个单独的项目,它包含了你的实体数据模型,或者它可能是一个视图模型,或者它可能只是你的MVC项目的模型文件夹。

相关问题