Nên sắp xếp logic sắp xếp trong mô hình, khung nhìn hoặc bộ điều khiển? [đóng cửa]


157

Tôi có một danh sách thả xuống hiển thị các giá trị từ một bảng cho người dùng cuối. Tôi muốn có những giá trị này được sắp xếp theo thứ tự abc.

Theo thiết kế MVC thích hợp, ở lớp nào tôi nên đặt logic sắp xếp của mình: mô hình, khung nhìn hoặc bộ điều khiển?

EDIT : Trả lời câu hỏi của LarsH, "Ý bạn là mã xác định thứ tự sắp xếp nào là mong muốn? Hoặc mã thực hiện sắp xếp?", Ban đầu tôi đề cập đến mã xác định thứ tự sắp xếp nào là mong muốn.


6
Để giải quyết sự bất đồng trong các bình luận, sẽ rất hữu ích nếu bạn nói ý của bạn bằng cách "sắp xếp logic". Bạn có nghĩa là mã xác định thứ tự sắp xếp là mong muốn? hoặc mã thực hiện sắp xếp?
LarsH

9
Thiết kế MVC không có gì đặc biệt hay ma thuật - nó thực sự chỉ là điểm khởi đầu. làm cho nó phù hợp với nhu cầu của bạn và hãy nhớ rằng bạn có thể tái cấu trúc bất cứ lúc nào. Tôi đã nhận thấy rằng các nhà cung cấp khác nhau sẽ xác định lại những gì đi vào bộ điều khiển hoặc chế độ xem dựa trên nhu cầu của bộ công cụ của họ, vì vậy thật khó để tìm thấy bất kỳ thỏa thuận nào. Điều quan trọng là tách Mô hình của bạn khỏi Chế độ xem / Trình điều khiển. Bạn cũng có thể nhận được nhiều dặm hơn từ mẫu MVP, tôi tin rằng nó cụ thể hơn một chút trong chính xác khu vực này.
Bill K

9
Có lẽ điều này nên được di chuyển đến lập trình viên.
Alfredo Osorio

57
Chắc chắn trong bộ điều khiển. Hoặc là hoặc mô hình. Hoặc xem.
mob

2
Chắc chắn không bao giờ, không bao giờ, bao giờ, bao giờ trong tầm nhìn.
contactmatt

Câu trả lời:


49

(Lưu ý: trích dẫn và trích dẫn này được lấy từ câu trả lời của @ dasblinkenlight , nhưng chúng tôi không đồng ý với cách giải thích của chúng tôi về nó. Đọc bài đăng của anh ấy và tạo nên suy nghĩ của riêng bạn).

Theo mô tả MVC ,

Một bộ điều khiển có thể gửi các lệnh đến khung nhìn liên quan của nó để thay đổi cách trình bày mô hình của khung nhìn (ví dụ, bằng cách cuộn qua một tài liệu). Nó có thể gửi lệnh đến mô hình để cập nhật trạng thái của mô hình (ví dụ: chỉnh sửa tài liệu).

Logic sắp xếp (ví dụ: thuật toán so sánh sắp xếp / thuật toán sắp xếp) thuộc về mô hình vì nó chứa các quy tắc kinh doanh và dữ liệu trạng thái. Do việc thay đổi cách sắp xếp dữ liệu mô hình rơi vào danh mục "thay đổi cách trình bày của mô hình", nên bộ điều khiển chịu trách nhiệm "thực hiện sắp xếp" bằng cách gọi phương thức model.changeSorticState ().


8
Điều gì xảy ra nếu cùng một dữ liệu được hiển thị ở hai chế độ xem khác nhau, được sắp xếp khác nhau?
s4y

Điều đó cũng nên được thực hiện theo cách tương tự, model.SortAsceinating () và model.SortDesceinating () và được gọi bởi Trình điều khiển.
Brij

1
@Brij Trong MVC thích hợp, hai chế độ xem có thể không chia sẻ cùng một mô hình không?
KOVIKO

@Sidnicious Nếu có một phương pháp sắp xếp có một tham số khác. Ví dụ public void Sort(bool sortByDescending = false), nếu sai nó sắp xếp theo tăng dần. Hoặc chỉ có hai phương pháp sắp xếp khác nhau nếu logic rất khác nhau.
MattMcGowan 04/11/2015

@Sidnicious có hai mô hình khác nhau ủy thác mọi thứ trừ logic sắp xếp cho một mô hình thứ ba duy nhất. docs.google.com/drawings/d/
Kẻ

62

Ai kiểm soát thứ tự sắp xếp?

Sơ đồ MVC đơn giản(Từ Wikipedia )

1) Thứ tự tự nhiên trong chính dữ liệu:

Thứ tự là một phần của Mô hình, vì vậy nó sẽ đi đến đó. Một kéo thô của "tất cả dữ liệu" sẽ trả về dữ liệu theo thứ tự được sắp xếp và không có giao diện để chọn thứ tự sắp xếp.

2) Người dùng nên kiểm soát cách họ xem dữ liệu:

Chế độ xem sẽ cung cấp giao diện (chẳng hạn như mũi tên tăng / giảm dần) tương tác với Bộ điều khiển và Mô hình hiểu rõ dữ liệu đủ để thực hiện sắp xếp theo yêu cầu trên dữ liệu. Tuy nhiên, một dữ liệu thô không nhất thiết phải được sắp xếp, không giống như trong (1).

Trong cả hai trường hợp,

Chế độ xem không hiểu rằng có một loại sắp diễn ra, khác là khả năng hiển thị hướng sắp xếp nào đã được chọn. Đừng đặt logic ở đó.

Hãy cẩn thận

Chức năng sắp xếp có thể hoàn toàn đi trong Chế độ xem, trong một trường hợp (mà tôi có thể nghĩ ra bằng tay; có thể có nhiều hơn):

Một loại "ngu ngốc" trong đó tất cả các dữ liệu đã có trong chế độ xem và nó không phải sử dụng bất kỳ kiến ​​thức tên miền nào để thực hiện sắp xếp. Chuỗi rất đơn giản hoặc so sánh số, ví dụ. Điều này là không thể, ví dụ, kết quả tìm kiếm trên một trang web khi kết quả có thể được phân chia trên nhiều trang.


58
Chế độ xem có thể thấy người dùng!?
Farzher

41
Người mẫu cập nhật góc nhìn!?
lừa dối

13
Bài viết trên wikipedia đó thật tệ: phần "Tương tác thành phần" xung đột với sơ đồ hiển thị bên phải (mà bạn vừa đăng ở đây). Thứ hai, mô hình không "cập nhật" chế độ xem. Nó thông báo quan điểm khi đã có một sự thay đổi trạng thái. Chế độ xem quyết định cách cập nhật. Ừ Bạn tự hỏi tại sao có 1000 câu trả lời khác nhau cho câu hỏi này khi có quá nhiều thông tin không rõ ràng trôi nổi xung quanh.
KyleM

4
@cHao Chắc chắn rồi. Chúng ta có thể đồng ý rằng biểu đồ Wikipedia khá kỳ lạ, phải không? :)
lừa dối

6
@StephenSarcsamKamenar và mọi người khác: Không, hình ảnh có ý nghĩa hoàn hảo: Nó hiển thị luồng dữ liệu , không phải các kết nối mã.
Izkata

18

Theo mô tả MVC ,

Một bộ điều khiển có thể gửi các lệnh đến khung nhìn liên quan của nó để thay đổi cách trình bày mô hình của khung nhìn (ví dụ, bằng cách cuộn qua một tài liệu). Nó có thể gửi lệnh đến mô hình để cập nhật trạng thái của mô hình (ví dụ: chỉnh sửa tài liệu).

Theo đó, logic sắp xếp thuộc về bộ điều khiển, bởi vì việc thay đổi cách sắp xếp dữ liệu mô hình rơi thẳng vào danh mục "thay đổi cách nhìn của mô hình".

EDIT: Để làm rõ nhiều hiểu lầm được nêu trong các bình luận, "logic sắp xếp" không phải là mã thực hiện sắp xếp; nó là mã xác định sắp xếp Logic sắp xếp so sánh các mục riêng lẻ với nhau để thiết lập một đơn đặt hàng (ví dụ thông qua một thể hiện IComparator<T>) hoặc chứa logic xây dựng một đối tượng được sử dụng để đặt hàng bởi một hệ thống bên ngoài (ví dụ thông qua một thể hiện của IOrderedQueryable<T>). Logic này thuộc về bộ điều khiển của bạn, bởi vì nó cần kiến ​​thức liên quan đến phía "doanh nghiệp" trong ứng dụng của bạn. Nó hoàn toàn đủ để thực hiện sắp xếp, nhưng nó tách biệt với mã thực sự thực hiệnnó Mã sắp xếp có thể nằm trong chế độ xem của bạn, trong mô hình của bạn hoặc thậm chí trong lớp liên tục hỗ trợ mô hình của bạn (ví dụ: cơ sở dữ liệu SQL của bạn).


12
-1 Làm thế nào bạn quản lý kết luận điều này từ trích dẫn đó? Có nơi nào nói rằng bộ điều khiển có nhiệm vụ lấy thông tin từ mô hình không? Bộ điều khiển gửi lệnh để thay đổi trạng thái. Không có gì nói về khai thác hoặc thao túng thông tin.
tereško

3
@ tereško Làm thế nào bạn quản lý để kết luận từ câu trả lời của tôi rằng bộ điều khiển cần lấy thông tin từ mô hình? Bằng cách "sắp xếp logic", ý tôi chỉ là logic cần thiết để thiết lập một trật tự - theo thuật ngữ C #, điều đó mang lại sự thực thi IComparer<T>. "Cơ chế nồi hơi" còn lại của việc sắp xếp, bao gồm cả việc truy xuất dữ liệu từ mô hình, tùy thuộc vào chế độ xem.
dasblinkenlight

3
".. logic sắp xếp thuộc về bộ điều khiển .." , điều này có nghĩa gì khác?
tereško

3
"Bộ điều khiển có thể gửi lệnh đến chế độ xem được liên kết của nó để thay đổi bản trình bày của chế độ xem" thực sự nghe giống như chế độ xem sẽ thực hiện sắp xếp, đáp ứng với lệnh từ bộ điều khiển.
Phường Samuel Edwin

1
@KyleM Nhưng chế độ xem không phải lúc nào cũng có đủ kiến ​​thức để chứa logic sắp xếp. Ví dụ, hãy xem xét một trường có mã số tương ứng với một trong các enum {Unknown, Pass, Fail}. Hơn nữa giả định rằng Unknownphải luôn luôn sắp xếp cuối cùng, bất kể thứ tự tăng dần hoặc giảm dần mà người dùng đã chọn. Đặt logic này trong chế độ xem sẽ cho biết quan điểm của bạn quá nhiều về bản chất kinh doanh của dữ liệu bên trong codetrường. Chế độ xem không nên biết: tất cả những gì nó biết là người dùng đã thực hiện cử chỉ "sắp xếp" (ví dụ: nhấp vào tiêu đề); phần còn lại tùy thuộc vào bộ điều khiển.
dasblinkenlight

10

Không có cái nào ở trên. Sắp xếp là logic kinh doanh và logic kinh doanh không thuộc về một trong ba. Không phải mọi đoạn mã trong ứng dụng của bạn sẽ là mô hình, khung nhìn hoặc bộ điều khiển.

Những gì tôi thường làm trong các ứng dụng MVC của mình là tôi có một lớp dịch vụ thực hiện tất cả logic nghiệp vụ. Các phương thức trong lớp dịch vụ nên có API đơn giản, rõ ràng với các tham số được đặt tên tốt. Sau đó, bạn có thể gọi các phương thức đó từ bộ điều khiển của mình để thao tác dữ liệu trong các mô hình.

Theo nghĩa đó, việc sắp xếp là "trong bộ điều khiển", nhưng bản thân mã thực hiện việc sắp xếp không nên được thực hiện trong bộ điều khiển, chỉ được gọi từ đó.


5
Gần đây tôi đã được thông báo rằng một số người coi "lớp dịch vụ" (logic kinh doanh) là một phần của mô hình.
Marvo

@Marvo Tôi nghĩ rằng có một số trường hợp trong đó một số logic nhất định gắn chặt với kiểu dữ liệu của chúng đến mức có nghĩa là gói chúng lại với nhau trong một lớp. (chức năng thời gian và ngày chẳng hạn). Tuy nhiên, nói chung, tôi thấy nó hoạt động tốt nhất khi các đối tượng mô hình không làm gì ngoài việc giữ dữ liệu.
nont

Vậy thì logic kinh doanh "sống" ở đâu trong mẫu MVC?
Marvo

2
Chỉ vì một ứng dụng sử dụng mẫu MVC, không có nghĩa là mọi đoạn mã trong ứng dụng sẽ là một mô hình, khung nhìn hoặc bộ điều khiển. Đó là lấy mẫu thiết kế theo đúng nghĩa đen. Ví dụ, ứng dụng của bạn có thể có một tệp cấu hình nào đó. Tệp cấu hình đó không phải là mô hình hóa dữ liệu người dùng, cũng không hiển thị các khung nhìn, cũng không kiểm soát luồng dữ liệu thông qua các mô hình tới các khung nhìn. Đó là một tập tin cấu hình, đó là loại điều riêng của nó.
nont

Người ta có thể dễ dàng xem xét một phần tập tin cấu hình của mô hình. Mô hình không phải là một cơ sở dữ liệu. Tôi không nói bạn đúng hay sai. Tôi chỉ gợi ý rằng bạn, như tôi gần đây đã làm (vì tôi giữ quan điểm giống như bạn có) google chủ đề lên một chút và xem những gì người khác đang nói.
Marvo

8

Chắc chắn không phải là bộ điều khiển: Nó gửi tin nhắn để xem và mô hình nhưng nên thực hiện càng ít công việc càng tốt. Nếu người dùng có thể thay đổi việc sắp xếp yêu cầu đó được xử lý bởi bộ điều khiển bằng cách thông báo cho mô hình hoặc quan điểm về nó.

Có thể là View nếu nó là một thứ View thuần túy. Nếu Ứng dụng hoạt động tốt mà không cần sắp xếp thì việc sắp xếp chỉ là một phần của biểu diễn và sẽ xuất hiện trong chế độ xem.

Nếu thứ tự là một phần vốn có của tên miền, nó sẽ đi trong mô hình.


"Cung cấp một bộ so sánh hoặc một mô tả sắp xếp" được tính là "làm việc"? Bởi vì logic sắp xếp được gói gọn trong bộ so sánh hoặc bộ mô tả sắp xếp, ngay cả khi "công việc sắp xếp" được thực hiện trong phương thức sắp xếp hoặc phần cuối của mô hình.
dasblinkenlight

Phụ thuộc vào những gì bạn có nghĩa là bằng cách cung cấp: đi vào là ok. Nhưng Bộ so sánh phải là một phần của mô hình hoặc khung nhìn, không phải là bộ điều khiển.
Jens Schauder

6
  • Lượt xem là một phần của MVC được cho là chứa logic trình bày.
  • Lớp mô hình là nơi chứa logic kinh doanh.
  • Bộ điều khiển chỉ thay đổi trạng thái của cả hai, dựa trên đầu vào của người dùng.

Vì vậy, sự lựa chọn là - bạn có nghĩ rằng đây là một phần của logic kinh doanh tên miền hoặc logic trình bày.

Nếu bạn đang triển khai một mô hình MVC Model2 hoặc MVC cổ điển thích hợp, thì tôi sẽ nói rằng thứ tự dữ liệu được cung cấp bởi lớp mô hình nên được kích hoạt theo yêu cầu của khung nhìn đến lớp mô hình. Xem yêu cầu dữ liệu được đặt hàng, lớp mô hình cung cấp nó.

Nhưng, vì bạn đang sử dụng cách diễn giải mô hình MVC của ASP.NET MVC, khác một chút so với MVC tiêu chuẩn của bạn - đối tượng ViewModel nên yêu cầu thông tin được đặt hàng từ lớp mô hình (vì lý do nào đó, khung ASP.NET nghĩ rằng các mẫu nên được gọi "Lượt xem" và lượt xem nên được gọi là "lượt xem" .. thật lạ).


12
Bạn đã tiếp tục bỏ qua nhiều câu trả lời áp dụng giả định của riêng bạn về ý nghĩa của chúng bằng cách "sắp xếp logic". Giả định của bạn là hoàn toàn không chính xác - logic sắp xếp không, và không bao giờ làm, bao gồm cả truy xuất.
dasblinkenlight

1
@dasblinkenlight, vâng, tôi hạ thấp nhiều chủ đề vì tất cả đều ngụ ý rằng bộ điều khiển nên thực hiện việc sắp xếp. Sai chỗ nào. Và .. mọi người .. xin vui lòng ngừng gắn cờ nhận xét của tôi chỉ vì bạn không đồng ý.
tereško

Nói rõ hơn: Tôi không đánh giá thấp câu trả lời của bạn vì nó không đúng và tôi không bao giờ đánh dấu bất kỳ nhận xét nào của bạn, vì tôi không thấy bị lạm dụng theo bất kỳ cách nào. Thành thật mà nói, tôi không biết làm thế nào câu trả lời của bạn quản lý để có được nhiều lượt đánh giá thấp như vậy: Tôi nghĩ rằng họ không hiểu.
dasblinkenlight

@dasblinkenlight naah .. tôi đã phát cuồng về những bình luận của tôi mà trong chủ đề này đã biến mất.
tereško

5

Tôi thường sẽ làm điều đó trong bộ điều khiển để phù hợp với mẫu theo các câu trả lời khác. Xem dưới đây để lý luận.

Tôi đã nghiên cứu kỹ điều này và đọc các câu trả lời cũng như các tài liệu liên quan và nói một cách thực tế tôi sẽ nói rằng nó sẽ phụ thuộc vào ứng dụng của bạn chẳng hạn:

Đây có phải là một ứng dụng vừa / lớn và / hoặc có nhiều UI được liên kết với nó (tức là Ứng dụng Windows, giao diện Web và giao diện Điện thoại).

  • Trong trường hợp này, tôi có thể sẽ xây dựng một lớp dịch vụ và đặt nó vào đối tượng nghiệp vụ và sau đó gọi phương thức thích hợp từ bộ điều khiển.

Nếu một trang web UI đơn được xác định rõ và bạn đang sử dụng một cái gì đó như EF Code First và bạn không có hoặc không có ý định tạo một lớp dịch vụ và dự định sử dụng một phương thức Tiện ích mở rộng đơn giản để đạt được nó:

  • Trong trường hợp này có lẽ tôi sẽ đặt nó trong bộ điều khiển một cách thực tế, nó phù hợp nhất với thời gian / ngân sách.

Nếu nó giống như BUT ở trên không thể được thực hiện với phương thức mở rộng ngoài hộp.

  • Tôi cũng có thể chọn bật nó trong lớp Model (nếu nó thực sự đặt theo loại đơn đó) vì nó sẽ phù hợp hơn ở đây so với trong bộ điều khiển. Nếu sắp xếp có thể được áp dụng cho nhiều hơn một lớp thì tôi sẽ triển khai nó theo phương thức mở rộng và sau đó gọi nó trong bộ điều khiển.

Tóm lại:

Câu trả lời giáo điều: Lớp dịch vụ

Câu trả lời thực dụng: Thông thường bộ điều khiển


Trong đó bộ điều khiển định nghĩa chịu trách nhiệm "chuẩn bị dữ liệu để xem"?
tereško

1
@ tereško: Trường hợp mô hình "thụ động" như đã được giải mã ở đây msdn.microsoft.com/en-us/l Library / ff649643.aspx trong phần biến thể. Xem "HTTP là một ví dụ về điều này". Trong khi một người theo chủ nghĩa thuần túy có thể tranh chấp điều này thì có thể dễ dàng hơn cho những người mới bắt đầu khởi nghiệp trong MVC nơi họ có thể đang sử dụng EF hoặc các mô hình khác trực tiếp trong bộ điều khiển và không thông qua BAL để nghĩ về cách này làm giảm rào cản để hiểu thêm về mô hình.
Luke Baughan

1
những gì bạn đang nói là "mô hình thiếu máu".
tereško

Điểm lưu ý, tôi đã xóa các mô tả vi phạm như bạn đề xuất. Chúc mừng cho đầu vào!
Luke Baughan

3

Tôi sẽ đề xuất sắp xếp dữ liệu từ một bảng - dữ liệu đủ nhỏ để hữu ích trong danh sách thả xuống - nên đến từ DB đã được sắp xếp thông qua truy vấn. Đối với tôi, điều đó làm cho mô hình trở thành nơi sắp xếp được áp dụng.

Nếu bạn quyết tâm thực hiện sắp xếp bằng tay, tôi nghĩ có những lý lẽ tốt cho việc sử dụng mô hình hoặc bộ điều khiển làm điểm ưa thích của bạn cho logic. Giới hạn sẽ là khuôn khổ cụ thể của bạn. Tôi thích quản lý dữ liệu chỉ trong mô hình. Tôi sử dụng bộ điều khiển để kết hôn với dữ liệu (mô hình) và trình bày (chế độ xem) như tôi đã được dạy (tự).


2

Trong khi tôi đồng ý về nguyên tắc với ý tưởng sắp xếp là Business Logic bởi vì bằng cách chia nhỏ nguồn gốc của nó, bạn sẽ kết thúc với một cái gì đó như "Khách hàng muốn trang Sản phẩm hiển thị với các hình ảnh được sắp xếp theo ngày" thì rõ ràng là thứ tự sắp xếp cho dữ liệu thường không tùy ý - ngay cả khi không có sự sắp xếp nào vì đó vẫn là một quyết định kinh doanh do thiếu sót (một danh sách trống vẫn là một danh sách).

NHƯNG ... Những câu trả lời này dường như không tính đến những tiến bộ trong công nghệ ORM, tôi chỉ có thể nói về mối quan hệ với Entity Framework (hãy tránh tranh luận về việc liệu đây có phải là ORM thật không, đó không phải là vấn đề) từ Microsoft như đó là những gì tôi sử dụng, nhưng tôi chắc chắn các ORM khác cung cấp chức năng tương tự.

Nếu tôi tạo chế độ xem được gõ mạnh cho lớp Sản phẩm bằng MS MVC và Entity Framework và có mối quan hệ khóa ngoài giữa bảng Sản phẩm và Hình ảnh (ví dụ: FK_ Productt_Image_ ProducttId) thì tôi sẽ có thể nhanh chóng sắp xếp hình ảnh trong khi hiển thị bằng cách sử dụng cái gì đó như thế này trong chế độ xem:

@foreach(Image i in Model.Image.OrderBy(e => e.DisplayOrder)){ //etc etc... }

Có đề cập đến một lớp Logic nghiệp vụ cụ thể, mà tôi cũng sử dụng để thực hiện 80% logic nghiệp vụ của mình, nhưng tôi sẽ không viết chức năng sắp xếp vào lớp Logic nghiệp vụ của mình bắt chước một thứ gì đó vượt trội từ Khung thực thể.

Tôi không nghĩ rằng có một câu trả lời chính xác cho câu hỏi này, ngoài việc nói điều đó; bạn nên trừu tượng logic kinh doanh phức tạp nếu có thể nhưng không phải trả giá cho việc phát minh lại bánh xe.


Tôi đã suy nghĩ tương tự, các câu trả lời ở đây dường như không tính đến các ORM và các phương thức mở rộng. Trong hầu hết các trường hợp, logic sắp xếp sẽ đơn giản như myList.OrderBy(x => x.CreationDate)- thực sự không cần phải giới thiệu bất kỳ lớp bổ sung không cần thiết nào chỉ để làm điều này. Để thêm vào điều này, họ sẽ làm gì nếu họ cần phân trang và sắp xếp dữ liệu? Truy vấn toàn bộ bảng, sắp xếp nó sau đó giữ những gì họ cần? Người ta chỉ có thể gọi myList.OrderBy(x => x.Date).Skip((page-1)*pageSize).Take(pageSize)và không có dữ liệu không cần thiết được lấy.
Balázs

1

Giả sử rằng bạn có trang web MVC, trang web WebForms và một ứng dụng di động.

Nếu bạn muốn sắp xếp thống nhất giữa các lớp trình bày này, thì tôi muốn nói sắp xếp bên ngoài lớp trình bày. Dịch vụ sẽ là một ứng cử viên tốt.

Nếu không, tôi sẽ lưu trữ logic đó trong một mô hình xem. Tại sao? Bởi vì nó sẽ có thể tái sử dụng và dễ dàng kiểm tra.


0

Trong số ba bạn đã liệt kê, tôi sẽ nói rằng nó thuộc về bộ điều khiển. Mặc dù vậy, tôi thực sự không thích đặt loại logic này trong bộ điều khiển. Tôi thường tạo một lớp dịch vụ mà bộ điều khiển giao tiếp với nó sẽ chịu trách nhiệm giao tiếp với kho lưu trữ dữ liệu và xử lý logic sắp xếp. Đối với các ứng dụng nhỏ, mặc dù trong bộ điều khiển là tốt.


2
Điều đó sẽ đặt logic nhiều hơn về phía mô hình, đúng không?
Ryan Kohn

Vâng, sự hiểu biết của tôi về "lớp dịch vụ" là nó là một phần của mô hình.
Marvo

0

Đây là một câu hỏi được đặt ra với asp.net trong đầu, nhưng vì ai đó đã đề cập đến Rails, tôi nghĩ sẽ rất thú vị khi xem xét vấn đề trong bối cảnh đó. Trong Rails, việc thực hiện sắp xếp cùng với việc truy xuất dưới dạng hành động của bộ điều khiển là điều tự nhiên và khá phổ biến, vì khung và các quy định api ActiveRecord / ActiveQuery cho nó. Mặt khác, có thể định nghĩa một số thứ tự sắp xếp tùy chỉnh cho các mục tĩnh và đưa nó vào mô hình được sử dụng bởi bộ điều khiển, do đó mô hình có thể đóng một phần trong logic sắp xếp mặc dù nó không thực hiện Các hoạt động trực tiếp. Dù đó là gì đi nữa, có thể an toàn khi nói rằng việc đưa logic sắp xếp vào chế độ xem thường bị cau mày.

Tôi hơi buồn vì một số câu trả lời hoàn toàn chống lại việc sắp xếp vào bộ điều khiển hoặc mô hình và tôi thấy chúng quá khoa trương theo sở thích của tôi, nhưng tôi cho rằng nó phụ thuộc vào bản chất của khung được sử dụng và các quy ước thông thường liên quan đến nó Tôi cũng đồng ý với nhận xét của Bill K rằng việc tách biệt ngay từ đầu là quan trọng hơn.

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.