Design Patterns 101.
Mẫu là để lưu trữ dữ liệu (thường là cơ sở dữ liệu được hỗ trợ).
Xem để trình bày dữ liệu (không thao tác).
Bộ điều khiển là để thao tác mô hình và chuyển cho mô hình đó (chọn ngôn ngữ phù hợp ví dụ sẽ đến đây).
MVC không nhất thiết có nghĩa là bạn có 3 lớp riêng biệt, nhưng đúng hơn là 3 thành phần hoặc lớp. Đây là trừu tượng và không nhất thiết phải gắn liền với một lớp vật lý. Bên trong lớp điều khiển của bạn, có thể bao gồm bất kỳ số lượng lớp trợ giúp hoặc bất kỳ lớp nào.
Tôi đồng ý với một phần của những gì cartoonfox đang nói, mọi thứ được đan xen với nhau. Ví dụ: nếu bạn phát triển chế độ xem cho giỏ hàng nhưng mô hình có chứa thông tin sinh nhật thì mô hình sẽ không hoạt động. Nó chỉ đơn giản là một mẫu thiết kế để giúp loại bỏ sự trùng lặp của nỗ lực. Khi bạn có ít biến hơn và ít nhiễu hơn, sẽ dễ dàng hơn nhiều để tập trung vào những gì cần phải được thực hiện và hiểu nó rất tốt.
Tôi đã thảo luận với nhóm của chúng tôi về cách sử dụng chú thích để hiển thị biểu mẫu trên trang web. Các chú thích này được đặt trong lớp mô hình hoặc thực thể.Bạn sẽ thường xuyên làm việc trực tiếp với các lớp thực thể, do đó, nó loại bỏ khá nhiều phí tổn và sao chép nỗ lực nếu bạn đặt chú thích của mình ở đây. Bởi vì chú thích của bạn được đặt trực tiếp trên lớp mô hình, bạn không thể kết thúc với một cái nhìn cho thông tin sinh nhật, nó chỉ là không thể. Ngoài ra, bằng cách làm theo các mẫu, bạn loại bỏ rác mà không thêm giá trị cho kết quả cuối cùng. Bạn chỉ cần viết logic nghiệp vụ và gần như không có gì khác.
Mặc dù chú thích nằm trong cùng một lớp với lớp mô hình, lớp trình bày hoặc chế độ xem bao gồm các chú thích và lớp trợ giúp. Nó không nhất thiết phải là các lớp hoặc ranh giới riêng biệt.
Ví dụ khác sẽ là. Tôi đã làm việc trên một số "ứng dụng" web PHP trong quá khứ. Tôi sử dụng các ứng dụng vì chúng là một khối mã nguyên khối, ít nhiều là một phương pháp chính duy nhất với tất cả logic trong đó (mà hầu như không phải là một ứng dụng chức năng).
Nếu bạn không trừu tượng mã thành các hàm và chỉ cần sử dụng một phương thức duy nhất, bạn sẽ kết thúc với rất nhiều nỗ lực sao chép. Nếu bạn cố gắng hiểu rằng khối mã nguyên khối, bạn sẽ gặp rắc rối (như tôi, thật khó để biết chuyện gì đang xảy ra, sau đó tôi sẽ tìm một khối mã tương tự ở một nơi khác và bị chết lặng tại sao một vài điều đã được tinh chỉnh theo cách của chúng).
Có thể thực hiện theo bất kỳ cách nào bạn muốn, nhưng các mẫu thiết kế như MVC giúp bạn đơn giản hóa những gì bạn viết để làm việc cũng như dễ dàng quấn đầu xung quanh giải pháp. Một mẫu thiết kế hay cách tiếp cận phổ biến khác là phân chia và chinh phục.
Để trả lời câu hỏi ban đầu của bạn:
Trong Java, dữ liệu cục bộ sẽ được thực hiện một cách minh bạch bởi ứng dụng. Ví dụ, nếu bạn muốn hỗ trợ locale tiếng Anh Mỹ, bạn sẽ tạo ra một tập tin thuộc tính:
messages_en-US.properties
và sau đó đặt tất cả nội dung tiếng Anh Mỹ của mình trong đó. Tùy thuộc vào bao nhiêu nội dung này có thể được, bạn có thể muốn sử dụng một cách tiếp cận khác nhau.
Đối với đơn đăng ký của tôi, tôi có toàn bộ các trang bằng một ngôn ngữ khác nên tôi làm như vậy. Bộ điều khiển của tôi xác định vị trí của máy khách hoặc kết hợp tốt nhất. Sau đó, nó sẽ chọn chế độ xem nào để hiển thị và chuyển mô hình (dữ liệu) cho chế độ xem.
Nếu bạn cần định dạng động cho ngày/giờ của mình, thì trình điều khiển của bạn chịu trách nhiệm xác định loại nào sẽ được sử dụng. Sau đó, chế độ xem của bạn chịu trách nhiệm về việc sử dụng trình chuyển đổi đó để định dạng giá trị.
Tôi đang sử dụng JBoss Seam để mẫu thiết kế MVC vẫn được sử dụng, nhưng trừu tượng hơn. Tôi không có 'bộ điều khiển' thực sự, mà là một kẻ đánh chặn chịu trách nhiệm xử lý một phần chức năng cụ thể (xác định miền địa phương của khách hàng, sau đó một miền khác cho tùy chọn ngày/giờ của họ). Các bộ điều khiển của tôi tương đương với một bộ điều khiển Spring là các thành phần hành động chịu trách nhiệm xử lý các hành động trang.
Walter
Điều đó dường như phá vỡ khái niệm MVC khi chế độ xem của bạn thực sự sử dụng "Dịch vụ bản địa hóa" tức là hoạt động như bộ điều khiển. –
LocalisationHelper không phải là một dịch vụ, nó sẽ chỉ là một trình định dạng để làm cho trình xem mã của bạn. Nó chỉ đơn giản là định dạng dữ liệu mà Controller của bạn đang cung cấp cho View của bạn. – JonoW
@JonoW Tôi không thể đồng ý với bạn, bởi vì LocalisationHelper biết về phiên người dùng. Nó có nghĩa là nó là nhà nước - vì vậy nó không chỉ là một người trợ giúp tĩnh mà là một dịch vụ thực sự. Nếu không, bạn nên cung cấp nó với tham số Locale. –