5

Tôi đã đọc cuốn sách "SQL Antipatterns: Tránh những cạm bẫy của lập trình cơ sở dữ liệu" đặc biệt là xung quanh các hạt đậu thần chống mẫu. Trong nó cho thấy một biểu đồ tách các trình phân phối bằng cách sử dụng một mô hình miền và có ví dụ trong PHP, nhưng không phải là Rails, nó đề cập đến điều này như là sự tổng hợp HAS-A giữa các mô hình miền và khung nhìn/bộ điều khiển và thành phần HAS-A giữa các mô hình miền và các bộ chuyển đổi (I giả sử đây là UML nói). Trong Rails nó có vẻ là nơi phổ biến để làm cho các mô hình chất béo bộ điều khiển mỏng bằng cách sử dụng phương pháp mô hình, các phương pháp này có thể thao tác các mô hình liên quan khác để chỉ có một mô hình có thể được sử dụng trong bất kỳ bộ điều khiển nhất định. Tuy nhiên, tôi tự hỏi nếu có một thực tế trong đó bao gồm tổng tách trong Rails?Rails Domain mô hình tách Activerecord

Tức là, để tạo mô hình không hoạt động hoặc lớp khác được sử dụng làm mô hình miền hoạt động như một lớp giữa bộ điều khiển và đối tượng activerecord (do đó các bản đồ được ánh xạ tới bảng) cần phải biết bất cứ điều gì về cơ sở dữ liệu bên dưới và cấu trúc của nó. Nó cũng cung cấp cho các tùy chọn để di chuyển ra khỏi các phương pháp CRUD mà không giải thích các yêu cầu ứng dụng mà họ áp dụng, một lời chỉ trích trong cuốn sách.

Trả lời

4

Nhận xét của tôi đến từ việc sử dụng DDD cùng với ASP.NET MVC. Cách tiếp cận được đề xuất cho bộ điều khiển ràng buộc đối với thực thể tên miền là thông qua các mô hình chế độ xem, được DTOs được định hướng cụ thể về hướng ràng buộc với một chế độ xem cụ thể. Mô hình khung nhìn cung cấp một bộ đệm cần thiết giữa các cơ chế ràng buộc và mô hình miền. Thông thường, một lần xem có thể là một thành phần của nhiều thực thể miền hoặc thậm chí là các đối tượng báo cáo và do đó không tương ứng trực tiếp với bất kỳ thực thể tên miền cụ thể nào. Việc có các thuộc tính được yêu cầu cho một khung nhìn được khai báo trong một mô hình khung nhìn làm cho các yêu cầu dữ liệu đó rõ ràng và không dẫn đến một yêu cầu điều chỉnh mô hình miền để đáp ứng nhu cầu của một khung nhìn.

Nhược điểm của khóa học là khả năng xuất hiện của một hệ thống phân cấp hai lớp, trong đó bạn có thể có một mô hình khung nhìn tương ứng với nhiều thực thể miền của bạn. Tuy nhiên, trong thực tế, tôi thấy rằng việc duy trì cấu trúc phân cấp lớp kép dễ dàng hơn nhiều so với việc lo lắng về việc phân nhánh thay đổi thực thể miền. Hãy xem The Fallacy of ReUse.

Trong một hệ thống SOA, các đối tượng xem mô hình 'quấn' có thể không phải là thực thể miền nhưng thay vào đó DTO đại diện cho các thực thể miền đó. Điều này không vi phạm cấu trúc của các mô hình chế độ xem, vì chúng là các DTO và không có các khía cạnh hành vi, chỉ có dữ liệu. Hãy xem this bài viết thảo luận về bản chất của dữ liệu ở ranh giới ứng dụng.

Để trả lời câu hỏi của bạn, tôi tin rằng việc tạo một lớp mô hình xem sẽ thuận lợi cho ứng dụng Rails, được cung cấp tất cả các thông báo trước. Các mô hình khung nhìn sẽ được điền dữ liệu từ một đối tượng bản ghi hoạt động hoặc bất kỳ đối tượng nào khác chứa dữ liệu được trình bày, và sau đó khi người dùng nhập dữ liệu, mô hình khung nhìn sẽ cập nhật đối tượng bản ghi hoạt động hoặc thực thể mô hình miền. Mặc dù tôi sẽ tránh gọi lớp mô hình khung nhìn này là một mô hình miền.

+0

Cảm ơn điều này đã chỉ cho tôi theo hướng của luồng stackoverflow này http://stackoverflow.com/questions/2521522/are-view-models-used-in-rails và sau đó lần lượt Jay Fields đã thực hiện một số công việc trên các trình bày pattens trình bày tại RailsConfEU 07 http://blog.jayfields.com/2007/09/railsconf-europe-07-presenter-links.html –

+0

... Tôi nghĩ rằng nó là một quăng lên giữa một mô hình trình bày hoặc di chuyển các sáng tạo liên quan và logic khác với mô hình Jamis Bucks quay trên mô hình chất béo điều khiển mỏng mà dường như là tiêu chuẩn trong thế giới đường ray. Tôi thực sự thích mẫu trình bày hơn, tôi nghĩ rằng nó có thể tạo ra mã sạch hơn. Tôi cũng thấy rằng có một cuốn sách "Advanced Rails Recipes" có chứa Jay Fields thực hiện các mẫu trình bày, tôi sẽ xem liệu tôi có thể tìm và mượn một bản sao từ thư viện hay không. Tôi hy vọng rằng ai đó đã mở rộng các máy phát điện Rails dựa trên công việc này. –

5

Bạn có thể thấy ứng dụng dựa trên Rails này hữu ích: https://github.com/qertoip/guru_watch - nó nhằm mục đích cho thấy cách tách khỏi ActiveRecord theo cách được khuyến nghị bởi Robert C. Martin. Nó được gọi là Kiến trúc theo trường hợp sử dụng hoặc mô hình Đối tượng-Điều khiển-Ranh giới.

Các vấn đề liên quan