Elixir에서 더 읽기 쉽게 리팩토링하는 방법이 있습니까?
def validate(params) do
Repo.start_link
if validate_oauth_params(params) === true do
oauth_client = Repo.get_by(OauthClient, random_id: params["client_id"], secret: params["secret"])
if oauth_client != nil do
allowed_grant_types = Poison.Parser.parse!(oauth_client.allowed_grant_types)
if Map.has_key?(allowed_grant_types, params["grant_type"]) do
case params["grant_type"] do
"password" ->
process_password_grant(params, oauth_client)
"refresh_token" ->
process_refresh_token_grant(params["refresh_token"], oauth_client)
"client_credentials" ->
process_client_credentials_grant(oauth_client)
nil ->
%{message: "Invalid oauth credentials", code: 400}
end
end
else
%{message: "Invalid oauth credentials", code: 400}
end
else
%{message: "Invalid oauth credentials", code: 400}
end
end
이 코드는 PHP처럼 보이기 때문에 Elixir 방식은 무엇입니까? 나는 그것을 쓰지 않았다.
맞습니다. PHP처럼 보입니다. 패턴 매칭과 같은 엘릭서의 이점은 사용되지 않습니다.
이 부분을 리팩토링하기는 어렵습니다. 다른 방법도 리팩토링해야 더 깔끔하게 처리 할 수 있기 때문입니다. 예를 들어 validate_oauth_params
"could"함수는 부울 값 대신 튜플을 반환하므로 이에 대해 패턴 일치를 수행하고 다음과 같이 수행합니다.
def validate(params) do
case validate_oauth_params(params) do
{:ok, params} -> choose_oauth_method params
{:error} -> handle_error "Invalid params"
end
end
defp choose_oauth_method(%{"grant_type" => "password"} = params) do
process_password_grant(params)
end
defp choose_oauth_method(%{"grant_type" => nil}) do
handle_error "Method undefined"
end
defp handle_error(msg), do: %{message: msg, code: 400}
defp handle_error(msg, code), do: %{message: msg, code: code}
defp handle_error(), do: %{message: "Default error massage", code: 400}
이런 식으로, 이것은 전혀 작동하지 않는 코드입니다. 단지 아이디어를 제공하고 패턴 일치가 작동하는 방식과 그 이점을 제공합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다