MVC模式和实践

时间:2013-09-18 13:18:03

标签: asp.net-mvc asp.net-mvc-4 architecture

我还要问一下asp.net MVC的最佳实践和模式,使用这个例子:

我有一个项目。这是它的架构:

  1. 模特
  2. Controler
  3. 观看次数
  4. 工具
  5. models 文件夹中,我将每个ViewModel放在单独的类字段中。我放在一个文件(AccountModels.cs或ForumModels.cs)中的所有表声明(对象)。我有一个单独的EF上下文文件(MyAppContext.cs)。

    控制器 - 这里我只有Controler类。但也许代码的一部分将是更好的示例和建议我可以改进:

    private AppContext db = new AppContext ();
    
    [HttpPost]
    [Authorize]
    public ActionResult AddGun(GunModel model)
    {
        if (ModelState.IsValid)
        {
            Gun gunToAdd = new Gun
            {
                Tilte = model.Tilte,
                AuthorID = UserTools.getUser(User.Identity.Name).UserId,
                AddDate = DateTime.UtcNow,
                Content = model.Content,
                CategoryID = model.CategoryID,
                CategoryName = GunsTools.getCategoryName(model.CategoryID)
    
            };
    
            db.Guns.Add(gunToAdd);
            db.SaveChanges();
    
            return RedirectToAction("Details", new { ID = gunToAdd.ID });
    
        }
    
    return RedirectToAction("Index");
    
    }
    

    这是AddGun Action的控制器的一部分。其他ActionResults是相似的 - 通常我在我的db上下文中使用lambda表达式来获取值等。

    观看次数 - 单独文件夹中的视图,部分视图我设置了特殊前缀(例如_NavigationPartial.cshtml或_CalculatorPartial.cshtml)。这里有什么可以改进的吗?当然,Views使用ViewModels,而不是Models。

    至少 - 工具。我在这里放了一些类和方法来防止重复代码。这里有一些方法可以从数据库返回一些对象或只是字符串,比如GetUser(..)或GetCategoryName(..)。这是一个好习惯吗?

    我认为很多年轻的MVC开发人员拥有相同的项目架构(我个人在少数公司看到过),他们中的许多人也许想要改进他们项目中的某些东西以成为更好的程序员。

    此致

1 个答案:

答案 0 :(得分:1)

如上述评论所述,很难回答这么广泛的问题,但我会提出一些意见


  • 直接在Controller中使用数据库实体并不是一个好主意,因为这会将控制器与数据库紧密耦合,并可能导致数据暴露在您真正不属于您的视图中。

相反,你应该有一个单独的数据层,它抽象出Gun实体的细节(从数据库的角度来看)和枪模型是什么(从视图的角度来看)

here

找到一个随机选择但有关此问题的好问题
  • 您可以考虑为控制器使用依赖注入(DI)

这样你就有了一个如下所示的构造函数:

readonly AppContext _db;
public GunController(AppContext db)
{
    if (db==null) {throw new ArgumentNullException("db is null");}
   _db=db;
}

你需要使用DI容器。随机选择(但非常好)的文章可以找到here


最重要的是,不断提出问题,但要尽量保持问题,特别是关于应用程序的特定区域 - 并且在任何时候你都会很好地了解什么是好的做法而不是好的做法!