【问题标题】:How do i make this code reusable?如何使此代码可重用?
【发布时间】:2017-01-05 16:49:05
【问题描述】:

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我的印象是(显然是错误的)您只能从控制器类访问数据库?我正在使用实体框架,所以“帮助”是正确的术语,所以我可以谷歌看看是否有关于这类事情的教程?
    • 我会稍微阅读一下 N 层架构,以了解其背后的理论。对于您现在的特定需求,保持简单并使用“Helper”或“Utility”术语可能没问题。
    • 另外,在控制器之外访问数据库是完全可以接受的。例如,有些人更喜欢只从与 Web 应用程序项目完全不同的项目访问数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2014-01-18
    • 2020-07-02
    • 1970-01-01
    • 2023-03-20
    • 2019-06-07
    相关资源
    最近更新 更多