Có vẻ như bạn đã rơi vào một số cạm bẫy phổ biến, nhưng đừng lo lắng, chúng có thể được sửa chữa :)
Trước tiên, bạn cần xem xét ứng dụng của mình một chút khác biệt và bắt đầu chia nó thành nhiều phần. Chúng ta có thể chia các phần theo hai hướng. Trước tiên, chúng ta có thể tách logic điều khiển (Quy tắc kinh doanh, mã truy cập dữ liệu, mã quyền người dùng, tất cả các loại nội dung đó) khỏi mã UI. Thứ hai, chúng ta có thể chia mã UI thành nhiều phần.
Vì vậy, chúng ta sẽ thực hiện phần sau trước, chia nhỏ UI thành nhiều phần. Cách dễ nhất để làm điều này là có một hình thức lưu trữ duy nhất mà bạn soạn UI của mình với usercontrols. Mỗi kiểm soát người dùng sẽ phụ trách một khu vực của biểu mẫu. Vì vậy, hãy tưởng tượng ứng dụng của bạn có một danh sách người dùng và khi bạn nhấp vào người dùng, một hộp văn bản bên dưới nó chứa đầy các chi tiết của họ. Bạn có thể có một điều khiển người dùng quản lý hiển thị danh sách người dùng và điều khiển thứ hai quản lý hiển thị chi tiết của người dùng.
Bí quyết thực sự ở đây là cách bạn quản lý giao tiếp giữa các điều khiển. Bạn không muốn 30 điều khiển người dùng trên biểu mẫu tất cả các tham chiếu giữ ngẫu nhiên cho nhau và gọi các phương thức trên chúng.
Vì vậy, bạn tạo một giao diện cho mỗi điều khiển. Giao diện chứa các hoạt động mà điều khiển sẽ chấp nhận và bất kỳ sự kiện nào nó phát sinh. Khi bạn nghĩ về ứng dụng này, bạn không quan tâm nếu lựa chọn danh sách hộp danh sách thay đổi, bạn quan tâm đến thực tế một người dùng mới đã thay đổi.
Vì vậy, bằng cách sử dụng ứng dụng ví dụ của chúng tôi, giao diện đầu tiên cho điều khiển lưu trữ hộp danh sách người dùng sẽ bao gồm một sự kiện có tên UserChanged để chuyển đối tượng người dùng ra ngoài.
Điều này thật tuyệt vời bởi vì bây giờ nếu bạn cảm thấy nhàm chán với hộp danh sách và muốn điều khiển mắt ma thuật zoomy 3d, bạn chỉ cần mã nó vào cùng một giao diện và cắm nó vào :)
Ok, vậy là phần hai, tách logic UI khỏi logic miền. Chà, đây là một con đường mòn và tôi khuyên bạn nên xem mẫu MVP ở đây. Nó thực sự đơn giản.
Mỗi điều khiển hiện được gọi là Chế độ xem (V trong MVP) và chúng tôi đã đề cập đến hầu hết những gì cần thiết ở trên. Trong trường hợp này, điều khiển và giao diện cho nó.
Tất cả chúng tôi thêm là mô hình và người trình bày.
Mô hình chứa logic quản lý trạng thái ứng dụng của bạn. Bạn biết nội dung, nó sẽ vào cơ sở dữ liệu để lấy người dùng, ghi vào cơ sở dữ liệu khi bạn thêm người dùng, v.v. Ý tưởng là bạn có thể kiểm tra tất cả những điều này trong sự cô lập hoàn toàn với mọi thứ khác.
Người trình bày là một chút khó khăn hơn để giải thích. Đây là một lớp nằm giữa mô hình và View. Nó được tạo bởi khung nhìn và khung nhìn tự chuyển vào người trình bày bằng giao diện mà chúng ta đã thảo luận trước đó.
Người thuyết trình không cần phải có giao diện riêng, nhưng dù sao tôi cũng muốn tạo một giao diện. Làm cho những gì bạn muốn người trình bày làm rõ ràng.
Vì vậy, người trình bày sẽ hiển thị các phương thức như ListOfAllUsers mà Chế độ xem sẽ sử dụng để lấy danh sách người dùng của mình, thay vào đó, bạn có thể đặt phương thức AddUser là Xem và gọi phương thức đó từ người trình bày. Tôi thích cái sau. Bằng cách đó, người trình bày có thể thêm người dùng vào hộp danh sách khi nào họ muốn.
Người thuyết trình cũng sẽ có các thuộc tính như CanEditUser, sẽ trả về đúng nếu người dùng được chọn có thể được chỉnh sửa. Chế độ xem sau đó sẽ truy vấn mà mỗi khi cần biết. Bạn có thể muốn những cái có thể chỉnh sửa màu đen và chỉ đọc những màu xám. Về mặt kỹ thuật, đó là một quyết định cho Chế độ xem vì nó tập trung vào giao diện người dùng, cho dù người dùng có thể chỉnh sửa được ngay từ đầu hay không là dành cho Người thuyết trình. Người trình bày biết vì nó nói chuyện với Người mẫu.
Vì vậy, tóm lại, sử dụng MVP. Microsoft cung cấp một cái gì đó gọi là SCSF (Nhà máy phần mềm khách hàng thông minh) sử dụng MVP theo cách tôi đã mô tả. Nó cũng làm rất nhiều thứ khác nữa. Nó khá phức tạp và tôi không thích cách họ làm mọi thứ, nhưng nó có thể giúp ích.