Một số nền tảng:
Một đồng nghiệp và bản thân tôi có những cách hiểu khác nhau về MVC, điều đó có nghĩa, với cùng một vấn đề, chúng tôi đang đưa ra các giải pháp hoàn toàn khác nhau. Anh ta đến từ nền Java, nơi mọi thành phần của MVC có thể mô hình hóa một đối tượng theo truyền thống và tôi đến từ nền Haskell và có ít hoặc không có kinh nghiệm với OOP.
Không gian vấn đề:
Vấn đề chúng tôi đang cố gắng để mô hình hóa hoạt động hơi giống như một môi trường máy tính để bàn. Chúng tôi có một khái niệm về phiên người dùng (có thể là thông tin đăng nhập, nền tảng máy tính để bàn của họ) và các quy trình trên máy tính để bàn của họ (ví dụ iTunes, Finder, v.v.) mà mỗi người có thuộc tính mô hình riêng (thu nhỏ, v.v.).
Chúng tôi đồng ý ở điểm sau: chúng tôi nghĩ rằng HMVC là đại diện tốt nhất. Chúng tôi đồng ý rằng chúng tôi có hai đối tượng MVC, Session
(máy tính để bàn) và Process
(ứng dụng) và chúng tôi không muốn Process
có một khái niệm về Session
hoặc một liên kết ngược.
Tuy nhiên, khi chúng tôi không đồng ý với ý nghĩa cốt lõi của MVC và ảnh hưởng của nó đến nơi chúng tôi giữ danh sách các quy trình trên màn hình của người dùng .
Giải thích của anh ấy:
Ông lập luận một điểm rất hợp lệ mà theo truyền thống là dễ dàng mô hình hóa mã và trong hệ thống kết xuất của chúng tôi. Ông nói rằng danh sách các quy trình nên là một danh sách các ProcessController
đối tượng trong SessionController
đó lần lượt có các mô hình của chúng như các đối tượng riêng biệt bên trong chúng. Điều này có nghĩa là có một lượng đáng kể trạng thái trong cả hai SessionController
và SessionModel
có liên quan đến những gì SessionView
cần kết xuất.
Điều này dường như rất hài hòa với những gì chúng ta có thể đọc trên internet trong một tìm kiếm ngắn gọn.
Lời giải thích của tôi:
Giải thích của tôi đòi hỏi sự thay đổi kiến trúc lớn nhất và có vẻ khó thực hiện hơn trong mã, nhưng tôi tin rằng nó đúng hơn về mặt khái niệm. Tôi muốn ai đó giải thích lý do tại sao không phải như vậy, hoặc đưa ra một mô hình khác (nếu không phải là MVC) phù hợp với cách giải thích này và nêu bật một số điểm mạnh và điểm yếu cho cả hai mẫu để chúng tôi có thể đưa ra quyết định sáng suốt nhất (không ai trong chúng tôi có một nền tảng vững chắc trong kiến trúc phần mềm).
Tôi thấy MVC là một bộ ba với ba thành phần có thể hoán đổi cho nhau: the Model
, the Controller
và View
. Điều này đồng ý với những gì tôi có thể đọc trên internet và một số nguồn sẽ nói những điều giống như 'lượt xem, bộ điều khiển và mô hình có cùng giao diện nên có thể thay thế cho nhau để tạo hiệu ứng khác nhau'. Cách tôi tưởng tượng điều này để làm việc như sau:
- Khi bạn trao đổi mô hình, bạn đang thay đổi cách xác thực hoặc lưu trữ dữ liệu
- Khi bạn trao đổi bộ điều khiển, bạn sẽ thay đổi cách trang hoạt động , nhưng không phải bất cứ điều gì có thể thay đổi nội dung dữ liệu nhận thức của trang
- Khi bạn hoán đổi chế độ xem, bạn sẽ thay đổi cách hiển thị trang
Từ điều này, tôi lập luận rằng đưa ra bất kỳ Model
và View
, chỉ trao đổi bộ điều khiển không nên thay đổi dữ liệu mà trang ban đầu hiển thị vì bộ điều khiển chỉ thay đổi hành vi chứ không phải 'nội dung' của trang. Tôi nghĩ rằng điều này phù hợp với trực quan hóa khái niệm của bộ điều khiển như một 'bộ điều khiển trạm' trong hệ thống đường sắt, một kế hoạch của đường sắt như mô hình và biểu hiện vật lý thực tế và giao diện của các tuyến đường (theo các hương vị khác nhau, nói ' Real 'hoặc' Virtual 3D ') dưới dạng xem.
Đây là nơi chúng tôi không đồng ý:
Tôi lập luận rằng vì dữ liệu sẽ được hiển thị cho người dùng trong đó SessionView
bị thay đổi bởi các quy trình khác nhau trên máy tính để bàn (tôi mô hình hóa các quy trình là dữ liệu có liên quan ), SessionModel
nên chứa danh sách các trường hợp ProcessModel
. Điều này có nghĩa là việc sử dụng bất kỳ ngẫu nhiên nào SessionController
có cùng một SessionView
khái niệm sẽ hiển thị cùng một dữ liệu (các quy trình trên máy tính để bàn).
Ông lập luận rằng nó có ý nghĩa hơn đối với Model
việc không bao giờ biết về một mô hình khác. Điều này có nghĩa là SessionController
sẽ có một danh sách các ProcessController
s bên trong nó và mỗi Controller
đối tượng có một liên kết đến mô hình của nó. Cho một SessionView
và giống nhau SessionModel
nhưng một SessionController
dữ liệu khác nhau được hiển thị cho người dùng nên hoàn toàn khác nhau.
Vui lòng tranh luận cho / chống lại mỗi giải thích và giúp chúng tôi đạt được kết quả thông tin nhất.
Cảm ơn vì đã dành thời gian cho tôi!