2009-06-04 51 views
12

Tôi khinh thường làm việc với các API quá tải mà không làm cho những điều đơn giản trở nên đơn giản. Tuy nhiên, tôi đang làm việc để thiết kế một API cho một thư viện mã nguồn mở và tôi bắt đầu cảm thấy rằng tôi đang rơi vào cái bẫy quá tải. Tôi thực sự không thể chắc chắn bởi vì, tất nhiên, tôi đã viết những điều darn, vì vậy làm thế nào nó hoạt động là rõ ràng hơn với tôi hơn bất cứ ai khác. Một số dấu hiệu cảnh báo từ quan điểm của nhà phát triển là API của bạn có thể bị quá tải là gì?Khi nào một API bị quá tải?

+0

Có vẻ như có liên quan: http://stackoverflow.com/questions/469161/how-do-you-define-a-good-or-bad-api http://stackoverflow.com/questions/750112/overengineering -how-to-avoid-it –

Trả lời

19

"Một số dấu hiệu cảnh báo từ quan điểm của nhà phát triển là API của bạn có thể bị quá tải?"

Không có trường hợp sử dụng nào.

Nếu bạn không thể chạy qua các tình huống đơn giản "để làm điều này", bạn không thiết kế một API hữu ích với các trường hợp sử dụng cụ thể trong đầu.

Tài liệu của bạn phải là các trường hợp sử dụng đó.

Các tính năng không trực tiếp giải quyết các trường hợp sử dụng có thể là kỹ thuật quá mức.

+2

+1 - giống như nhận xét của tôi nhưng nhanh hơn. – dkretz

1

Hai câu hỏi (có liên quan) để tự hỏi mình tôi suy nghĩ ngay lập tức:

  • Có những thứ có thể được thực hiện trong nhiều hơn một cách?
  • Có phương pháp/thuộc tính nào trên API có thể được thể hiện bằng phần còn lại của API không?

Khó khăn hơn để trả lời, và không phải là một dấu hiệu của sự overengineering trong chính nó, nhưng chắc chắn là một dấu hiệu API là không đơn giản như nó có thể được nêu ra:

  • Có phương pháp khác/tài sản bạn có thể giới thiệu điều đó sẽ giúp bạn có thể xóa nhiều hơn mức bạn đã giới thiệu (dựa trên hai câu hỏi còn lại)
+0

Nhưng điều đó sẽ ngăn cản các giao diện nhân đạo (như được mô tả bởi Fowler). Nhân đạo! = Overengineered. –

2

Khi xem xét tài liệu và ví dụ, tỷ lệ phần mềm phân tích cú pháp thảo luận về API liên quan đến chính nó với tỷ lệ phần trăm của sự phân biệt về ứng dụng của nó đối với các trường hợp sử dụng đáng tin cậy.

2

Như S.Lott đã nói, các trường hợp sử dụng. Họ sẽ xác định chính xác API của bạn nên được hướng tới làm gì. Nếu bạn thiết kế API để hoàn thành một mục tiêu rõ ràng, cụ thể - functionally coherent - bạn có nhiều khả năng sẽ kết thúc với API hoặc thành phần trong API dễ sử dụng và dễ hiểu.

Thiết kế API nên giống như thiết kế giao diện người dùng. Hầu hết tất cả các khái niệm về giao diện người dùng đều có thể được API chấp nhận, ví dụ như nguyên tắc KISS hoặc thậm chí là Kaizen.

Tôi muốn liên kết đến các khái niệm giao diện người dùng đó, nhưng tôi là người dùng mới để họ không cho phép tôi đăng hơn 1 liên kết. Ví dụ tốt có: StackOverflow, cho chúng tôi biết trước khi chúng tôi đăng bài;).

11

Bạn nên xem Google Tech Talk How To Design A Good API and Why it Matters bởi Joshua Bloch ... anh ấy nói về rất nhiều thứ này.

+3

+1, cũng sẽ liên kết đến nó - các trang trình bày cũng có sẵn: http://lcsd05.cs.tamu.edu/slides/keynote.pdf – none

+3

Tại đây, bạn có thể xem video và các trang trình bày cùng nhau, được nhúng trong cùng một chế độ xem trình duyệt: http://www.infoq.com/presentations/effective-api-design – none

+0

Nói thẳng ra, phần lớn các API Bloch đã tạo là imho được thiết kế quá mức. Tuy nhiên, có những điểm takeaway tốt trong video đó – Pacerier

1

Khi thông minh đến nỗi không ai khác có thể hiểu được.

+1

Trừ khi tôi viết nó;) –

4

khi theo dõi ngăn xếp cho cuộc gọi api phổ biến yêu cầu bạn cuộn màn hình để xem toàn bộ nội dung.

1

Bắt đầu lo lắng khi bạn có API lớn với nhiều chức năng, khi kiểm tra kỹ hơn, hóa ra là các tác phẩm đơn giản hơn. Một API có tỷ lệ cơ chế thành phần cao đối với nguyên thủy thường là một thiết kế tốt.

(API thiết kế rất giống với thiết kế ngôn ngữ, và ở đây tôi về cơ bản tán thành triết lý Đề án — thay vì chất đống nhiều thói quen vào API, đơn giản hóa nó và bao gồm các cơ chế thành phần mà làm cho thói quen thêm không cần thiết.)

5

Một mẹo tôi thấy rất hữu ích và nó đã giúp tôi trong quá khứ là viết doc trước, trong và sau khi bạn viết mã.

Khi thiết kế một API để người khác sử dụng, tôi thường ghi lại thiết kế trước khi viết mã. Nếu tôi đã qua kỹ thuật thiết kế, thông số kỹ thuật thiết kế thường đầy xung đột và vô nghĩa.

Trong quá trình mã hóa, tôi thường loại bỏ định nghĩa lớp và hàm chức năng và bắt đầu viết nhận xét doxygen cho chúng. Trong các ý kiến ​​tôi sẽ có trường hợp sử dụng, mã mẫu và các giả định của các giao diện. Trong giai đoạn này, trước khi quá nhiều mã thực được viết, giao diện lớp thường trải qua quá trình thiết kế lại nhiều lần. Tôi biết tôi đã qua kỹ thuật khi mã mẫu khó viết và tôi có một thời gian khó giải thích giao diện. Rất nhiều ý tưởng thiết kế xấu được tiếp xúc và loại bỏ khi bạn cố gắng giải thích cho mọi người cách sử dụng API của bạn.

Sau khi mã hóa, tôi thay thế mã mẫu trong các nhận xét bằng mã được biên dịch và kiểm tra thực được sao chép từ các bài kiểm tra đơn vị của tôi và ghi lại thêm hành vi của giao diện. Một dấu hiệu khác của kỹ thuật là khi các bài kiểm tra đơn vị của tôi không thể theo kịp với sự thay đổi giao diện bởi vì có quá nhiều phần chuyển động và quá nhiều cách để làm điều tương tự và kiểm tra đơn vị tăng trưởng theo tỷ lệ mũ.

+0

Những điểm tốt, nhưng khó đọc. Một vài đoạn ngắt đoạn có thể hữu ích. –

+0

Được cải cách bằng đoạn ngắt đoạn. Cảm ơn. –

0

Khi sử dụng API là: (1) tù hơn, phức tạp hơn, kém hiệu quả, và khó dự đoán hơn so với chỉ sử dụng các công nghệ cơ bản, VÀ (2) không cung cấp một lợi thế đáng kể cho sự an toàn, khả năng mở rộng, hoặc tự do đa nền tảng.

0

Theo kinh nghiệm của tôi, bạn có thể biết khi nào toàn bộ dự án được tổ chức trong nhiều tháng, chờ API hoàn tất.

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