2012-06-16 39 views
9

Im thiết kế một ứng dụng quản lý việc thuê nhiều thiết bị khác nhau. Và tôi tự hỏi whats cách tốt nhất để thiết kế các mô hình cho các ứng dụng. phần mềm của tôi có để quản lý rất nhiều loại khác nhau của thiết bị (với các loại dữ liệu) ví dụ:Đường ray cho nhiều loại sản phẩm giỏ mua hàng

Speaker 
    Make - String 
    Model - String  
    Wattage - Integer 
    Price - Decimal 

Light 
    Make - String 
    Model - String  
    Wattage - Integer 
    Price - Decimal 

Microphone 
    Make - String 
    Model - String 
    Use - Choice of: Instrumental, Vocal, Versatile 
    Price - Decimal 

Cable 
    Length - Decimal 
    Connector 1 - String 
    Connector 2 - String 
    Price - Decimal 

Stand 
    Type - Choice of: Microphone, Speaker 
    Height - Decimal 
    Boom - Boolean 
    Price - Decimal 

cách tôi đã nghĩ về việc thiết kế:

  • Một mô hình riêng cho từng loại sản phẩm sau đó một liên kết đa hình trong giỏ hàng để nó có thể xử lý tất cả các loại thiết bị.
  • Một mô hình sản phẩm duy nhất có các trường cho tất cả các loại thiết bị có trường loại có thể được kiểm tra khi nào sản phẩm được sử dụng.
  • Mô hình sản phẩm có thuộc tính giá thì mỗi loại sản phẩm mở rộng mô hình đó.

Nhưng cách tốt nhất trong đường ray để xử lý các loại sản phẩm khác nhau này là gì?

+0

tùy chọn thứ ba có vẻ giống như mẫu chiến lược, bạn có thể đi xa đến mức mở rộng mô hình cơ sở bằng PORO –

Trả lời

3

Các Thuộc tính động viên ngọc nên cho phép bạn làm điều này tự động:

https://github.com/moiristo/dynamic_attributes

Có thể có đá quý tốt hơn mà làm những gì bạn cần, nhưng đây là lần đầu tiên tôi được tìm thấy.

Nếu bạn đang sử dụng Postgres làm cơ sở dữ liệu của mình, thì bạn có thể sử dụng hstore. Có đá quý để làm việc với hstore. Nếu bạn có thể đủ khả năng, hãy đăng ký để railscast và xem screencast về việc triển khai hstore.

Activerecord-postgres-hstore dường như là công cụ để giải quyết vấn đề này.

+0

HStore có vẻ tuyệt vời, tôi chỉ đang thử một số mã xung quanh và có vẻ như là một cách tuyệt vời để thực hiện những gì tôi cần làm. – Dean

1

Một tùy chọn khác là tạo bảng thuộc tính sản phẩm và xây dựng từng loại sản phẩm trên giao diện quản trị thay vì ở mã cấp thấp. Bằng cách đó bạn sẽ không cần phải thay đổi ứng dụng te để bán sản phẩm mới.

+0

Bạn có thể giải thích ý của mình là không rõ ràng. – Dean

0

Cách tiếp cận thứ ba là khá gần đúng. Bạn chắc chắn sẽ muốn trừu tượng hóa tất cả các thông số chung cho các mục (chẳng hạn như ID cửa hàng và, như bạn đã đề cập, giá) vào mô hình cơ sở mà mọi mục khác sẽ mở rộng. Sau đó, như bạn đã đề cập trong giải pháp được đề xuất đầu tiên của mình, bạn sẽ có tham chiếu giữa phần còn lại của các lớp mục khi cần, sử dụng: tham chiếu.

Đối với "loại" và "sử dụng", có thể bạn sẽ sử dụng tốt nhất mối quan hệ 1-1 với mô hình gốc. Sau đó, lưu trữ danh sách các loại trường có thể có cho mỗi mô hình (ví dụ: đối với Stand, chẳng hạn như possible_uses = "Microphone, Speaker"). Cuối cùng, thực hiện xác thực phía máy chủ khi mô hình được khởi tạo để đảm bảo rằng nó là một kiểu hợp lệ. Bạn cũng có thể thực hiện một số hack cho phép bạn xem chắc chắn rằng MicrophoneSpeaker là hai "sử dụng" có thể có mà mã của bạn thực sự sử dụng.

Một cách hoàn toàn khác, nhưng rõ ràng hơn để thực hiện việc này là làm mọi thứ tôi đã đề cập trong đoạn đầu tiên, nhưng tiếp tục thừa kế xuống các cấp thấp hơn. Cụ thể, có Microphone mở rộng BaseItem, cung cấp cho Microphone thông số MakeModel và sau đó có các kiểu InstrumentalMicrophone, VocalMicrophone, and Đa năngMicrophone extend the Lớp micrô`. Điều này sẽ là sạch sẽ nhất và sẽ cho phép đầy đủ chức năng.

2

Cá nhân tôi đi với một Sản phẩm mô hình duy nhất và một mô hình khác được gọi là ProductAttribute.

Trong bảng này, bạn sẽ có một cột name và cột value.

Bằng cách này, bạn không bị giới hạn bởi lược đồ của mình. Sản phẩm có n product_attributes, được đặt tên động. Bạn có thể trong phần quản trị phát triển các phím tắt để nếu bạn tạo một sản phẩm micrô, nó sẽ tự động tạo các tên thuộc tính cụ thể trong bảng được nối kết. Bạn chỉ cần nhập các giá trị.

Bằng cách này, ứng dụng của bạn hoàn toàn có thể bán bất kỳ loại produts nào với bất kỳ số lượng thuộc tính nào.Không cần phải mã lại khi trong 3 tháng người quản lý sẽ muốn thêm một loại sản phẩm khác :)

Chỉnh sửa: Và tất nhiên, bạn sẽ có một mô hình ProductType để quản lý tất cả các loại sản phẩm khác nhau mà bạn có thể bán.

1

Đây là vấn đề đã gây đau đầu cho nhiều nhà cung cấp giải pháp ERP trước đây. Giải pháp thanh lịch nhất tôi sẽ đề xuất cho bạn dựa trên những gì tôi đã thấy tại một nhà cung cấp như vậy là điều này.

Bạn xác định 4 kiểu: Thiết bị, Loại thiết bị, Đặc điểm, Lựa chọn.

Sẽ có mối quan hệ nhiều-nhiều giữa Thiết bị và Đặc điểm, thông qua DeviceType. Mô hình đặc trưng có một thuộc tính được gọi là "value_type" và cũng là một thuộc tính cho từng loại giá trị mà bạn có (Chuỗi, Số nguyên, Số thập phân, Boolean). Cuối cùng, sẽ có mối quan hệ một-nhiều giữa Đặc điểm và Lựa chọn.

Đây thực sự là phiên bản được tưới nước của triển khai của nhà cung cấp phù hợp với các yêu cầu cụ thể của bạn. Việc triển khai thực tế của nhà cung cấp đó thực sự được xây dựng ở một hoặc hai mức trừu tượng phía trên những gì tôi đang hiển thị cho bạn, để làm cho giải pháp chung chung hơn. Nhưng những người này nổi tiếng với những thứ quá kỹ thuật.

HTH.

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