2

많은 인수를 메서드에 전달하는 대신 인수 개체에 캡슐화했습니다.매개 변수 개체에 대한 일반 클래스 또는 내부 클래스를 만드시겠습니까?

참고 : 무엇이 더 나은 관행, 데모 이러한 경우에 대한
alt text

위한 것 간체?

• 클래스를 만들고 이름 InventorySaveArgs으로은?
- 또는 -
중첩 클래스를 만들고 이름을으로 지정하면 SaveArgs이됩니까?

왜 당신은 하나 또는 다른 하나를 선택하겠습니까?

[편집] : 그 인수 유형은 다른 어셈블리에서도 사용됩니다.

: 우연히 단일 매개 변수에 여러 매개 변수를 캡슐화하기위한 패턴 이름이 있으면 그냥 궁금합니다.

[업데이트] : Found Nested Type Usage Guidelines InventorySaveArgs MSDN
에 다른 어셈블리에서 사용할 수 있어야합니다, 그래서 일반 클래스려고하고있다.

답변

1

IIRC .NET 설계 지침은이 점에서 매우 분명합니다. 공용 중첩 유형이 없어야합니다.

+0

맞지 않습니다. public 중첩 형식은 피하는 것이 좋지만 사용하는 데는 유효한 이유가있을 수 있습니다. http://msdn.microsoft.com/lv-lv/library/ms229027(en-us).aspx –

+0

좋습니다. 매우 드문 경우가 있습니다. 해당 규칙에 대한 예외는 있지만 여기서는 적용되지 않습니다. –

+0

CLR 예외 예를 보려면 여섯 개의 중첩 된 공용 컬렉션 형식이있는 WinForms ListView를 참조하십시오. ListView와 함께 사용되기 때문에 중첩되어 있습니다. 다른 WinForms 컨트롤에는 비슷한 중첩 형식이 있습니다. –

1

다른 유형의 유형을 사용할 수있게하려는 경우를 대비하여이 이름을 InventorySaveArgs으로 지정합니다. 처음부터 이름을 InventorySaveArgs이라면 리팩토링을해야하는 경우 모든 컨텍스트에서 의미있는 이름을 갖게됩니다.

1

먼저 외부 클래스를 만들고 InventorySaveArgs라는 이름을 지정합니다. 특정 클래스가 공용 메서드에서 사용되는 경우 클래스 외부에 포함되지 않는 유일한 인수는 네임 스페이스 오염입니다.

내부 클래스를 사용하는 것은 클래스 이름 앞에 계속해서 형식 이름을 붙여야하기 때문에 C#에서 매우 솔직하게 짜증납니다. 명시된 바와 같이 public이되면 donig에 대한 유일한 동기는 네임 스페이스 오염의 감소입니다. 그러나 네임 스페이스가 너무 커서 InventorySaveArgs 클래스가 너무 커지면 어쨌든 네임 스페이스를 해체해야 할 것입니다.

1

내가 들어 본 하나의 객체에 여러 매개 변수를 캡슐화하는 유일한 패턴은 다음과 같습니다. refactoring pattern detailed by Martin Fowler

+0

+1 : 어떻게 적절하게 명명 된 패턴 .. 매개 변수 개체 .. 누가 짐작 했겠습니까! 감사 – Sung