을 제공 어떤 도움을 주셔서 감사합니다, 여기를 직렬화보다 더 나은 솔루션입니다 switch 문의 내용 나는 당신이 정규식 찾기/바꾸기 소스를 통해 작업을 교체하거나 스위치 내용을 파생시키는 것을 돕기 위해 파일을 추가하는 것을 골칫거리로하고 싶지는 않다.
먼저 빌드 작업 클래스 각각이 기본 클래스에서 상속되는지 확인하십시오. 당신이 스위치 문을 제거하고 일반 공장으로 교체받을 수 있습니다 후
public abstract class BuildAction
{
public string Description { get; set; }
protected BuildAction(string description)
{
Description = description;
}
public abstract void PerformBuildAction();
}
public class BuildTest : BuildAction
{
public BuildTest() : base("Build the test with the supplied designator as 'arg_designator'") { }
public override void PerformBuildAction()
{
// do stuff here
}
}
public class ChangeRole : BuildAction
{
public ChangeRole() : base("Change the user's role") { }
public override void PerformBuildAction()
{
// do stuff here
}
}
public class CheckoutData : BuildAction
{
public CheckoutData : base("Check out the data you wish to test") { }
public override void PerformBuildAction()
{
// do stuff here
}
}
: 당신이 그렇게하는 동안, 각 빌드 액션 클래스에게 일을 더 쉽게 만들 수있는 설명을 제공합니다. 당신이처럼 공장을 경우
public class BuildActionFactory
{
private static IDictionary<string, BuildAction> _buildActions =
new Dictionary<string, BuildAction>()
{
{"BUILDTEST", typeof(BuildTest)},
{"CHANGEROLE", typeof(ChangeRole)},
{"CHECKOUTDATA", typeof(CheckoutData)}
};
public static BuildAction CreateBuildAction(string directive)
{
return _buildActions.ContainsKey(directive) ?
Activator.CreateInstance(_buildActions[directive]) :
null;
}
public static string BuildReadme()
{
return string.Join(Environment.NewLine + Environment.NewLine,
new [] {"FUNCTIONALITY"}.Union(_buildActions.Select(pair => pair.Key + ": " + pair.Value.Description));
}
}
: 당신은 공장을 만드는 방법에 따라, 먼저 추가 정보를 위해를 통해 반복하고 명령 라우팅에 대한 조회를 단순화하기 위해 디렉토리를 구축하여 추가 정보 생성을 위해 그것을 활용할 수 switch 문을 BuildActionFactory.CreateBuildAction("BUILDTEST/CHANGEROLE/CHECKOUTDATA/etc whatever you got from the user").PerformBuildAction()
에 대한 간단한 호출로 바꿀 수 있으며 readme 내용은 BuildActionFactory.BuildReadme()
에 의해 생성 될 수 있습니다. 물론 솔루션을 빌드 할 때 readme 파일을 만들려면 래퍼 콘솔 응용 프로그램 프로젝트에서 BuildActionFactory.BuildReadme()
을 호출하는 게시 빌드 작업을 추가해야합니다.이 작업은 readme를 생성 할 수있는 구성 파일을 읽는 리팩토링보다 간단합니다.
면책 조항 : 위의 코드는 모두 Sublime로 작성되었습니다. 그것들 중 어느 것도 컴파일되거나 테스트되지 않았지만이 접근법을 취하면 어떻게해야하는지에 대한 아이디어를 줄 것입니다.
내 릴리스가 푸시 백되어서 구현하지 못했습니다. 푸시가 밀려 오면 몇 달 안에 당신을 계속 지켜 드리겠습니다. 그런 깊이있는 제안에 감사드립니다. – Rice