17

Một số phương pháp hay nhất cần lưu ý khi phát triển một chương trình tập lệnh có thể được tích hợp với GUI, có thể là bởi ai đó khác, trong tương lai?Làm thế nào để thiết kế một chương trình dòng lệnh có thể tái sử dụng cho sự phát triển tương lai của GUI?

Có thể kịch bản:

  1. tôi phát triển một chương trình CLI python ưa thích mà cạo mỗi hình ảnh kỳ lân từ web
  2. tôi quyết định xuất bản nó trên github
  3. Một lập trình viên người hâm mộ kỳ lân quyết định lấy nguồn và tạo GUI trên chúng
  4. người đó từ bỏ vì mã của tôi không thể sử dụng lại được

Làm thế nào t o ngăn chặn các bước bốn cho phép các lập trình viên fan kỳ lân xây dựng/GUI của mình mà không có quá nhiều rắc rối?

+0

+1: câu hỏi tuyệt vời! Tôi thường tự hỏi điều này ... – RBarryYoung

Trả lời

12

Bạn làm điều đó bằng cách áp dụng một phần tốt của phân lớp (có thể triển khai mẫu MVP) và xử lý CLI của bạn dưới dạng giao diện người dùng theo đúng nghĩa của nó.

CẬP NHẬT

văn bản này từ bài viết wikipedia về mô hình Model-View-Presenter giải thích nó khá tốt.

Model-View-Presenter (MVP) là một giao diện người dùng mẫu thiết kế thiết kế để tạo điều kiện tự động kiểm tra đơn vị và cải thiện sự tách biệt các mối quan tâm trong logic trình bày.

  • Mô hình này là một giao diện xác định các dữ liệu sẽ được hiển thị hoặc khác hành động thuận trong giao diện người dùng .

  • Chế độ xem là giao diện hiển thị dữ liệu (mô hình) và tuyến đường lệnh người dùng (sự kiện) cho người trình bày hành động theo dữ liệu đó.

  • Người trình bày hành động theo mô hình và chế độ xem. Nó truy xuất dữ liệu từ các kho lưu trữ (mô hình), vẫn tồn tại và định dạng cho hiển thị trong chế độ xem.

Điểm chính là bạn cần phải làm việc để tách mối quan tâm trong đơn của bạn. CLI của bạn sẽ là một triển khai của chế độ xem , trong khi người hâm mộ kỳ lân sẽ triển khai một chế độ xem khác cho một khách hàng phong phú. Các fan hâm mộ kỳ lân, sẽ căn cứ quan điểm của mình trên cùng một diễn giả như CLI của bạn. Nếu những người trình bày không đủ cho khách hàng giàu có của mình, anh ta có thể dễ dàng thêm nhiều hơn, bởi vì mỗi người trình bày dựa trên dữ liệu từ mô hình. Mô hình, đến lượt nó, là nơi mà tất cả các logic cốt lõi của ứng dụng của bạn dựa vào. Thiết kế một mô hình tốt là toàn bộ chủ đề trong chính nó. Bạn có thể quan tâm đến việc đọc, ví dụ: khoảng Domain-Driven Design, mặc dù tôi không biết mức độ phù hợp của ứng dụng hiện tại của bạn. Nhưng đó là đọc thú vị anyway. Như bạn có thể thấy, bài viết wikipedia trên MVP cũng nói về khả năng thử nghiệm, điều này cũng rất quan trọng nếu bạn muốn cung cấp một khung công tác mạnh mẽ để người khác xây dựng. Để đạt được mức độ kiểm tra cao trong cơ sở mã của bạn, thường là một ý tưởng hay khi sử dụng một số loại khung công tác Dependency Injection.

Tôi hy vọng điều này mang lại cho bạn ý tưởng chung về các kỹ thuật bạn cần sử dụng, mặc dù tôi hiểu rằng có thể có một chút áp đảo. Đừng ngại hỏi bạn có còn nghi ngờ gì nữa không.

/Klaus

+1

@systempuntoout Tôi đã xây dựng một litte :-) –

6

Điều này nghe giống như câu hỏi về cách viết mã có thể sử dụng được.

Khi xem xét reusablility mã, nói chung, ta nên cố gắng:

  • chức năng riêng biệt thành các module
  • có một giao diện rõ ràng

Tách chức năng thành các module

Bạn nên cố gắng tách mã thành các phần có phản hồi đơn giản khả năng. Ví dụ, một chương trình đi ra internet để cạo hình ảnh của kỳ lân có thể được chia thành các phần mà a) cào web cho hình ảnh, b) xác định nếu hình ảnh là kỳ lân và c) lưu trữ hình ảnh lân vào một số vị trí.

Có một giao diện rõ ràng

Có một giao diện được thiết kế tốt, một API (giao diện lập trình ứng dụng), sẽ là rất quan trọng để cung cấp một cách để tái sử dụng hoặc mở rộng một ứng dụng.

Cung cấp các điểm nhập vào mỗi chức năng sẽ cho phép các lập trình viên khác thực sự viết giao diện người dùng mới cho chức năng được cung cấp.

+0

+1 Đó là một lời giải thích khá tốt, cảm ơn. Bạn không nghĩ rằng GUI sẽ yêu cầu một giao diện cụ thể hơn so với đối tác CLI? – systempuntoout

+1

Trong việc phát triển GUI trên đầu trang của một CLI (một mẫu thiết kế rất phổ biến - tách chức năng khỏi bản trình bày), người ta thường tìm thấy một vài tùy chọn hữu ích hoặc cần thiết cho GUI nhưng không sử dụng nhiều cho tương tác hoặc kịch bản . Vì vậy, những tùy chọn đó được thêm vào CLI. Nhưng hầu hết CLI được thiết kế và thực thi sẽ hoạt động tốt như một giao diện đồ họa. – mpez0

2

Bạn sẽ thực hiện thao tác nhập, thực hiện tác vụ và trình bày đầu ra. Nó có thể là một ý tưởng tốt để sử dụng một cơ chế gọi lại (chẳng hạn như các trình xử lý sự kiện, truyền một phương thức như một tham số, hoặc truyền/self này đến lớp được gọi) để tách các phương thức đầu vào và đầu ra khỏi việc thực thi hành động.

Ngoài điều này, chương trình ra một giao diện, không phải để triển khai - bản chất của MVC/MVP, như klausbyskov đã đề cập. ví dụ: Không trực tiếp gọi tệp write.write(); làm cho myModel.saveMyData() gọi tập tin.write, để người khác có thể tạo một somebodysModel.saveMyData() ghi vào cơ sở dữ liệu.

4

Giải pháp cho loại vấn đề này rất đơn giản, nhưng trên thực tế, rất nhiều lập trình viên cơ sở gặp khó khăn với mẫu này. Dưới đây là giải pháp:

  • Bạn thiết kế một con kỳ lân-cào API. Đây là bước khó khăn; thiết kế API tốt là cực kỳ khó, và không có nhiều ví dụ để nghiên cứu. Một API mà tôi nghĩ là đáng học tập là một trong cuốn sách của Dave Hanson C Interfaces and Implementations.

  • Sau đó, bạn thiết kế giao diện dòng lệnh của mình. Nếu chức năng bạn đang phơi bày không phức tạp, điều này không quá khó.Nhưng nếu nó phức tạp, bạn có thể muốn suy nghĩ nghiêm túc về việc quản lý API của mình bằng cách sử dụng ngôn ngữ kịch bản được nhúng như Lua hoặc Tcl và thiết kế giao diện cho tập lệnh thay vì cho dòng lệnh.

  • Cuối cùng, bạn viết mã xử lý dòng lệnh và dán mọi thứ lại với nhau.

Người kế thừa giả thiết của bạn xây dựng GUI của mình bằng một trong hai cách: sử dụng ngôn ngữ kịch bản được nhúng hoặc trực tiếp trên API của bạn.

Như đã lưu ý trong các câu trả lời khác, mô hình/chế độ xem/bộ điều khiển có thể là một mẫu tốt để sử dụng trong việc thiết kế API của bạn.

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