在我的应用程序中,我有一个检查,它检查一堆数据库表的计数。如果这些 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 个数据库 COUNT 和"if"语句)。我不想在每个控制器上为每个操作复制此配置。此外,此检查可能容易受到更改,因此我想仅在一个地方更新它。
我该如何最好地做到这一点?我应该创建某种帮助程序类吗?
谢谢
你走在正确的轨道上。您希望根据需要或应用程序中已建立的分离级别尽可能多地分离该责任。至少,我会创建一个访问数据库的类,另一个包含做出"if"决策的逻辑的类。例如,控制器 -> 调用帮助程序 -> 调用 DBAccessor