Drools - Viết Quy tắc

Nếu bạn thấy quy tắc mặc định được viết trong dự án Hello World (Sample.drl), có rất nhiều từ khóa được sử dụng mà chúng tôi sẽ giải thích ngay bây giờ.

Sample.drl

  • Package- Mọi Quy tắc bắt đầu bằng một tên gói. Gói hoạt động như một không gian tên cho các Quy tắc. Tên quy tắc trong một gói phải là duy nhất. Các gói trong Quy tắc tương tự như các gói trong Java.

  • Import statement- Bất kỳ sự kiện nào bạn muốn áp dụng quy tắc, những dữ kiện đó cần phải được nhập. Ví dụ: com.sample.DroolsTest.Message; trong ví dụ trên.

  • Rule Definition- Nó bao gồm Tên quy tắc, điều kiện và Hệ quả. Từ khóa Drools làrule, when, then,end. Trong ví dụ trên, tên quy tắc là “Hello World” và “GoodBye”. Cácwhen một phần là điều kiện trong cả quy tắc và thenmột phần là hệ quả. Trong thuật ngữ quy tắc,when một phần còn được gọi là LHS (bên tay trái) và then một phần như RHS (phía bên phải) của quy tắc.

Bây giờ chúng ta hãy xem qua các thuật ngữ được sử dụng trong tệp Java được sử dụng để tải Drools và thực thi các quy tắc.

Kiến thức cơ bản

Cơ sở tri thức là một giao diện quản lý tập hợp các quy tắc, quy trình và các kiểu nội bộ. Nó được chứa bên trong góiorg.drools.KnowledgeBase. Trong Drools, chúng thường được gọi làknowledge definitions hoặc là knowledge. Các định nghĩa kiến ​​thức được nhóm thànhknowledge packages. Định nghĩa kiến ​​thức có thể được thêm hoặc bớt. Mục đích chính của Cơ sở tri thức là lưu trữ và tái sử dụng chúng vì việc tạo ra chúng rất tốn kém. Cơ sở kiến ​​thức cung cấp các phương pháp để tạo phiên kiến ​​thức.

Phiên kiến ​​thức

Phiên kiến ​​thức được truy xuất từ ​​cơ sở kiến ​​thức. Đây là giao diện chính để tương tác với Drools Engine. Phiên kiến ​​thức có thể có hai loại -

  • Phiên kiến ​​thức không trạng thái

  • Phiên kiến ​​thức trạng thái

Phiên kiến ​​thức không trạng thái

Phiên kiến ​​thức không trạng thái là phiên không trạng thái tạo thành trường hợp sử dụng đơn giản nhất, không sử dụng suy luận. Một phiên không trạng thái có thể được gọi giống như một hàm, truyền cho nó một số dữ liệu và sau đó nhận lại một số kết quả. Các ví dụ phổ biến về phiên không trạng thái bao gồm:

  • Validation

    • Người này có đủ điều kiện để thế chấp không?

  • Calculation

    • Tính phí bảo hiểm thế chấp.

  • Routing and Filtering

    • Lọc các tin nhắn đến, chẳng hạn như email, vào các thư mục.

    • Gửi tin nhắn đến một điểm đến

Phiên kiến ​​thức trạng thái

Phiên trạng thái tồn tại lâu hơn và cho phép thay đổi lặp đi lặp lại theo thời gian. Một số trường hợp sử dụng phổ biến cho các phiên trạng thái bao gồm:

  • Monitoring

    • Giám sát và phân tích thị trường chứng khoán để mua bán tự động.

  • Diagnostics

    • Phát hiện lỗi, chẩn đoán y tế

  • Logistics

    • Theo dõi bưu kiện và cung cấp giao hàng

Người xây dựng kiến ​​thức

Giao diện KnoledgeBuilder chịu trách nhiệm xây dựng một Gói kiến ​​thức từ các định nghĩa kiến ​​thức (quy tắc, quy trình, kiểu). Nó được chứa bên trong góiorg.drools.builder.KnowledgeBuilder. Các định nghĩa kiến ​​thức có thể ở nhiều dạng khác nhau. Nếu có bất kỳ sự cố nào xảy ra với việc xây dựng, KnowledgeBuilder sẽ báo cáo lỗi thông qua hai phương pháp sau:hasErrorsgetError.

Sơ đồ sau giải thích quy trình

Trong ví dụ trên, vì chúng tôi đang lấy một ví dụ đơn giản về phiên kiến ​​thức không trạng thái, chúng tôi đã chèn dữ kiện vào phiên và sau đó phương thức fireAllRules () được gọi và bạn thấy đầu ra.

Trong trường hợp phiên kiến ​​thức trạng thái, khi các quy tắc được kích hoạt, đối tượng phiên kiến ​​thức trạng thái phải gọi phương thức dispose() để giải phóng phiên và tránh rò rỉ bộ nhớ.