gpt4 book ai didi

asp.net-mvc - 从 ASP.NET MVC web 应用程序进行多个单独的数据库调用是不好的做法吗?

转载 作者:行者123 更新时间:2023-12-01 13:08:11 24 4
gpt4 key购买 nike

我有一个名为 [RequiresCompletedProfile] 的 Controller 属性,我可以使用操作方法来禁止用户访问那里,除非他们已经完成了他们的个人资料。

当我有一种用户时,这工作正常,但此应用程序已经演变为有 2 种用户:供应商和客户。

因此,不再有“User_Profile”表。现在有一个“Client_Profile”和一个“Vendor_Profile”,它们的模式不同。我应该注意,我使用的是 LINQ,但我在将所有 LINQ 对象返回之前将它们映射到 POCO。

我的解决方案是创建一个名为“User_Type”的接口(interface),该接口(interface)具有以下方法:

bool IsProfileCompleted();

现在我的 Client 对象和我的 Vendor 对象都可以实现该接口(interface)并负责确定它们的字段/成员是否构成了它们正在完成的配置文件。

但是,现在我有多种用户类型,我不能确定从哪个表中提取配置文件,所以我必须这样做:

public class RequiresCompleteProfileAttribute : ActionFilterAttribute
{
IUserRepository userRepo = new SqlUserRepository();
IClientProfileRepository clientProfileRepo = new SqlClientProfileRepo();
IVendorProfileRepository vendorProfileRepo = new SqlVendorProfileRepo();

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{

// Database call #1
var user = userRepo.GetUserByUsername(User.Identity.Name);

UserType profile;

if (user.UserTypeName == "Client")
{
// Database call #2
profile = clientProfileRepo.GetClientByUserName(filterContext.HttpContext.User.Identity.Name);

}
else
{
// Database call #2
profile = vendorProfileRepo.GetClientByUserName(filterContext.HttpContext.User.Identity.Name);
}

if (!profile.IsProfileCompleted())
filterContext.HttpContext.Response.Redirect("/admin/editprofile/");


}

base.OnActionExecuting(filterContext);
}

}

你可以在这里看到我必须调用 2 个数据库,一个用于确定用户的类型,另一个用于从适当的表中获取配置文件。

这是不好的做法吗?如果是这样,我应该怎么做?

最佳答案

这并不是完全糟糕的做法,但如果您拥有一个中间层业务对象,您会得到很好的服务,该对象封装了根据用户类型名称按用户名查询客户端的逻辑。

关于asp.net-mvc - 从 ASP.NET MVC web 应用程序进行多个单独的数据库调用是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com