저는 C #을 사용하며 이것이 제 접근 방식입니다. 치다:
class Foo
{
// private fields only to be written inside a constructor
private readonly int i;
private readonly string s;
private readonly Bar b;
// public getter properties
public int I { get { return i; } }
// etc.
}
옵션 1. 선택적 매개 변수가있는 생성자
public Foo(int i = 0, string s = "bla", Bar b = null)
{
this.i = i;
this.s = s;
this.b = b;
}
예를 들어 new Foo(5, b: new Bar(whatever))
. 4.0 이전의 Java 또는 C # 버전에는 해당되지 않습니다. 그러나 모든 솔루션이 언어에 구애받지 않는 방법의 예이므로 여전히 보여줄 가치가 있습니다.
옵션 2. 단일 매개 변수 객체를 취하는 생성자
public Foo(FooParameters parameters)
{
this.i = parameters.I;
// etc.
}
class FooParameters
{
// public properties with automatically generated private backing fields
public int I { get; set; }
public string S { get; set; }
public Bar B { get; set; }
// All properties are public, so we don't need a full constructor.
// For convenience, you could include some commonly used initialization
// patterns as additional constructors.
public FooParameters() { }
}
사용 예 :
FooParameters fp = new FooParameters();
fp.I = 5;
fp.S = "bla";
fp.B = new Bar();
Foo f = new Foo(fp);`
3.0부터 C #은 개체 이니셜 라이저 구문 (이전 예제와 의미 상 동일)을 사용하여이를 더욱 우아하게 만듭니다.
FooParameters fp = new FooParameters { I = 5, S = "bla", B = new Bar() };
Foo f = new Foo(fp);
옵션 3 :
너무 많은 매개 변수가 필요하지 않도록 클래스를 다시 디자인하십시오. 당신은 그 책임을 여러 클래스로 나눌 수 있습니다. 또는 요청시 생성자가 아닌 특정 메서드에만 매개 변수를 전달합니다. 항상 실행 가능한 것은 아니지만 가능하다면 할 가치가 있습니다.