2013-08-02 22 views
6

Nếu tôi đặt một đơn vị trong mệnh đề sử dụng của phần thực hiện của một đơn vị, các số nhận dạng được khai báo trong đơn vị đó sẽ không có sẵn cho phần giao diện.Đâu là các lợi thế của việc thêm mệnh đề sử dụng cho một đơn vị trong phần thực hiện?

Lợi thế của việc đó là gì và không thể sử dụng số nhận dạng từ đơn vị được giới thiệu trong giao diện?

Có lợi thế thực tế nào (chẳng hạn như tránh các tác dụng phụ không mong muốn) nếu bạn bận tâm thêm các đơn vị đã sử dụng vào phần triển khai thay vì chỉ đơn giản là làm phần giao diện?

Trả lời

5

Vấn đề lớn nhất là sử dụng trong phần giao diện có thể dẫn đến phụ thuộc vòng tròn và lỗi biên dịch. Nếu đơn vị A sử dụng đơn vị B trong phần giao diện, thì đơn vị B không thể sử dụng đơn vị A trong phần giao diện của nó.

Vì vậy, bạn thường buộc phải đưa ít nhất một số công dụng vào phần triển khai.

Nếu không, cá nhân tôi thích đặt đơn vị sử dụng vào phần giao diện nếu có thể. Lý do chính là một trong những phạm vi và ẩn nấp. Nếu có các xung đột phạm vi tên (hai đơn vị xác định cùng một tên và lần thứ hai sử dụng ẩn dấu đầu tiên) thì thay vào đó, tên đó nằm trong phạm vi trong toàn bộ đơn vị.

+2

Tôi sử dụng cách tiếp cận ngược lại trong các mã mã rất lớn, mặc dù tôi nghi ngờ nó quan trọng trong các mã nhỏ; Giảm thiểu kích thước của mệnh đề Sử dụng giao diện. Giữ không gian tên bị ô nhiễm ít hơn. –

+2

Các nhà phát triển cũng có xu hướng đặt càng nhiều đơn vị càng tốt trong vùng 'implementation' không cần thiết cho' giao diện', chẳng hạn như 'StrUtils' và' Math', mặc dù điều đó không nhất thiết có hiệu lực. –

+0

@Warren Sử dụng đơn vị không thêm ký hiệu vào không gian tên –

13

Thêm đơn vị vào mệnh đề uses của phần implementation cho phép đơn vị đó là phụ thuộc riêng tư chỉ cho số implementation, không phải cho số interface. Nếu UnitA sử dụng UnitB, nhưng không ai ngoài UnitA quan tâm liệu UnitA có sử dụng UnitB hay không, bởi vì giao diện của UnitA không sử dụng UnitB, thì tại sao lại quảng cáo sự phụ thuộc và lộn xộn interface? Ngoài ra, nếu bạn cần loại bỏ UnitB và/hoặc thay thế nó bằng một cái gì đó khác, hãy khai báo nó trong mệnh đề uses của phần implementation tránh sự thay đổi interface sẽ ảnh hưởng đến bất kỳ đơn vị nào đang sử dụng UnitA.

+2

+1 Lời khuyên tốt để tránh bất kỳ "cám dỗ" nào về tham chiếu vòng tròn trừ khi cần thiết. Sự phân biệt rõ ràng/bắt buộc/cú pháp theo định hướng giữa giao diện và triển khai thực hiện là điều tôi thích rất nhiều trong Delphi và thiếu trong Java hoặc C#. –

+0

@Arnaud Đưa sử dụng vào phần triển khai giúp dễ dàng giới thiệu các tham chiếu vòng tròn. Có một sự phân biệt rõ ràng giữa giao diện và triển khai trong C# và Java. –

+0

@DavidHeffernan Tôi đã không nói về sự khác biệt giữa 'giao diện' và' lớp '. "Có một sự phân biệt rõ ràng giữa giao diện và triển khai trong C# và Java" ... nhờ khả năng gấp IDE? Hoặc cho các thuộc tính công khai/riêng tư/được bảo vệ? IMHO nó không rõ ràng như các phần 'interface ... implementation' trong pascal. –

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