Я хотел бы знать, есть ли у других варианты написать следующее как «Чистый код»
Также ... это написано в VB, но я рад за предложения в C #
(Я только что написал это в блокноте ... возможно, не компилируется, но это принцип, который я задаю вопрос)
public class MyTest
public sub new()
end sub
public sub SaveSomething(message as string)
save($"{GetSessionId} == {GetIdentityName} == {message}")
if configurationmanager.appsettings("allowSomething") then
doSomethingElse()
end if
end function
private function GetSessionId as string
if httpcontext.current?.session?.sessionID isNot Nothing then
return httpcontext.current.session.sessionID
else
return ""
end if
end function
private function GetIdentityName as string
if httpcontext.current?.user?.identity?.name isNot Nothing then
return httpcontext.current.user.identity.name
else
return ""
end if
end function
private sub save(message)
dim filePath as string = configurationmanager.appsettings("filePath")
'some code here to save
end sub
private sub doSomethingElse()
'some code here
end sub
end class
Теперь я хочу удалить все ссылки "httpContext" и "ConfigurationManager"(чище, и поэтому я могу провести модульное тестирование и т. д.)
Один из методов, который я рассмотрел, - это создание классов провайдеров для этих четырех ситуаций, например
_SessionIdProvider as ISessionIdProvider
_IdentityNameProvider as INameProvider
_FilePathProvider as IPathProvider
_AppSettingsAllowSomethingProvider as IAllowSomethingProvider
и внедрение всех этих данных! который я теперь считаю беспорядочным
Я рассмотрел вспомогательный класс, поэтому один объект для внедрения, который я могу использовать для получения этих значений ... но в других местах решения может потребоваться, например, sessionID, с другимизначения, которых нет в этом вспомогательном классе, поэтому может иметь либо дублирующий код, либо массивный вспомогательный класс
Есть мысли? грязно ли вводить слишком много таких зависимостей?