我目前正在开发一个ASP.net MVC网站项目。
我已将所有与数据库相关的内容放入我的模型中,例如查询和更新/删除/保存功能。
我还创建了几个执行逻辑的控制器。我添加了一个Helpers名称空间,在该名称空间中有一些类包含分页,国际化等逻辑。
我想知道放置功能和类的最佳做法是什么,例如生成发票?
答案 0 :(得分:5)
正如我在上面的评论中表达的那样,我对这个问题非常感兴趣。
首先,直接在ASP.NET MVC项目中创建其他目录(对于其他类和实用程序)似乎是错误的。而且,我觉得它不应该在模型中。对我来说,模型是或多或少的数据类,它们在某种程度上代表数据库(或我们试图建模的数据)。最重要的是,业务功能(或应用程序中的“真实”代码片段)通常一次处理多个模型类,因此在某些模型类中可能没有自然的位置。
所以我认为我倾向于以下架构:
通过这种方式,您可以完全自由地选择自己的命名空间,您将能够创建任意数量的实用程序类,函数,并且通常能够根据需要构建代码,而不受ASP.NET MVC的限制。
这只是一个想法。目前我正在开发我的第一个更大的ASP.NET MVC应用程序。所以我实际上将要了解它是否以及如何在实践中发挥作用。
答案 1 :(得分:1)
我有像你一样拥有Crud和Poco的Model类。
除此之外,我还有用于输入视图的Viewmodels。
我的View模型非常大,可用于几个视图(整个应用程序大约有10-15个视图模型)。在我的应用程序中,这些ViewModels最终成为代码的最佳位置,这些代码对于控制器操作而言是大而重复的。
例如,当我将产品添加到购物车时,我有一些非常接近UI的逻辑。我现在在ViewModel中有一个方法:AddToCart(IProductService productService,ICartService cartService)。
答案 2 :(得分:0)
您可以考虑创建一些注入控制器的服务。
这个问题太过宽泛了。
答案 3 :(得分:0)
这种业务逻辑应该在您的模型中的某个位置。
然而,我发现当某些东西在任何地方都没有“适合”时 - 你可能想要创建一个Utilities类 - 这通常是一个利用Extension方法的好地方。
也许您可以在数据集上添加扩展方法来帮助您进行分页?
答案 4 :(得分:0)
我确实需要最佳做法,请考虑查看Domain Driven Design。它不适合所有项目,并且需要良好的OOP技能,但我认为毫无疑问是“最佳实践”......只要你能负担得起它; - )
请注意,由于您使用Active Record模式(将持久性逻辑放入实体),因此您已经违反了DDD。所以,我并没有说你有来关注DDD。但无论如何,这将是有用的。
答案 5 :(得分:0)
我认为这个关于练习的问题的最佳解决方案是: 如果它将在控制器之间使用,则将逻辑放在模型中。 如果它是特定于控制器的,只需将其放入控制器即可。 当我说模型时,这可能是一个单独的项目,它包含你的实体数据模型,或者它可能是一个视图模型,或者它可能只是你的MVC项目的Models文件夹。