c# - asp.net core如何减少类耦合
问题描述
我如何优化类耦合?这是我的班级和visual studio show班级的耦合度是16,最高标准是9。
public class Auth:IAuth
{
public List<AuthDetail> GetAuths()
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
var auths = config.GetSection("Auth").GetChildren().ToList()
.Select(x => new AuthDetail
{
UserName = x.GetValue<string>("UserName"),
Source = x.GetValue<string>("Source"),
Password = x.GetValue<string>("Password")
}).ToList();
return auths;
}
}
解决方案
d很难准确地说出它在上下文中抱怨什么,但我想这只是你的类拥有的依赖级别(即它正在创建的东西),一般来说,它必须具备关于其他组件的知识。例如,它必须了解它ConfigurationBuilder
以及它是如何工作的。虽然它与“类耦合”无关,但它也需要知道有一个appsettings.json
文件。你也有一些魔法字符串,比如你的Auth
部分,如果配置不是这样设置的,整个事情都会失败。同样,这不一定是“类耦合”,但它仍然是一个问题。
就个人而言,我会把这整个东西扔进垃圾桶,至少基于它的当前状态。也许这个Auth
类还需要做其他事情,但这部分几乎完全没用。
首先,您的配置应该被外部化。这就是重点。我假设这是图书馆的一部分,如果是这样,图书馆不应该有这种知识。它们应该只依赖于抽象,这为您提供了可扩展性。
在您的实际 ASP.NET Core 应用程序中,您应该指定配置(appsettings.json
默认情况下已包含在内)。您还应该使用强类型配置,它可以代替这里的所有这些逻辑。换句话说,这可以替换为:
services.Configure<AuthOptions>(Configuration.GetSection("Auth"));
然后你只需要以下类:
public class AuthOptions
{
public List<AuthDetail> Auths { get; set; }
}
而且,你已经完成了。如果您的Auth
班级正在做其他事情,那么您可以简单地将这个AuthOptions
班级注入其中:
public class Auth : IAuth
{
private readonly List<AuthDetail> _auths;
public Auth(IOptions<AuthOptions> authOptions)
{
_auths = authOptions.Value?.Auths;
}
...
}
然后,只需简单地使用_auths
而不是调用GetAuths
. 如果您想公开“auths”(因为GetAuths
它是一个公共方法),您可以使用自定义 getter 实现一个属性,保留GetAuths
但只是让它返回_auths
,或者只是将_auths
ivar 公开。
推荐阅读
- javascript - 无法使用javascript关闭小米和三星移动设备上的手电筒
- python - 如何通过编辑 conf/interpreter.json 文件向 Zeppelin 添加新的 jdbc 解释器?
- javascript - 使用javascript从leftMost,rightMost,topMost,BottomMost点计算正方形的中心点
- javascript - 获取用户当前位置的经纬度
- vba - VBA:检查一列中的奇数/偶数,然后检查另一列中的正确值
- firebase - Google Cloud Functions - 类型错误无法读取属性“addQmark”
- javascript - 如何在 Angular Js html 页面中使用相同的组件两次
- java - 时间戳 MySQL 减去我约会的两个小时
- corda - 在corda中上传附件
- oracle - 从日期范围创建 oracle 表行