Tôi đã từng bắt đầu một dự án MVVM / WPF, cuối cùng đã được xây dựng và triển khai, và tôi đã nghiên cứu rất nhiều Khung công tác MVVM của Caliburn.Micro. Thực tế là: Tôi đã kết thúc việc không sử dụng Caliburn.Micro cho điều đó và cuối cùng tôi đã tự mình thực hiện một số khái niệm MVVM (cụ thể là, chỉ các lớp ViewModelBase
và RoutedCommand
).
Bây giờ tôi đã được chỉ định cho một dự án lớn hơn một chút dọc theo cùng một dòng: "Ứng dụng máy tính để bàn ngoại tuyến dành cho khách hàng phong phú một người dùng", có thể nói, và tôi đã quyết định sử dụng Caliburn.Micro. Và đó là nơi "vấn đề" của tôi bắt đầu.
Tôi đã đọc trong bài đăng blog nổi tiếng này , có tiêu đề nói rằng "Nếu bạn đang sử dụng MVVM thì bạn cần một khung công tác", rằng:
"Cố gắng làm một cái gì đó như MVVM mà không có khung là một công việc khổng lồ. Hàng tấn mã trùng lặp, phát minh lại bánh xe và đào tạo lại cho mọi người suy nghĩ khác biệt .
Ít nhất với một khung bạn tránh được mã trùng lặp và hy vọng không phải phát minh lại bánh xe - cho phép bạn tập trung vào đào tạo lại mọi người. Phần đào tạo lại nói chung là không thể tránh khỏi, nhưng một khung cung cấp mã và cấu trúc hệ thống ống nước, làm cho quá trình dễ dàng hơn. "
Tôi sẽ đồng ý khi đọc lần đầu tiên nhưng trải nghiệm thực tế của tôi với Caliburn.Micro (CM) trong ứng dụng thực tế của tôi là không biết gì và mất phương hướng. Đó là, khuôn khổ đã không làm cho quá trình dễ dàng hơn, hoàn toàn ngược lại. Đọc các ví dụ lặp đi lặp lại do Rob Eisenberg cung cấp trong tài liệu không chính thức (cũng vậy) và cố gắng suy ra các mẫu sử dụng từ các mẫu được cung cấp phức tạp, và các mối quan hệ giao diện và lớp hoàn toàn gián tiếp của chúng, nơi mọi thứ dường như được thiết kế để hoạt động dựa trên tác dụng phụ, dường như không thể có của con người trừ khi bạn là một thiên tài dày dạn (xin lỗi vì những lời tán tỉnh, nhưng tôi đoán bạn biết ý tôi là gì).
Chưa kể rằng bất kỳ kịch bản tầm thường nào ở trên dường như liên quan đến các container IoC, đây là điều mà tôi chưa bao giờ làm việc và dường như giải quyết một vấn đề mà tôi thậm chí không gặp phải . Tôi không cảm thấy muốn dành nhiều giờ dự án để học những thứ đó thay vì nghĩ về vấn đề và lĩnh vực ứng dụng của mình. Tôi chỉ muốn một quả chuối, nhưng CM đã cho tôi một con khỉ đột (IoC) cầm một giỏ chuối.
Bây giờ tôi đang xem xét để quay trở lại khung MVVM tại nhà của mình - chỉ bao gồm một số ít các lớp dành riêng cho MVVM mà tôi thực sự muốn thực hiện - ít nhất tôi muốn cho CM một cơ hội, trong trường hợp tôi bị mất thứ gì đó ở đây, hoặc chỉ đơn giản là làm những việc "sai cách" ra khỏi sự thiếu kinh nghiệm và thiếu hiểu biết. Và câu hỏi là:
Có sự đồng thuận rộng rãi rằng "các khung làm cho mọi thứ dễ dàng và tự nhiên hơn", nhưng nếu tôi tình cờ gặp phải điều ngược lại, điều này có nghĩa là tôi không nên sử dụng khung, hoặc tôi đang cố gắng học sai cách? Có một manh mối mà tôi thậm chí không nên sử dụng một khung công tác ở nơi đầu tiên? Hoặc có một số cách "đúng" để tìm ra cách sử dụng CM để phát triển MVVM đơn giản?
RelayCommand
triển khai (vì nó "liên kết" trực tiếp với các phương thức theo quy ước, thay vì ràng buộc với các thuộc tính của ICommand).
RelayCommand
thư viện từ một thư viện khác nếu thư viện được Caliburn Micro sử dụng không hoạt động cho bạn.
EventAggregator
để nhắn tin vàNotificationObject
cho ViewModelBase và MVVM LightRelayCommand
cho các lệnh. Điều quan trọng là xác định những vấn đề mà khung sẽ giải quyết cho bạn và chỉ sử dụng các giải pháp đó. Đừng cảm thấy như bạn bị buộc phải sử dụng toàn bộ thư viện khung.