如何使此代码可重用?

时间:2017-01-05 16:49:06

标签: asp.net asp.net-mvc entity-framework entity-framework-6

在我的应用程序中,我有一个检查,它检查一堆数据库表的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个数据库COUNTS和'if'语句)。我不想为每个操作在每个控制器上复制此配置。此外,这项检查可能很容易改变,所以我想在一个地方更新它。

我最好怎么做?我应该创建某种辅助类吗?

由于

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。您希望根据您的需求或应用程序中已建立的分离级别尽可能地分离该责任。至少,我会创建一个访问数据库的类,另一个包含用于做出“if”决策的逻辑。例如Controller - &gt;呼叫助手 - &gt;调用DBAccessor