Tôi có một ứng dụng rất tập trung vào dữ liệu, được viết bằng Python/PyQt. Tôi đang lập kế hoạch để thực hiện một số phép tái cấu trúc để thực sự tách giao diện người dùng khỏi lõi, chủ yếu là vì chưa có bất kỳ thử nghiệm thực nào tại chỗ và rõ ràng là phải thay đổi.Tiếp cận cấu trúc lại
Đã có một số sự tách biệt rồi, và tôi nghĩ tôi đã làm được một vài điều đúng đắn, nhưng nó hoàn hảo. Hai ví dụ, để hiển thị cho bạn những gì loại điều đang làm phiền tôi:
Khi người dùng phải nhấp chuột vào các đại diện của một đối tượng dữ liệu, menu ngữ cảnh bật lên được tạo ra bởi các đối tượng dữ liệu, mặc dù đối tượng dữ liệu này (về bản chất là biểu diễn ORM của một hàng cơ sở dữ liệu) rõ ràng không có gì để làm với giao diện người dùng.
Khi nội dung nào đó được ghi vào cơ sở dữ liệu, nhưng ghi không thành công (ví dụ: vì bản ghi cơ sở dữ liệu là bị khóa bởi người dùng khác), hộp thư cổ điển "thử lại/hủy bỏ" được hiển thị cho người dùng. Hộp thoại này được tạo bởi nhà cung cấp dữ liệu *, mặc dù nhà cung cấp rõ ràng không có bất kỳ chức năng giao diện người dùng nào. Rõ ràng, nhà cung cấp có thể tăng ngoại lệ hoặc nói cách khác là không thành công và giao diện người dùng có thể bắt được và hành động tương ứng.
* đó là từ tôi sử dụng cho đối tượng cơ bản đại diện cho bảng cơ sở dữ liệu và trung gian giữa các đối tượng dữ liệu và công cụ cơ sở dữ liệu; Tôi không chắc chắn cho dù đó là những gì thường được gọi là một "nhà cung cấp"
Tôi không có kinh nghiệm với thử nghiệm, vì vậy tôi không dễ dàng "cảm thấy" vấn đề testability hoặc tương tự, nhưng trước Tôi nhận được vào đó, một số tổ chức lại phải được thực hiện.
Không có logic nghiệp vụ phức tạp nào (chủ yếu chỉ là CRU
D
, vâng, ngay cả khi không có D), và điều này sẽ được tổ chức lại nhiều hơn viết lại, vì vậy tôi không thực sự quan tâm đến việc giới thiệu các lỗi hồi quy như đã thảo luận trong this question.
Kế hoạch của tôi là bắt đầu tái cấu trúc với ý tưởng rằng phần giao diện người dùng có thể dễ dàng bị tách ra là được thay thế bằng giao diện web hoặc giao diện dựa trên văn bản thay vì giao diện Qt. Mặt khác, Bản thân Qt sẽ vẫn được lõi sử dụng, bởi vì cơ chế tín hiệu/khe được sử dụng ở một vài nơi, ví dụ: đối tượng dữ liệu phát ra tín hiệu changed
để cho biết, tốt, bạn biết điều gì.
Vì vậy, câu hỏi của tôi: Đó có phải là cách tiếp cận khả thi để tăng khả năng kiểm tra và bảo trì không? Bất kỳ nhận xét khác, đặc biệt là với Python trong tâm trí?
Bây giờ đó là một ý tưởng thú vị, thích nó! Bạn không xảy ra để có bất kỳ nguồn hoặc tipps liên quan đến điều phối viên? I E. khả năng triển khai khác nhau, có thể cảnh báo, trải nghiệm, v.v.? – balpha
Dispatcher sẽ chuyển tất cả các cuộc gọi API tới tất cả các hệ thống con như trình quản lý bộ nhớ cache, trình duyệt tính hợp lệ, trình ánh xạ URL ... Vì vậy, người điều phối chuyển cuộc gọi API, ngữ cảnh, đối số cho từng hệ thống phụ (tùy thuộc vào các quy tắc nhất định) và cuối cùng gọi API cần thiết. Ban đầu chúng tôi đã cố gắng để có chung thiết kế điều phối để cho phép đăng ký các hệ thống con nhưng sau đó được giải quyết cho người điều phối có kiến thức về cách xử lý các hệ thống con. Thật không may, khung công tác cho các ứng dụng trung tâm API là một nguồn đóng nhưng hiệu ứng lại giống như một chồng trang trí cho mọi API nhưng theo một cách ngầm định. – Shekhar
Ngoài ra xác định và đi qua bối cảnh đã được đóng vai trò rất quan trọng. – Shekhar