C# 在web窗体类中读取多个httpContext调用的干净方法
我想知道其他人是否有选择将以下内容写成“干净代码” 还有。。。这是用VB写的,但我很高兴能用C写一些建议# (我只是在记事本上写的……可能无法编译,但这是我质疑的原则) 现在,我想去掉所有的“httpContext”和“ConfigurationManager”引用(cleaner,因此我可以进行单元测试等等) 我考虑过的一种方法是为这四种情况创建提供者类,例如C# 在web窗体类中读取多个httpContext调用的干净方法,c#,vb.net,dependency-injection,inversion-of-control,clean-architecture,C#,Vb.net,Dependency Injection,Inversion Of Control,Clean Architecture,我想知道其他人是否有选择将以下内容写成“干净代码” 还有。。。这是用VB写的,但我很高兴能用C写一些建议# (我只是在记事本上写的……可能无法编译,但这是我质疑的原则) 现在,我想去掉所有的“httpContext”和“ConfigurationManager”引用(cleaner,因此我可以进行单元测试等等) 我考虑过的一种方法是为这四种情况创建提供者类,例如 _SessionIdProvider as ISessionIdProvider _IdentityNameProvider as I
_SessionIdProvider as ISessionIdProvider
_IdentityNameProvider as INameProvider
_FilePathProvider as IPathProvider
_AppSettingsAllowSomethingProvider as IAllowSomethingProvider
把这些都注射进去!我现在觉得这很混乱
我考虑了一个助手类,因此需要注入一个对象,我可以使用它来获取这些值。。但是解决方案中的其他地方可能需要sessionID,例如,具有不在此helper类中的其他值,因此可能有重复的代码,或者有大量的helper类
有什么想法吗?像这样注入太多依赖项是不是很麻烦?我不认为四个依赖项太多,但它可能处于边缘。。。我建议您遵循并让客户机类(
MyTest
)“设计”它所需的接口
但是,由于所讨论的方法都不接受任何参数,因此您可以将所有依赖项减少为
在C#中,可能是这样的:
public class MyTest
{
public MyTest(string sessionId, string identityName, bool allowSomething, string filePath)
{
SessionId = sessionId;
IdentityName = identityName;
AllowSomething = allowSomething;
FilePath = filePath;
}
public string SessionId { get; }
public string IdentityName { get; }
public bool AllowSomething { get; }
public string FilePath { get; }
public void SaveSomething(string message)
{
Save($"{SessionId} == {IdentityName} == {message}");
if (allowSomething))
DoSomethingElse();
}
private void Save(message)
{
var filePath = FilePath;
// some code here to save
}
private void DoSomethingElse()
{
// some code here
}
}
这三个值
SessionId
、IdentityName
和AllowSomething
看起来像是属于一组与身份验证和授权相关的值,因此它们可能更适合作为一个整体。我不认为这四个值有太多依赖关系,但它可能处于边缘。。。我建议您遵循并让客户机类(MyTest
)“设计”它所需的接口
但是,由于所讨论的方法都不接受任何参数,因此您可以将所有依赖项减少为
在C#中,可能是这样的:
public class MyTest
{
public MyTest(string sessionId, string identityName, bool allowSomething, string filePath)
{
SessionId = sessionId;
IdentityName = identityName;
AllowSomething = allowSomething;
FilePath = filePath;
}
public string SessionId { get; }
public string IdentityName { get; }
public bool AllowSomething { get; }
public string FilePath { get; }
public void SaveSomething(string message)
{
Save($"{SessionId} == {IdentityName} == {message}");
if (allowSomething))
DoSomethingElse();
}
private void Save(message)
{
var filePath = FilePath;
// some code here to save
}
private void DoSomethingElse()
{
// some code here
}
}
三个值SessionId
、IdentityName
和AllowSomething
看起来像是属于一组与身份验证和授权相关的值,因此它们可能更适合作为一个整体