2017-01-05 60 views
0

在我的应用程序中,我有一个检查,它检查一堆数据库表的COUNT。如果这些COUNTS中的每一个都高于某个阈值,那么它将属性设置为活动。这里是用户添加房间信息我如何使此代码可重用?

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Create([Bind(Include = "ID,RoomTypeID,Description")] Room room, int propertyId) 
    { 
     if (ModelState.IsValid) 
     { 
      room.ID = Guid.NewGuid(); 
      room.DateCreated = DateTime.Now; 
      room.PropertyID = propertyId; 
      db.Rooms.Add(room); 
      await db.SaveChangesAsync(); 
      var roomCount = db.Rooms.Where(r => r.PropertyID == propertyId).Count(); 
      var rateCount = db.Rates.Where(r => r.PropertyID == propertyId).Count(); 
      var imageCount = db.PropertyImage.Where(r => r.PropertyID == propertyId).Count(); 
      if(roomCount >= 3 && rateCount >= 3 && imageCount >= 3) 
      { 
       //Set Property as ACTIVE 
      } 
      return RedirectToAction("Index"); 
     } 

的问题,我有一个控制器的一个例子,是我要运行这个检查(3个数据库计数和的“如果”语句)上一大堆控制器。我不想在每个控制器上为每个动作都复制这个配置。此外,这项检查可能容易改变,所以我想在一个地方更新它。

我最好如何去做这件事?我应该创建某种帮助类吗?

谢谢

回答

1

你是在正确的轨道上。您希望根据您的需求尽可能多地分离责任,或者在应用程序中已经建立的分离级别。至少,我会创建一个访问数据库的类,另一个包含逻辑来做出“如果”决定。例如控制器 - >调用助手 - >调用DBAccessor

+0

我是(显然是错误的)的印象,你只能从控制器类访问数据库?我正在使用实体框架,'助手'是正确的术语,所以我可以谷歌,看看有没有关于这种事情的任何教程? – Gavin5511

+1

我会稍微阅读一下N层架构来理解它背后的理论。为了您现在的具体需求,保持简单并使用“助手”或“实用程序”术语可能没有问题。 –

+0

另外,访问控制器之外的数据库是完全可以接受的。例如,有些人更喜欢只从与Web应用程序项目完全不同的项目访问数据库。 –