2009-01-08 32 views
20

Sự khác nhau giữa khung công tác và SDK là gì? Lấy ví dụ, SDK nền tảng MS và khung công tác .NET. Cả hai đều có API, cả hai đều ẩn hoạt động bên trong của chúng và cả hai cung cấp chức năng có thể không được truy cập nhanh chóng/dễ dàng nếu không (nói cách khác, chúng phục vụ mục đích trong thế giới thực).Frameworks so với SDK

Vậy sự khác biệt là gì? Nó chủ yếu là trò chơi tiếp thị ngữ nghĩa hay có sự khác biệt thực sự về cách các nhà phát triển dự kiến ​​sẽ tương tác với phần mềm (và ngược lại, cách các nhà phát triển có thể mong đợi phần mềm ứng xử)? Người ta có dự kiến ​​sẽ cao hơn hoặc thấp hơn cấp độ khác, v.v.

Cảm ơn!

CHỈNH SỬA: Câu hỏi này áp dụng cho SDK và khung nói chung, không chỉ là hai đề cập ở trên.

Trả lời

12

SDK được mong đợi cung cấp các công cụ để lập trình chống lại một tài nguyên hoặc tính năng hệ thống nhất định. Một Framework không nhất thiết (mặc dù .NET cung cấp một bộ công cụ toàn diện như các trình biên dịch, vv - nhưng đây là bắt buộc để nó hoạt động được).

Vì vậy, bạn có thể phát triển một khung chỉ bao gồm các thư viện, nhưng nếu bạn gọi nó là SDK, bạn sẽ được yêu cầu cung cấp một cái gì đó để hỗ trợ phát triển.

+1

Đó là giải thích tuyệt vời. Chỉ cần thêm một chút cho người xem nếu tôi muốn làm cho bất cứ ai hiểu với sự giúp đỡ của một ví dụ sau đó: .Net Framework = Đặt thư viện lớp khung (FCL) tạo thành CLR .Net SDK = .Net Framework + Trình biên dịch C# & VB + Công cụ tạo MS để đóng gói mã được viết bởi nhà phát triển + Debugger + IIS máy chủ web nhanh trong VS + Nhiều thứ khác giúp bạn viết chương trình chống lại .Net thư viện lớp khung (FCL) để phát triển ứng dụng .Net. – RBT

+2

Một ví dụ khác: Qt framework (các thư viện) và Qt SDK (Qt framework + qmake + Qt Creator + Qt Linguist + ...) – rbaleksandar

1

Microsoft SDK có thể được nhà phát triển sử dụng để tạo chương trình của họ. Người dùng cuối cùng thường không cần nó.

Microsoft Framework thay thế là bắt buộc nếu bạn muốn chạy ứng dụng .NET trên máy.

1

Đó là một khu vực màu xám nhưng Khung có xu hướng là các thư viện bạn mã hóa, SDK thường có các công cụ bổ sung để giúp bạn khai thác tối đa Khung công tác. Một ví dụ điển hình là .NET Framework SDK mà bạn cài đặt riêng, SDK có thêm các công cụ như ildasm, cordb không thực sự là một phần của framework.

5

Tóm lại sự khác biệt là:

  • Bạn gọi các chức năng SDK.
  • Khuôn khổ gọi các chức năng của bạn.

SDK giống như một hộp công cụ có nhiều công cụ và bạn chọn công cụ nào bạn sử dụng và cách thức. Bạn có quyền kiểm soát nhưng cũng có rất nhiều quyết định để thực hiện. Đó là mức độ khá thấp.

Một khuôn khổ đưa ra nhiều quyết định cho bạn, vì vậy bạn không phải phát minh lại bánh xe; Đó là cách tiếp cận "điền vào chỗ trống". Ít tự do hơn nhưng bạn tiết kiệm rất nhiều thời gian và có thể tránh được một số sai lầm.

Trong trường hợp cụ thể của khuôn khổ NET nó cũng đề cập đến các tập tin thực thi cần thiết để chạy các ứng dụng sử dụng nó nhưng nó không phải là cách các từ được sử dụng trong một bối cảnh lập trình ...

+0

Tôi không chắc tại sao điều này lại bị downvoted ... Trong số các câu trả lời cho đến nay, đó là gần nhất với sự hiểu biết của tôi về ý nghĩa của các điều khoản. –

+1

Bởi vì các điểm bullet không chính xác. Các hàm bạn gọi là API chứ không phải SDK. SDK là một điều "được xác định bởi màu xám". Nó chỉ là một khuôn khổ với các công cụ bổ sung để giúp bạn. – lespommes

0

Tôi là người dẫn đầu trên Zend Framework thông qua bản phát hành 1.0. Chúng tôi thường có nhận xét rằng đó không phải là một "khung" theo ý nghĩa mà các nhà phát triển mong đợi - họ nói đó là thư viện lớp học nhiều hơn.

Họ mong đợi một khuôn khổ giống như một tập hợp các lớp học mà phải được sử dụng cùng nhau để chúng hoạt động. Một khung công tác cũng có thể bao gồm một tập hợp các quy ước mã hóa, hướng dẫn bạn sắp xếp mã theo một cách nhất định.Ngoài ra một khung công tác có thể áp đặt các quy ước đặt tên cho các lớp và các thực thể cơ sở dữ liệu của bạn. Và cuối cùng, các công cụ tạo mã.

Zend Framework được thiết kế để được ghép nối lỏng lẻo, vì vậy bạn có thể sử dụng bất kỳ lớp nào độc lập nếu bạn muốn. Nó áp dụng một số quy ước trên mã của bạn hoặc cơ sở dữ liệu của bạn. Và chúng tôi đã có ý định phát triển các trình tạo mã nhưng chưa triển khai chúng.

Nhưng tôi vẫn cảm thấy rằng khung công tác Zend đủ tiêu chuẩn làm khung, thay vì SDK, theo một cách khác: khung là có thể mở rộng. Nó được thiết kế như một tập hợp các lớp cơ sở hướng đối tượng và mục đích sử dụng là các nhà phát triển hoặc là extend các lớp này hoặc viết các lớp trình cắm thêm đơn giản, để thêm chức năng.

SDK truyền thống là không thể mở rộng. Bạn chỉ cần gọi các phương thức API trong các lớp được cung cấp, chúng làm những gì chúng làm và bạn xử lý kết quả. Bất kỳ tùy chỉnh nào là việc bạn sử dụng API và cách bạn sử dụng kết quả.

0

Thư viện lớp học cung cấp các lớp thường chia sẻ cùng một vùng ứng dụng thô (toán học, kết xuất) nhưng được dự định sẽ được sử dụng chủ yếu độc lập với nhau.

Một khuôn khổ cung cấp các lớp học cùng nhau tạo thành cơ sở cho một ứng dụng mà bạn chỉ mở rộng và xác thịt.

SDK chứa mọi thứ bạn cần để sử dụng công nghệ mà SDK được cung cấp. Nó thường chứa các bản ghi, mẫu và các công cụ cùng với nội dung cốt lõi thực tế có thể là một khung công tác hoặc một thư viện lớp hoặc thậm chí một cái gì đó hoàn toàn khác.

26

tôi sẽ chỉ sao chép từ Wikipedia:

Thư viện:

Một thư viện là một tập hợp các chương trình con hoặc các lớp học sử dụng để phát triển phần mềm. Thư viện chứa mã và dữ liệu cung cấp dịch vụ cho các chương trình độc lập. Điều này cho phép mã và dữ liệu được chia sẻ và thay đổi theo kiểu mô-đun.

Khung:

Một khung phần mềm, lập trình máy tính, là một khái niệm trừu tượng, trong đó mã phổ biến cung cấp chức năng chung có thể được ghi đè một cách chọn lọc hoặc chuyên bởi người dùng mã cung cấp chức năng cụ thể. Khung tương tự như các thư viện phần mềm ở chỗ chúng có thể tóm tắt lại mã được bao bọc trong một API được xác định rõ. Tuy nhiên, không giống như các thư viện, luồng điều khiển của chương trình tổng thể không được người gọi quyết định, mà theo khuôn khổ. Sự đảo ngược kiểm soát này là tính năng phân biệt của các khung công tác phần mềm.

SDK:

Một bộ dụng cụ phát triển phần mềm (SDK hoặc "devkit") thường là một bộ công cụ phát triển cho phép một kỹ sư phần mềm để tạo ra các ứng dụng cho một gói phần mềm nào đó, khuôn khổ phần mềm, phần cứng nền tảng, hệ thống máy tính, bảng điều khiển trò chơi điện tử, hệ điều hành hoặc nền tảng tương tự. Nó có thể đơn giản như một giao diện lập trình ứng dụng dưới dạng một số tệp để giao tiếp với một ngôn ngữ lập trình cụ thể hoặc bao gồm phần cứng phức tạp để giao tiếp với một hệ thống nhúng nhất định. Các công cụ phổ biến bao gồm hỗ trợ gỡ lỗi và các tiện ích khác thường được trình bày trong một IDE.SDK cũng thường xuyên bao gồm mã mẫu và ghi chú kỹ thuật hỗ trợ hoặc tài liệu hỗ trợ khác để giúp làm rõ các điểm từ tài liệu tham khảo chính.

Vì vậy:

  • Thư viện là mã mà các cuộc gọi ứng dụng của bạn.
  • Framework là một ứng dụng hoặc thư viện gần như đã sẵn sàng thực hiện. Bạn chỉ cần điền vào một số điểm trống với mã của riêng bạn mà khung gọi.
  • SDK là một khái niệm lớn hơn vì nó có thể bao gồm thư viện, khuôn khổ, tài liệu, công cụ, v.v.
  • .NET thực sự giống một nền tảng chứ không phải khung phần mềm.
+1

Và sự khác biệt với 'động cơ' là gì – Delta

+1

@Delta một công cụ là thứ gì đó của một khung công tác cũng cung cấp môi trường thời gian chạy mà các chương trình của bạn tương tác. Tôi nghĩ rằng ý tưởng chính là động cơ đang "chạy" với mã của bạn kiểm soát hoặc "lái xe" hành động. –

0

Trong một so sánh, các bạn có thể nói:
Thư viện -> Khung -> SDK
khung bao gồm một số thư viện, cộng với một số công cụ (trình biên dịch, vv), và không nhắm mục tiêu một nền tảng cụ thể. Đối với một nền tảng, có thể có một số khung công tác được phát triển cho từng mục đích khác nhau. SDK cung cấp cho bạn các khung công tác và mọi thứ khác mà bạn cần để phát triển phần mềm cho một nền tảng cụ thể.

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