C# net内核如何减少类耦合
如何优化类耦合?。这是我的班级,visual studio show班级耦合为16,高于最高标准9C# net内核如何减少类耦合,c#,asp.net-core,solid-principles,C#,Asp.net Core,Solid Principles,如何优化类耦合?。这是我的班级,visual studio show班级耦合为16,高于最高标准9 public class Auth:IAuth { public List<AuthDetail> GetAuths() { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory(
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;
}
}
公共类身份验证:IAuth
{
公共列表GetAuths()
{
var config=new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”).Build();
var auths=config.GetSection(“Auth”).GetChildren().ToList()
.选择(x=>new AuthDetail
{
用户名=x.GetValue(“用户名”),
Source=x.GetValue(“Source”),
Password=x.GetValue(“密码”)
}).ToList();
返回授权;
}
}
dIt很难在上下文之外准确地说出它在抱怨什么,但我可以想象,这只是类所拥有的依赖性级别(即它正在创建的东西),以及通常它必须具备的关于其他组件的知识。例如,它必须了解ConfigurationBuilder
及其工作原理。虽然它与“类耦合”无关,但它还需要知道有一个appsettings.json
文件。你也有一些神奇的字符串,比如你的Auth
部分,如果配置没有那样设置,整个过程都会失败。同样,这不一定是“类耦合”,但它仍然是一个问题
就我个人而言,我会把这整件事扔进垃圾桶,至少从它目前的状态来看。也许Auth
类还需要做其他事情,但这部分几乎完全没有用
首先,您的配置应该外部化。这就是重点。我假设这是图书馆的一部分,如果是的话,图书馆不应该有这种知识。它们应该只依赖于抽象,这给了您可扩展性
在实际的ASP.NET核心应用程序中,您应该指定配置(默认情况下,appsettings.json
)。您还应该使用强类型配置,它可以取代这里的所有逻辑。换言之,这可以替换为:
services.Configure<AuthOptions>(Configuration.GetSection("Auth"));
然后,只需使用\u auths
而不是调用GetAuths
。如果您想公开“auths”(因为GetAuths
是一个公共方法),您可以使用自定义getter实现一个属性,保留GetAuths
,但只让它返回\u auths
,或者只将\u auths
ivar公开
public class AuthOptions
{
public List<AuthDetail> Auths { get; set; }
}
public class Auth : IAuth
{
private readonly List<AuthDetail> _auths;
public Auth(IOptions<AuthOptions> authOptions)
{
_auths = authOptions.Value?.Auths;
}
...
}