2013-08-21 36 views
11

Tôi đã đánh giá Drools là một Công cụ quy tắc để sử dụng trong Ứng dụng web doanh nghiệp của chúng tôi.Quy tắc điều khiển dữ liệu Engine - Drools

Trường hợp sử dụng của tôi là Đơn đăng ký quản lý đơn đặt hàng.
Và các quy tắc có loại sau:
- Nếu loại người dùng là "ĐẶC BIỆT", hãy giảm thêm 5%.
- Nếu người dùng đã thực hiện hơn 10 lần mua hàng, hãy giảm thêm 3%.
- Nếu Danh mục sản phẩm là "OLD", hãy tặng Gift Hamper cho người dùng trị giá $ 5.
- Nếu Danh mục sản phẩm là "MỚI", đưa ra một Hamper quà tặng cho người sử dụng trị giá $ 1
- Nếu tài khoản đã mua hơn 1000 $ trong quá khứ, Vận chuyển là miễn phí

Thách thức trước mắt tôi thấy là rằng:
- Không có giao diện người dùng có ý nghĩa mà tôi có thể cung cấp cho người dùng cuối để sửa đổi các quy tắc.
- Guvnor UI hoặc bất kỳ Editor để chỉnh sửa file DRL chỉ là không thể chấp nhận được từ người dùng cuối điểm - Hầu hết các Quy tắc này sẽ hoạt động trên dữ liệu thường khổng lồ có sẵn trong db

Vì vậy,
- Tôi muốn một cách để người dùng quản trị chỉ định các Quy tắc này từ bên trong giao diện người dùng ứng dụng web của tôi.
- Tôi có thể lưu trữ các "Quy tắc" này trong cơ sở dữ liệu và sau đó hoạt động trên chúng thông qua Drools - ít nhất điều đó cho phép tôi "sửa đổi" các Quy tắc này thông qua giao diện người dùng "của riêng tôi". Vì vậy, đây là một cái gì đó giống như một bảng quyết định trong DB.
- Cách tốt nhất để giải quyết vấn đề này là gì?

Trả lời

0

Nói chung, tôi thấy dễ dàng hơn khi làm việc ở mức trừu tượng hơn, chẳng hạn như Mô hình miền và có một số loại chuyển đổi có lập trình từ quy tắc đó sang quy tắc Drools thay vì xử lý trực tiếp quy tắc Drools. Bằng cách đó, bạn có thể lưu trữ Mô hình miền của mình theo bất kỳ cách nào bạn thích và bạn có thể xây dựng giao diện người dùng xung quanh mô hình đó, v.v. và vẫn có tùy chọn tạo quy tắc Drools theo yêu cầu. Sau đó, thử thách với điều này là tạo ra một sự chuyển đổi có lập trình từ mô hình của bạn thành các quy tắc Drools, nhưng các công cụ tạo khuôn mẫu sẽ giúp ích ở đây. Tôi đã sử dụng Groovy templating cho điều này, và nó đã làm việc tốt.

+0

kevinpeterson> Cảm ơn bạn đã nhập, nhưng tại sao lại bận tâm chuyển đổi các quy tắc miền của bạn thành drl (drools)? lợi thế là gì, chúng tôi có thể giải thích các quy tắc miền có thể dễ dàng từ bên trong ứng dụng web. Sau đó, về cơ bản nó xuống đến - Tại sao Drools. Tôi không có kinh nghiệm trong những lĩnh vực này, do đó những câu hỏi này. – Jasper

5

Bạn đã yêu cầu tôi trả lời câu hỏi của bạn, đưa ra câu trả lời cho Data driven business rules. Câu trả lời của tôi cho câu hỏi đó là SQL là một giải pháp tồi để thực hiện thực hiện các quy tắc kinh doanh được lưu trữ trong cơ sở dữ liệu. Người hỏi câu hỏi đó muốn tạo ra các biểu thức SQL từ các quy tắc nghiệp vụ được lưu trữ của họ, và tôi đã cảnh báo không làm điều đó, bởi vì nó sẽ dẫn đến các vấn đề về an ninh, kiểm thử, hiệu năng và bảo trì.

Tôi chưa sử dụng Drools, nhưng tôi thu thập từ tài liệu bao gồm Guvnor, người quản lý quy tắc nghiệp vụ hỗ trợ sử dụng RDBMS làm kho lưu trữ cho quy tắc do người dùng xác định.

[Drools] Guvnor sử dụng tiêu chuẩn JCR để lưu trữ nội dung như quy tắc. Việc triển khai mặc định là Apache Jackrabbit, http://jackrabbit.apache.org. Điều này bao gồm một cơ chế/cơ sở dữ liệu lưu trữ trên hộp, bạn có thể sử dụng hoặc cấu hình để sử dụng RDBMS hiện có nếu cần.(http://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html/chap-database_configuration.html)

Apache Jackrabbit không phải là một RDBMS, nó là "một kho lưu trữ nội dung là một cửa hàng nội dung thứ bậc với sự hỗ trợ cho nội dung cấu trúc và phi cấu trúc, tìm kiếm văn bản đầy đủ, phiên bản, giao dịch, quan sát, và nhiều hơn nữa." Điều này có vẻ giống như một kho lưu trữ thích hợp hơn cho Drools.

Nhưng Drools không nói nó cố gắng sử dụng SQL để thực thi các quy tắc kinh doanh đó. Nó có một thành phần riêng biệt, Drools Expert (Công cụ Quy tắc) để thực hiện điều đó.

Drools Expert là môi trường mã hóa dựa trên quy tắc, khai báo. Điều này cho phép bạn tập trung vào "những gì nó là bạn muốn làm", và không phải là "làm thế nào để làm điều này". (http://www.jboss.org/drools/drools-expert.html)

SQL cũng là ngôn ngữ lập trình khai báo, nhưng nó được thiết kế để thực hiện các thao tác quan hệ trên dữ liệu có cấu trúc bảng. Một ngôn ngữ để thực hiện một công cụ quy tắc có các mục tiêu khác nhau và có thể làm những việc mà SQL không thể (và ngược lại). Vì vậy, tôi sẽ đề nghị nếu bạn sử dụng Drools, vui lòng sử dụng RDBMS như một kho lưu trữ khi họ ghi lại (sử dụng triển khai kho lưu trữ nội dung tuân thủ JCR của họ, không cố gắng thiết kế của riêng bạn). Sau đó, sử dụng Drools Expert của họ như là một ngôn ngữ chuyên ngành được thiết kế để thực hiện các quy tắc.

+2

Tôi đồng ý rằng thực hiện logic nghiệp vụ với SQL là một ý tưởng rất xấu, nhưng lưu trữ các quy tắc nghiệp vụ trong cơ sở dữ liệu, sau đó sẽ được xử lý và thực hiện trong "công cụ quy tắc" không phải là một ý tưởng tồi. Trên thực tế, tôi đã xây dựng một "bộ cấu hình" dựa trên hóa đơn dựa trên hóa đơn, sử dụng các hóa đơn làm quy tắc kinh doanh ảnh hưởng đến các phần có thể được kết hợp để tạo ra các sản phẩm tùy chỉnh. Các quy tắc được đánh giá bởi một công cụ dựa trên JavaScript, nhưng được duy trì trong các hóa đơn. –

4
  • Không có giao diện người dùng có ý nghĩa mà tôi có thể cung cấp cho người dùng cuối để sửa đổi các quy tắc.

Ra khỏi hộp, Guvnor cung cấp web based decision tables (và Excel if you prefer), như bạn nói bạn muốn cung cấp. Nó cung cấp guided editors cho các quy tắc phức tạp hơn, nhưng các quy tắc của bạn có vẻ rất đơn giản.

  • Guvnor UI hoặc bất kỳ Editor để chỉnh sửa file DRL chỉ là không thể chấp nhận được từ người dùng cuối điểm

Như đã đề cập, Guvnor hỗ trợ bảng quyết định. Nếu bạn không thích cách bố trí của ứng dụng web Guvnor, thì bạn chỉ có thể embed the Guvnor editors vào ứng dụng web của riêng mình.

  • Hầu hết các Quy tắc này sẽ hoạt động trên dữ liệu thường khổng lồ có sẵn trong db

Kích thước của cơ sở dữ liệu của bạn là không liên quan đến việc sử dụng các Guvnor. Guvnor là để chỉnh sửa các quy tắc, không phải đánh giá thời gian chạy. Drools Expert là công cụ quy tắc thời gian chạy. Nhanh quá. Nó có thể xử lý khối lượng dữ liệu rất lớn và khối lượng quy tắc rất lớn. Tất cả những gì bạn cần làm là viết các truy vấn cơ sở dữ liệu để nhận các phần dữ liệu có liên quan vào công cụ quy tắc khi chạy. Bạn cần phải làm điều đó, bất cứ giải pháp nào bạn cố gắng thực hiện. Trên một mặt lưu ý, nếu những gì bạn đang thực sự sau là một lời giải thích khi các công cụ quy tắc là tốt (và xấu) các giải pháp cho một vấn đề, sau đó tôi khuyên bạn nên đọc phần Why use a Rule engine? của hướng dẫn sử dụng Drools Expert.

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