2009-08-04 36 views
38

Tôi biết đã tồn tại một post, mô tả gần giống nhau, nhưng tôi nghĩ rằng tôi có một chút khác biệt.Các phương pháp hay nhất: C# Phương pháp mở rộng không gian tên và khuyến khích các phương pháp mở rộng

Điều tôi muốn biết là cách bạn tổ chức các phương pháp tiện ích mở rộng của mình về việc chỉ định không gian tên. Hiện nay - cho phương pháp mở rộng trong khuôn khổ của chúng tôi - Tôi sử dụng không gian tên mẫu sau

  • MyCompany.Web.Utils

và bên trong tôi có các lớp học phương pháp khuyến nông. Điều này là tốt cho tôi với những bất lợi mà các bộ mở rộng không ngay lập tức nhìn thấy được với các nhà phát triển phần mềm của chúng tôi. Hãy xem xét trường hợp tôi có một lớp StringExtender cung cấp một cách khá tiện dụng extension method "In" mở rộng đối tượng String. Có phương thức mở rộng với không gian tên đã đề cập ở trên, các lập trình viên của chúng ta sẽ không thấy phương thức mở rộng trừ khi chúng bao gồm một cách rõ ràng vùng tên của nó. Thay vào đó, nếu tôi sẽ đặt phương thức mở rộng trong không gian tên System, mọi người sẽ ngay lập tức nhìn thấy nó, nhưng tôi đã read that this is bad practice.

Vì vậy, câu hỏi của tôi là cách bạn quảng bá các phương pháp tiện ích mở rộng của mình s.t. chúng được các nhà phát triển của bạn sử dụng.

Trả lời

31

Chúng tôi đặt tất cả chúng vào không gian tên riêng của chúng Company.Common.Extensions. Bằng cách đó, nếu bạn có bất kỳ phương pháp mở rộng nào của chúng tôi, bạn có tất cả. Ngoài ra, ít nhất tại cửa hàng của tôi, chúng tôi không phải lo lắng về các nhà phát triển của chúng tôi không biết về các phương pháp mở rộng. Tôi có sự lo lắng đối diện, quá tải phương pháp mở rộng! :)

+2

(+1) Tôi đồng ý, chúng tôi sử dụng khái niệm đặt tên nơi chúng tôi thêm .extensions ở cuối. –

+0

+1. Điểm tốt về quá tải phương thức mở rộng. – RichardOD

+0

Đó là cơ bản những gì tôi đang làm. Vì vậy, tôi đoán đó là cách tốt nhất để tiếp tục như vậy. Thx – Juri

3

@ Juri- Nếu bạn nghĩ về vấn đề này, cũng giống như các nhà phát triển khi biết rằng lớp X tồn tại trong khung công tác .NET. Giao tiếp là chìa khóa mà tất cả các thành viên trong nhóm sử dụng các lớp học phù hợp, có thể là các phương pháp mở rộng hoặc một số trợ giúp khác.

Như JP đã nêu, tôi thường thấy các phương pháp mở rộng trong một số loại thư mục con được gọi là Tiện ích mở rộng. Hy vọng rằng khi bạn nói bạn sử dụng my.company.web.utils không gian tên thực sự là Pascal cased?

Thậm chí nếu bạn đặt chúng ở vị trí tốt, không có đảm bảo 100% mà các nhà phát triển khác sẽ sử dụng chúng.

+0

có, tên là pascal cased ... đã không chú ý đến điều đó khi đăng nó ở đây :) – Juri

9

Vấn đề ở đây không phải là việc đặt tên cho không gian tên, đó là việc thiếu tài liệu và giáo dục của các nhà phát triển của bạn.

Đặt chúng vào bất kỳ không gian tên nào có ý nghĩa, viết một bài viết wiki ghi lại tất cả các phương pháp mở rộng của bạn, sau đó gửi email đến các nhà phát triển của bạn bằng liên kết đến bài viết wiki.

+0

Vâng đó là lựa chọn khác của tôi. Thiếu thông tin liên lạc thường là một vấn đề trong các nhóm phát triển phần mềm. Chúng tôi đang trong quá trình thiết lập một wiki, nhưng nó thường khá khó khăn, dưới áp lực thời gian và không được hỗ trợ về loại hoạt động này bởi ban quản lý. Tôi đoán mọi người biết tôi đang nói về cái gì. – Juri

+3

Tôi cảm thấy đau đớn của bạn. Đôi khi tôi tìm thấy nó tốt hơn để đi trước và làm những việc này, có được những người sử dụng chúng và THEN nói với quản lý :) –

+0

Cùng một điểm như câu trả lời của tôi, nhưng 1 cho đề cập đến bằng cách sử dụng một wiki. – RichardOD

3

Giả sử bạn sử dụng Visual Studio, một cách để tạo mẫu lớp tùy chỉnh (hoặc sửa đổi lớp mặc định) để bất cứ khi nào nhà phát triển tạo tệp lớp mới, nó sẽ tự động có tuyên bố sử dụng với (các) vùng tên của bạn. Xem C ustomize Visual Studio 2005 Templates for Coding Productivity.

5

Đây không phải là vấn đề về không gian tên, đó là sự cố liên lạc.

Nếu các phương pháp này hữu ích, bạn cần truyền đạt thông tin này cho nhà phát triển và ngược lại, hành động dựa trên phản hồi từ họ (với mức độ phán đoán phù hợp).

Đặt bất kỳ thứ gì vào không gian tên Hệ thống là một công thức cho thảm họa và sự nhầm lẫn sau này. Lần duy nhất bạn muốn làm điều này là chức năng 'cổng sau' vào các khung công tác cũ hơn và sau đó bạn có thể không nên tự làm điều đó nhưng nên sử dụng một cái gì đó giống như LinqBridge để làm điều đó.

Hãy cảnh giác với mong muốn ném tất cả các tiện ích mở rộng vào một không gian tên trừ khi chúng thực sự hữu ích rộng rãi với nhau. Một số nhà phát triển có thể tìm thấy gỗ bị mất cho cây nếu họ bị bắn phá với tất cả mọi thứ và bồn rửa nhà bếp thông qua intellisense.

Giữ không gian tên tên công ty là hợp lý nói chung để tránh nhầm lẫn.

+0

"Hãy cảnh giác với mong muốn ném tất cả các phần mở rộng vào một không gian tên trừ khi chúng thực sự hữu dụng rộng rãi với nhau." Chúng tôi có một số lượng hạn chế các phương pháp khuyến nông và cũng cố gắng giữ chúng nhỏ. Vì vậy, điều này không nên đặt ra một vấn đề. – Juri

1

Có, tôi nghĩ đặt Phương thức mở rộng trong tên công ty riêng là cách thực hành tốt nhất. đặt nó vào không gian tên System là một hoạt động lười biếng

0

Chúng tôi đặt mọi thứ vào cùng một không gian tên và lớp, tuy nhiên chúng tôi sử dụng các lớp học một phần để giữ cho chúng được tổ chức.

Ví dụ:

ExtensionMethods-String.cs

ExtensionMethods-DataObject.cs

ExtensionMethods-Debug.cs

... vv tất cả đều có các lớp học phần ...

+2

Ưu điểm của việc sử dụng các lớp học một phần cho các phương pháp mở rộng là gì? Tôi đã thấy nhiều người thả các phương thức mở rộng vào một không gian tên .Extensions và đặt tên các lớp và các tệp sau lớp mà chúng mở rộng: StringExtension.cs và lớp tĩnh công khai StringExtensions {}. – CodeMonkeyKing

+0

@CodeMonkeyKing - Một số phương pháp mở rộng bị lãng quên. Khi chúng tôi làm việc với một ứng dụng cụ thể, chúng tôi thêm Tiện ích mở rộng dựa trên chức năng logic, thường không phù hợp với bố cục của các lớp .NET. Mặc dù tôi cũng thích cách tiếp cận của bạn – LamonteCristo

0

Bạn có thể đạt được điều y bạn muốn bằng cách đặt các phương thức mở rộng trong không gian tên chung. Đó là những gì tôi làm và sau đó họ có sẵn mà không cần bất kỳ tuyên bố using.

Các vấn đề liên quan