2008-08-06 4 views
36

나는이 모든 방법으로 사용되는 것을 보았으며 잘못된 방법으로 사용한다고 비난 받았다. (그 경우에도 point을 설명하기 위해 그런 식으로 사용했다.).Net에서 확장 메서드를 사용하는 가장 좋은 방법은 무엇입니까?

그렇다면 확장 방법을 사용하는 가장 좋은 방법은 무엇이라고 생각하십니까?

개발 팀이 확장 방법 라이브러리를 만들고 다양한 프로젝트에 배포해야합니까?

오픈 소스 프로젝트 형태로 일반적인 확장 방법 모음이 있어야합니까?

업데이트 : 나는 그것을 확장 방법을 제공 어떤 목적에 달려 있다고 생각 조직 넓은 확장 메서드 라이브러리

답변

2

을 만들하기로 결정했습니다.

  • 프로젝트의 특정 비즈니스 요구 사항과 관련된 확장 방법 (기본 데이터 형식이나 사용자 지정 개체에 연결되어 있는지 여부)은 여러 프로젝트에 분산되어있는 라이브러리에 포함하면 안됩니다.
  • 기본 데이터 유형 (int, string 등) 또는 광범위한 응용 프로그램이있는 제네릭과 관련된 확장 메서드를 패키징하여 여러 프로젝트에 분산시킬 수 있습니다.

intellisense가 막히거나 혼동 및/또는 오용으로 이어질 수 있으므로 응용 프로그램이 거의없는 확장 메서드가 전역에 포함되지 않도록주의하십시오.

+0

예. 그거 맞아. 그러나 더 구체적인 지침이 있어야합니다. (예를 들어, 하나의 객체 클래스를 확장해야합니까?) 당신은 타사 라이브러리를 확장해야 하는가? – Vaibhav

3

필자는 내 프레임 워크를 사용하여 작업하는 사람들이이 방법을 유용하게 사용할 수 있기 때문에 Utils 클래스에 내 핵심 라이브러리를 포함 시켰습니다. 그러나 대량 개발자는 최종 개발자가 사람들이 단순히 참조 또는 using 문 또는 추가 선택할 수 있도록 필요한 경우 확장 메서드 라이브러리, 정말처럼, 자신의 네임 스페이스, 심지어 자신의 프로젝트 파일로 모든 확장 퍼팅 권합니다 :

Core.Extensions.Base64Encode(str); 

My Utils 클래스는 전 세계에서 가장 친한 친구입니다. 확장 메소드가 나오기 전에 있었고 우리 관계를 강화하는 데 도움이되었습니다. 가장 큰 규칙은 사람들이 가능한 확장 프레임 워크를 선택하는 것입니다.

4

두 가지 모두 확장 메소드 라이브러리 인 http://www.codeplex.com/nxlhttp://www.codeplex.com/umbrella을 살펴볼 수 있습니다. 필자는 개인적으로 소스 코드를 보지 못했지만, 거기에있는 사람들이 당신에게 좋은 지적을 줄 수있을 것이라고 확신합니다.

+0

언급 된 프로젝트 중 어느 것도 2008 년 이후로 개발 활동을하지 못한 것으로 나타났습니다. – DavidRR

3

Objective-C 언어는 1990 년대 초반부터 "카테고리"를 가지고 있습니다. 이들은 본질적으로 .NET 확장 메서드와 같습니다. 베스트 프랙티스를 찾을 때 Objective-C (Cocoa & NeXT) 개발자가 주위에 어떤 경험 법칙을 발견했는지 볼 수 있습니다.

Brent Simmons (Mac OS X 및 iPhone 용 NetNewsWire RSS 리더 작성자)은 오늘 new style rules for the use of categories에 대해 게시되었으며 해당 게시물 주변에 discussion in the Cocoa community 비트가 있습니다.

7

프레임 워크 디자인 가이드 라인의 향후 릴리스는, 2 판은 확장 메서드를 구현하기위한 몇 가지 지침을 가지고 있지만 것입니다 일반적으로 :

에만 "가 의미 론적 의미를"도우미 기능을 제공하는 확장 메서드를 정의해야

모든 구현과 관련이 있습니다. 또한 모든 .NET 언어로하는 System.Object를 확장하지 않도록해야

는 확장으로 확장 메서드를 호출 할 수 있습니다. (VB.NET은 예를 들어 정적 확장 클래스에 정규 정적 메서드로 호출 할 필요가있을 것이다.) 당신이 인터페이스를 확장하지 않는 한

가 확장 된 형태와 같은 네임 스페이스의 확장 메서드를 정의하지 마십시오.

절대 호출되지 않으므로 "실제"메소드와 동일한 서명으로 확장 메소드를 정의하지 마십시오.

1

확장 프로그램에 대해 처음 알았을 때 나는 그들을 과도하게 남용하고 학대했습니다.

대부분의 경우 확장 메소드 사용이 여러 가지 이유로 인해 시작되었습니다.

이유 중 일부

나는 같은 "생각을 두 번 유형을 확장하기 전에 보유하고 있지 않습니다"로, 그 위의 스콧의 블로그 링크에 설명되어 있습니다 사용을 중단. 확장하는 유형에 대한 소스를 제어 할 수없는 경우 소스 유형에 추가/변경 사항 (예 : 프로젝트를 최신 .NET 버전으로 이동)이있는 경우 나중에 문제/충돌이 발생할 수 있습니다. 최신 .NET 버전에 확장 기능과 동일한 이름의 유형에 대한 메소드가 포함되어있는 경우 누군가가 방해받을 것입니다. 내가 확장 메서드 사용을 중단하는 이유

주된 이유

메소드의 소스이며, 누가 그것을 "소유"위치를 신속하게 코드를 읽고 말할 수 있다는 것입니다.

단지 코드를 읽을 때 당신이 방법은 종류에 확장하거나 표준 NET API 방식인지 말할 수 없다.

인텔리 센스 메뉴는 정말 지저분해질 수 있습니다.

관련 문제