Có nhiều báo cáo sử dụng / nhập khẩu cho thấy thiết kế xấu hoặc mùi mã?


13

Thông thường, tôi thấy một vài câu lệnh sử dụng ở đầu tập tin lớp. Thí dụ:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

Nhưng trong một dự án tôi đang thực hiện, nhiều lần tôi thấy 20 lần sử dụng / nhập trở lên trong một tệp lớp. Đây có phải là thiết kế xấu? Dường như các lớp được thiết kế để làm một việc chỉ nên dựa vào một vài thành phần.


1
Visual Studio có một tùy chọn để loại bỏ các usingbáo cáo không sử dụng . Bạn có thể muốn xem có bao nhiêu trong số 20 người đó đang sử dụng thực tế.
Dan Pichelman

@Dan - Tất cả đều được sử dụng vì tôi đã sử dụng ReSharper để loại bỏ những cái không sử dụng.
Jon Raynor

Bạn đã thử thêm IoC, chuyển đổi sang hàm xây dựng và / hoặc chuyển đổi một số điểm tích hợp thành lambdas nội tuyến để xem liệu nó có làm giảm số lượng usingcâu lệnh mà không phải tăng số lượng lớp không? Hãy nhớ rằng việc tăng số lượng lớp hoặc tệp nguồn sẽ tăng chi phí quản lý mã nguồn.
rwong

2
IoC chỉ che giấu vấn đề.
Telastyn

1
Một số trong những điều đó gần như chỉ là một phần của ngôn ngữ và phong cách lập trình mà nó khuyến khích, như Bộ sưu tập.Generic và LINQ, vì vậy tôi không nhất thiết phải lo lắng về những điều đó. Có lẽ tôi sẽ tập trung sự chú ý của mình vào những người khác. Hầu hết các lớp có lẽ không cần phải thực hiện IO trực tiếp, vì vậy, có lẽ nếu điều đó được tìm thấy ở mọi nơi có một số trách nhiệm hoặc phân lớp kém, nhưng nó phụ thuộc vào ứng dụng.
Erik Eidt

Câu trả lời:


21

Nó có thể chỉ ra một thiết kế xấu, vâng. Có thể là lớp bạn đang xem đang làm quá nhiều thứ, nhưng điều đó cũng có nghĩa là các không gian tên bạn đang nhập thực sự được ghép nối nhiều hơn so với phân tách không gian tên ngụ ý. Đó có thể là do kỹ sư quá mức hoặc quá trừu tượng, nhưng nó cũng có thể chỉ là một thiết kế không phù hợp với việc sử dụng.

Điều đó nói rằng, đó là một mùi - đôi khi nó dẫn bạn đến một cái gì đó xấu, và đôi khi nó chỉ là một báo động sai.


Tôi nghĩ rằng "mùi mã" thực sự sẽ là nếu các không gian tên được nhập là tất cả, hoặc chủ yếu, khác nhau về mục đích. Thành thật mà nói, tôi hiếm khi có nhiều hơn 6 đến 8 usinggiây trong một tệp C #.
Greg Burghardt

2
Tôi muốn cho bạn +1 thứ hai nếu tôi có thể, chỉ để sử dụng thuật ngữ "mùi mã" một cách chính xác!
Jörg W Mittag

! @Greg - Tôi đồng ý, thường thì "cách sử dụng" có liên quan. Tôi nghĩ trong trường hợp này đó là một trường hợp quá trừu tượng bởi vì khoảng 15-20 "cách sử dụng" đến từ các không gian tên ứng dụng và phần còn lại từ khung .net.
Jon Raynor

2

Một lớp không được lớn hơn và không nhỏ hơn những gì cần thiết để cung cấp một hàm dự định.

Trong một ứng dụng, tôi có một lớp mã hóa có một công việc: mã hóa dữ liệu. Giữa chức năng cốt lõi, ghi nhật ký và xử lý ngoại lệ, môi trường yêu cầu 11 lần nhập không gian tên riêng biệt để thực hiện một công việc này.

Thật khó cho tôi để nói với bản thân mình 'giảm thiểu nhập khẩu'. Hoặc để đánh giá thành công của lớp tôi chỉ bằng cách đếm số lượng không gian tên được nhập. Tôi không thể sử dụng điều này một cách chính đáng, như một dấu hiệu cho thấy thành công của một lớp. Đối với tôi, 'nhập khẩu' là phương tiện đến cuối lớp '. Nếu công việc của lớp được xác định rõ, mọi thứ khác trong hệ thống hỗ trợ, bao gồm cả nhập khẩu, sẽ tự xử lý.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.