2011-07-21 31 views
11

Breaking a large rails app into smaller apps?Làm cách nào để tôi có thể triển khai Modularization trong ứng dụng Rails?

Modularizing Rails applications

Best practice for structuring a 'large' Rails app

Tôi có một câu hỏi nhanh chóng trên mô-đun hóa trong một Ruby on Rails lớn App.

Thiết lập:

Tôi đang tạo ứng dụng cốt lõi lưu trữ thông tin về mọi người. Tôi cũng có một số 'mô-đun' sử dụng thông tin đó theo những cách rất khác nhau. (ví dụ: người ta có thể hiển thị thông tin về con người, người khác có thể tìm ra các kết nối và sự tương đồng giữa chúng, v.v.).

Câu hỏi:

Làm cách nào để mô đun hóa ứng dụng này hiệu quả?

Đáp tiềm năng:

Kể từ khi mô hình module chia sẻ và quan điểm với ứng dụng cốt lõi (và eachother) nó có ý nghĩa đối với tôi để kết hợp chúng thành một ứng dụng. Tuy nhiên, khi ứng dụng phát triển điều này rõ ràng sẽ dẫn đến các vấn đề. Điều này cho tôi đề nghị hoặc Namespacing bộ điều khiển và mô hình "How to organize controller in moderately large Rails application?" hoặc sử dụng động cơ "Modularizing Rails applications".

Vì các mô-đun đang trong quá trình phát triển tích cực, rất hữu ích khi sử dụng các trình tạo đường ray trên chúng, điều này dường như làm cho việc sử dụng Động cơ bị đau ở mông. Nó cũng có vẻ như trong khi động cơ được hỗ trợ đầy đủ từ một điểm Rails xem, họ vẫn có vẻ khá hacky liên quan đến thiếu hỗ trợ máy phát điện và di chuyển cơ sở dữ liệu. Có ai có kinh nghiệm với các công cụ phát triển thành công không? Có vẻ như động cơ sẽ là giải pháp tuyệt vời nếu bạn có ứng dụng đang hoạt động và muốn chuyển nó thành plugin (tức là mã sao chép) nhưng nếu bạn đang tích cực phát triển (thay đổi mô hình v.v.) thì sẽ rất khó.

Điều cuối cùng tôi đã thấy xung quanh là sử dụng nhiều ứng dụng và một cơ sở dữ liệu. Bằng cách này có vẻ như một nỗi đau hoàng gia với di cư và giữ mô hình thẳng vv vv Nhưng tôi nghĩ rằng tôi sẽ nhận được suy nghĩ về điều đó là tốt.

+0

Cách liên kết tốt với câu hỏi SO - không biết nó tồn tại! – Zabba

+1

"Tôi đang xây dựng một ứng dụng cốt lõi lưu trữ thông tin về [bất cứ điều gì]. Tôi cũng có một số 'mô-đun' sử dụng thông tin đó theo những cách rất khác nhau." Điều này có thể mô tả chỉ là về mọi ứng dụng đường ray từng được xây dựng! :-) Bạn có thể cụ thể hơn về các trình điều khiển của bạn? Ít nhất hãy cho chúng tôi biết bạn sẽ có bao nhiêu thực thể. – Rob

Trả lời

0
  • Một ứng dụng, một cơ sở dữ liệu.
  • Chia sẻ mô hình giữa các mô-đun.
  • Không gian tên bộ điều khiển và chế độ xem của bạn.
  • Kiểm tra.
1
0

Bạn cũng có thể sử dụng Rack Middleware để xử lý các nhiệm vụ cụ thể.

Đối với phần lớn ứng dụng của bạn, Công cụ dường như là giải pháp tốt nhất - đó là điều mà tôi đang xem xét. Có vẻ như bạn có thể define generators trong Engine dễ dàng đủ.

0

Tùy thuộc vào cấu trúc của dữ liệu và mẫu truy cập, có thể hữu ích khi tách ứng dụng thành nhiều ứng dụng và có thể cung cấp truy cập dữ liệu bằng API (RESTful).

Theo kinh nghiệm của tôi, điều này cho phép các cấu trúc tốt nhất khi ứng dụng của bạn phát triển từ kích thước trung bình đến lớn, và buộc bạn phải suy nghĩ về cấu trúc và sự phân tách mối quan tâm. Mở rộng quy mô cũng thường dễ dàng hơn.

1

Tôi sẽ không sử dụng động cơ. Động cơ được sử dụng để chia sẻ chức năng giữa các ứng dụng. Những gì bạn muốn làm không phải là để chia sẻ chức năng nhưng để tổ chức nó.

Để sắp xếp mã, bạn có thể thực hiện nhiều việc.

  • Sử dụng không gian tên.
  • Giữ bộ điều khiển của bạn mỏng.
  • Giữ cho các kiểu máy của bạn mỏng (Có, các kiểu máy của bạn; xem dấu đầu dòng tiếp theo)
  • Sử dụng mẫu Tương tác Ngữ cảnh Dữ liệu (DCI).
  • Sử dụng khung công cụ tiện ích như Apotomo hoặc Ô.
  • Viết kiểm tra để bạn có thể cấu trúc lại.
  • Hãy xem xét một kiến ​​trúc hướng dịch vụ (xem xét thiết kế Hypermedia API) nếu khả năng đáp ứng của ứng dụng của bạn tăng quá nhiều.

Andrzej có các bài viết rất hay về DCI.

http://andrzejonsoftware.blogspot.com/2011/08/dci-patterns-how-to-write-dci-contexts.html

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