Có được coi là thực hành xấu để ném NotImplementedException
mã mà bạn chưa viết? Có thể bình luận TODO sẽ được coi là an toàn hơn?
Có được coi là thực hành xấu để ném NotImplementedException
mã mà bạn chưa viết? Có thể bình luận TODO sẽ được coi là an toàn hơn?
Câu trả lời:
Tôi tin rằng NotImplementedException
thực sự là một thực hành tốt.
Thật vậy, nếu bạn quên thực hiện một phương thức và bạn sử dụng nó sau này trong dự án của bạn (và tin tôi đi, nó sẽ xảy ra), bạn có thể mất một thời gian dài để tìm kiếm những gì đã đi sai từng bước. Nếu bạn có ngoại lệ, chương trình sẽ dừng trực tiếp, nhắc ngoại lệ (nếu bạn bắt ngoại lệ, bạn sẽ tìm thấy nó nhanh chóng bằng cách xem ngoại lệ nào bạn bắt được).
Tôi khuyên bạn nên sử dụng NotImplementedException
kết hợp với các nhận xét TODO, theo cách bạn kết hợp trợ giúp GUI (với các tác vụ trong VS) và an toàn chương trình.
Đối với phiên bản phát hành, theo tôi, nó thậm chí còn quan trọng hơn, vì trong hầu hết các trường hợp, bạn thích chương trình của mình bị sập hơn là chương trình rõ ràng hoạt động bình thường nhưng tạo ra kết quả sai.
NotImplementedException
s giống như nhận xét của TODO. Tôi nghĩ đó là một tính năng tốt.
Nó phụ thuộc vào triết lý chung của bạn xung quanh lỗi và xử lý lỗi. Tôi là kiểu người "lỗi cứng": Tôi sẽ đưa ra một ngoại lệ với gợi ý nhỏ nhất rằng có thể có gì đó không ổn; Tôi sẽ khẳng định mọi thứ; Nếu có một lỗi, nếu một cái gì đó được dự kiến sẽ ở đó, và nó không, hoặc nếu có một cái gì đó ở đó, và nó không nên, toàn bộ vũ trụ phải dừng lại. Tiếng kêu của cửa sổ phải vang lên qua loa.
Có những người khác không muốn bị làm phiền với lỗi. Vậy điều gì sẽ xảy ra nếu chúng tôi gửi nó cho khách hàng và toàn bộ mô-đun báo cáo bị thiếu vì chúng tôi quên mã hóa nó và không ai trong thử nghiệm nhận ra điều đó, vì ứng dụng quá im lặng về nó? Không nên làm gì hơn là ném một ngoại lệ vào mặt khách hàng!
Tôi muốn nói rằng đó là một ý tưởng tốt. Thông thường tôi thấy những ngoại lệ được ném bởi mã bộ xương được tạo tự động từ một biểu mẫu hoặc sơ đồ hoặc một cái gì đó. Ngoại lệ nhắc nhở tôi thực hiện mã và nó đảm bảo rằng sẽ có lỗi nếu tôi cố gắng sử dụng chức năng đã được thiết lập nhưng không bao giờ được thực hiện đầy đủ. Đôi khi tôi sẽ loại bỏ nó hoặc thay thế nó bằng một cái gì đó ít có khả năng tạm dừng thực thi (chẳng hạn như in cảnh báo lên bàn điều khiển), nhưng tôi thấy rằng nó hoạt động với tôi.
Nếu bạn đang xây dựng một thư viện mà những người khác sẽ sử dụng có ngoại lệ này tốt hơn so với giải pháp thay thế, đó sẽ là người dùng thư viện của bạn gọi một hàm và tự hỏi tại sao dường như không có gì xảy ra. Tất nhiên, vẫn còn khá tệ khi có ngoại lệ này trong một thư viện được vận chuyển nhưng tốt hơn là thất bại thầm lặng, IMO.
Tôi nghĩ rằng đó là thực hành tốt. Sự thay thế là tuyên truyền một giá trị hoặc trạng thái không hợp lệ, điều này sẽ ảnh hưởng đến cả mã thử nghiệm và mã sản xuất.
Tôi luôn luôn sử dụng NotImplementedException
- đó là những gì nó làm, sau tất cả.
Điều này có liên quan đến khái niệm "thất bại nhanh": nếu mã của bạn bị ném ngoại lệ, điều đó sẽ bị bắt trước khi đi vào sản xuất. Nếu nó được đưa vào sản xuất, thì ít nhất khách hàng biết rằng lắp ráp không chính xác .
Nếu mã trả về một giá trị vô nghĩa hoặc, đối với void
các phương thức, không có hành động, thì người tiêu dùng mã của bạn có thể nghĩ rằng cuộc gọi đó có ý nghĩa khi không thực hiện. Sau đó, sau đó, khi họ nhận được một số mã chính xác, mã của họ có thể bị hỏng vì nó phụ thuộc vào hành vi không chính xác trước đây.
Đây là loại dự án gì? Làm việc hay ở nhà? Ở nhà, làm bất cứ điều gì bạn muốn - bất cứ điều gì tốt nhất nhắc nhở bạn rằng bạn cần hoàn thành bất cứ điều gì bạn đang làm.
Trong công việc, viết xong nó.
Tôi không thể thấy tình huống tôi sẽ kiểm tra mã có thể / sẽ phá vỡ các nhà phát triển khác, QA hoặc bản dựng.
Tôi làm cả tôi nhưng một \ todo trong quá trình tự động hóa doxygene của tôi và sau đó ném ngoại lệ. Theo cách đó, nếu mọi người không thể bị làm phiền với RTFM thì ít nhất họ sẽ có thể tìm ra lý do tại sao chương trình của họ bị sập, thay vì tự hỏi tại sao có một hàm khai báo không trả về giá trị logic.