MVC: Mô hình được điền đầy đủ hoặc Mô hình điền một phần?


10

Điều này đã ám ảnh tôi rất lâu. Khi làm lập trình MVC, bạn nghĩ đâu là thực hành lập trình tốt hơn? Nên sử dụng các mô hình được điền đầy đủ hoặc các mô hình được điền một phần, đặc biệt là khi tôi biết rằng đối với tác vụ cụ thể này, tôi sẽ chỉ cần 2 trường từ đối tượng mô hình có 5 trường khác?

Đôi khi, có vẻ như tội phạm sẽ điền vào danh sách 20 đối tượng mô hình với tất cả các giá trị từ cơ sở dữ liệu khi bạn biết rằng bạn sẽ chỉ cần một vài trong số chúng.

Tất nhiên mô hình một phần có nghĩa là bạn sẽ phải viết thêm một phương thức trong DAO của bạn ngoài phương thức tìm nạp mọi thứ. Có nghĩa là nhiều mã hơn để duy trì?

Mặt khác, kéo mọi thứ từ DB với các mô hình được điền đầy đủ có nghĩa là một phương thức phục vụ tất cả nhưng điều này rõ ràng sẽ cung cấp cho bạn một số chi phí hiệu năng.

Tôi có thể thấy ORM (chẳng hạn như Hibernate hoặc ActiveRecord of Rails) các xu hướng ưa thích trong lập trình MVC và cơ sở dữ liệu như các mô hình đầy đủ BigTable của Google được xu hướng chấp nhận. Nhưng nếu bạn vẫn đang sử dụng JDBC cũ thì sao?

Phần cứng là giá rẻ, phát triển là tốn kém. Điều đó có thực sự đúng ngay cả khi ứng dụng cần mở rộng tới vài trăm nghìn yêu cầu mỗi giờ?


1
"Mặt khác, kéo mọi thứ từ DB với các mô hình được điền đầy đủ có nghĩa là một phương thức phục vụ tất cả nhưng điều này rõ ràng sẽ mang lại cho bạn một số chi phí hiệu năng." Thật sao? Bạn đã đo bất kỳ hiệu suất trên từ thực hành này?
S.Lott

>> Thật sao? Bạn đã đo bất kỳ hiệu suất nào từ thực tiễn này chưa? << - Tôi đã mong đợi điều này. Không, tôi không có. Nhưng nó sẽ rất thú vị để đo lường và được chứng minh là sai.
Pritam Barhate

Thật khó để chứng minh tổng phí không tồn tại. Bạn có thể dễ dàng ngụy biện cho nhiều chi tiết cho rằng các phép đo không hợp lệ trong một số trường hợp. Sẽ tốt hơn nhiều nếu bạn sử dụng thiết lập cơ sở dữ liệu, ngôn ngữ ứng dụng "điển hình", v.v. và cấu hình cấu hình ưa thích của bạn để hiển thị các chi phí thực tế là gì để chúng tôi không phải phân biệt các yếu tố khác nhau mà chúng tôi bỏ qua các phép đo của mình .
S.Lott

1
Tôi đã tìm thấy một bài viết xuất sắc bao gồm câu hỏi về việc tiết lộ mô hình miền của bạn so với việc gửi DTO tại msdn.microsoft.com/en-us/magazine/ee236638.aspx .
Mayo

Câu trả lời:


3

Bạn có hai lựa chọn:

1) Để lại một số trường trong mô hình chưa được lấp đầy

2) Tạo một mô hình "lite" bổ sung cho tình huống cụ thể của bạn

Lựa chọn nào phụ thuộc vào hai điều nữa:

a) Có bao nhiêu trường của mô hình "đầy đủ" sẽ bị bỏ qua

b) Mức độ thường xuyên của mô hình "lite" này sẽ được khởi tạo

Nếu chỉ có một vài hoặc nhiều lĩnh vực có thể được lấp đầy, bạn có thể đi với 1).

Nếu b) chỉ là một tình huống cá nhân đặc biệt, có lẽ không có điểm nào trong việc tạo ra một mô hình bổ sung chỉ cho một trường hợp sử dụng.

Một cách tiếp cận khác là xác định mô hình "lite" và kế thừa mô hình "đầy đủ" từ nó.


Cảm ơn câu trả lời. Nó có ý nghĩa để làm cho một mô hình lite tùy thuộc vào nhu cầu. Nhưng đôi khi tôi tự hỏi sẽ không một chiến lược như vậy sẽ tạo ra quá nhiều lớp mô hình? Đặc biệt là nếu tôi đang tạo các mô hình cụ thể cho các khung nhìn hơn là các mô hình cụ thể cho logic kinh doanh.
Pritam Barhate

3

Nếu khung nhìn của bạn chỉ cần 2 thuộc tính từ mô hình thì bạn (có thể) có mô hình sai cho trường hợp sử dụng đó! Tôi sẽ tìm cách tạo một mô hình phù hợp với chế độ xem, lưu các tra cứu DB bổ sung và chỉ điền dữ liệu bạn cần. Nếu một chế độ xem tiếp theo cần chi tiết hơn thì bạn phải hỏi, liệu tôi có nhận được dữ liệu bổ sung sau hay tôi nên lấy hết dữ liệu trước ...

Để thay thế, bạn có thể xem xét một số loại đánh giá lười biếng, vì vậy các giá trị được đưa ra khi bạn cần chúng. Điều này có thể hoạt động tốt nhưng rõ ràng là nhiều công việc hơn và có thể sẽ gây ra nhiều chuyến đi khứ hồi đến DB, điều này không tốt nếu bạn kết thúc việc đó nhiều.

Điều đó nói rằng, về cơ bản, nếu bạn đang chọn một vài trường bổ sung từ một bảng hoặc dạng xem thì chi phí để có được dữ liệu bổ sung đó là, cho tất cả các ý định và mục đích bằng không (OK, có nhiều byte hơn trên dây, nhưng chi phí lớn nhất có thể để tạo và phá vỡ kết nối), vì vậy nếu có cơ hội bạn sẽ cần thêm một số dữ liệu, tôi có thể sẽ điền đầy đủ mô hình một khi bạn hài lòng, bạn có mô hình phù hợp .

Phần cứng là rẻ, nhưng không có phần cứng có thể làm cho một thiết kế xấu hoạt động tốt.


2
>> Nếu chế độ xem của bạn chỉ cần 2 thuộc tính từ mô hình thì bạn đã có mô hình sai! << - Không cần phải lo lắng luôn. Trường hợp điển hình đang hiển thị danh sách kết quả tìm kiếm trong các ứng dụng kinh doanh. Ví dụ: trong CRM - khách hàng - hầu hết một người sẽ chỉ hiển thị tên và một hoặc 2 trường quan trọng trong danh sách tìm kiếm. Nhưng CRM sẽ có khá nhiều lĩnh vực khác liên quan đến khách hàng đó.
Pritam Barhate

1
Câu hỏi nói rằng trong trường hợp này chỉ cần 2 thuộc tính.
Steve

-2

Mô hình không phải là DAO.

Và một điều nữa: nếu bạn nói rằng bạn có 20 mô hình (khách hàng, từ ví dụ của bạn), thì đó không phải là mô hình MVC. Mô hình miền không ánh xạ trực tiếp vào một hàng của bảng. Thay vào đó, nó phải chịu trách nhiệm cho tất cả các hoạt động được thực hiện với "khách hàng" của bạn.

Trong ví dụ của bạn, "Khách hàng" không phải là một mô hình miền, mà chỉ là một đối tượng bên trong mô hình.

Đối với tương tác với cơ sở dữ liệu, trách nhiệm đó phải được ủy quyền cho một đối tượng ánh xạ dữ liệu , cần biết cách lưu trữ và tìm nạp các thể hiện của lớp Khách hàng.


PS nếu bạn có logic cơ sở dữ liệu bên trong mô hình, thì nó sẽ đẩy logic nghiệp vụ miền vào bộ điều khiển.
mefisto

1
Một lớp thực hiện mọi thứ vận hành cho khách hàng là một ý tưởng tồi vì nó sẽ khó duy trì.
Andy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.