Kapan sebaiknya Anda TIDAK menggunakan Mesin Aturan? [Tutup]

108

Saya memiliki daftar keuntungan menggunakan Rules Engine, serta beberapa alasan untuk menggunakannya, yang saya butuhkan adalah daftar alasan mengapa Anda TIDAK boleh menggunakan Rules Engine

Yang terbaik yang saya miliki sejauh ini:

Mesin aturan tidak benar-benar dimaksudkan untuk menangani alur kerja atau eksekusi proses, juga bukan mesin alur kerja atau alat manajemen proses yang dirancang untuk melakukan aturan.

Adakah alasan besar lainnya mengapa Anda tidak boleh menggunakannya?

BlackTigerX
sumber

Jawaban:

34

Saya menjadi sangat gugup saat melihat orang menggunakan kumpulan aturan yang sangat besar (misalnya, pada urutan ribuan aturan dalam satu kumpulan aturan). Ini sering terjadi ketika mesin aturan adalah tunggal yang duduk di tengah perusahaan dengan harapan menjaga aturan KERING akan membuatnya dapat diakses oleh banyak aplikasi yang memerlukannya. Saya akan menantang siapa pun untuk memberi tahu saya bahwa mesin aturan Rete dengan banyak aturan itu dipahami dengan baik. Saya tidak mengetahui adanya alat yang dapat memeriksa untuk memastikan bahwa konflik tidak ada.

Saya pikir kumpulan aturan partisi agar tetap kecil adalah pilihan yang lebih baik. Aspek bisa menjadi cara untuk berbagi kumpulan aturan umum di antara banyak objek.

Saya lebih suka pendekatan yang lebih sederhana dan lebih didorong data jika memungkinkan.

duffymo
sumber
1
Bukankah menentukan apakah ada konflik merupakan varian dari masalah Halting?
TMB
Tidak tahu apakah itu yang Anda sebut itu. Apa yang berubah dengan menggunakan nama itu? Tidak ada yang bisa saya lihat ...
duffymo
@ duffymo ada contoh untuk "pendekatan yang lebih didorong oleh data"?
jack.the.ripper
Tentu: Letakkan barang Anda dalam satu tabel keputusan dan kueri untuk mendapatkan jawaban yang Anda inginkan. Tidak perlu Rete rules engine.
duffymo
151

Saya akan memberikan 2 contoh dari pengalaman pribadi di mana menggunakan Mesin Aturan adalah ide yang buruk, mungkin itu akan membantu: -

  1. Pada proyek sebelumnya, saya melihat bahwa file rules (proyek menggunakan Drools) berisi banyak kode java, termasuk loop, fungsi dll. Mereka pada dasarnya adalah file java yang menyamar sebagai file rules. Ketika saya bertanya kepada arsitek tentang alasan desainnya, saya diberi tahu bahwa "Aturan tidak pernah dimaksudkan untuk dipertahankan oleh pengguna bisnis".

Pelajaran : Mereka disebut "Aturan Bisnis" karena suatu alasan, jangan gunakan aturan ketika Anda tidak dapat merancang sistem yang dapat dengan mudah dipelihara / dipahami oleh pengguna Bisnis.

  1. Kasus lain; Proyek menggunakan aturan karena persyaratan tidak didefinisikan / dipahami dengan baik dan sering berubah. Solusi tim pengembangan adalah menggunakan aturan secara ekstensif untuk menghindari penerapan kode yang sering.

Pelajaran : Persyaratan cenderung banyak berubah selama rilis awal perubahan dan tidak menjamin penggunaan aturan. Gunakan aturan ketika bisnis Anda sering berubah (bukan persyaratan). Misalnya: - Perangkat lunak yang mengatur pajak Anda akan berubah setiap tahun karena undang-undang perpajakan berubah dan penggunaan aturan adalah ide yang bagus. Rilis 1.0 aplikasi web akan sering berubah saat pengguna mengidentifikasi persyaratan baru, tetapi akan stabil seiring waktu. Jangan gunakan aturan sebagai alternatif penerapan kode. </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> orang </s>

VDev
sumber
1
Saya pikir cara yang baik untuk mengulang pelajaran # 2 Anda adalah "jangan terapkan DSL saat Anda mengetahui abstraksi yang dikandung oleh DSL kemungkinan besar akan berubah." Merancang dan menerapkan DSL adalah proses padat sumber daya yang Anda ingin tuai penghargaan di masa depan. Jika Anda harus membuat ulang DSL setiap siklus, maka mesin aturan tidak akan cocok namun sampai beberapa stabilisasi terjadi.
PENGGUNA INI MEMBUTUHKAN BANTUAN
Sebuah DSL bisa menjadi sumber daya yang berat dengan cara yang menafsirkan bahasa pemrograman yang berat tetapi mereka juga dapat diketik dan dikompilasi secara statis seperti bahasa yang dikompilasi lainnya.
Matthew Whited
19

Saya penggemar berat Business Rules Engines, karena dapat membantu Anda membuat hidup Anda lebih mudah sebagai programmer. Salah satu pengalaman pertama yang saya alami saat mengerjakan proyek Data Warehouse adalah menemukan Prosedur Tersimpan yang berisi struktur CASE rumit yang membentang di seluruh halaman. Men-debug adalah mimpi buruk, karena sangat sulit untuk memahami logika yang diterapkan dalam struktur CASE yang begitu panjang, dan untuk menentukan apakah Anda memiliki aturan yang tumpang tindih di halaman 1 kode dan aturan lain dari halaman 5. Secara keseluruhan, kami memiliki lebih dari 300 aturan seperti itu tertanam dalam kode.

Ketika kami menerima persyaratan pengembangan baru, untuk sesuatu yang disebut Tujuan Akuntansi, yang melibatkan penanganan lebih dari 3000 aturan, saya tahu ada sesuatu yang harus diubah. Saat itu saya sedang mengerjakan prototipe yang kemudian menjadi induk dari apa yang sekarang menjadi mesin Aturan Bisnis Kustom, yang mampu menangani semua operator standar SQL. Awalnya kami telah menggunakan Excel sebagai alat penulisan dan, kemudian, kami telah membuat aplikasi ASP.net yang akan memungkinkan Pengguna Bisnis untuk menentukan aturan bisnis mereka sendiri, tanpa perlu menulis kode. Sekarang sistem berfungsi dengan baik, dengan sedikit bug, dan berisi lebih dari 7000 aturan untuk menghitung Tujuan Akuntansi ini. Saya tidak berpikir skenario seperti itu akan mungkin terjadi hanya dengan hard-coding.

Namun, ada batasan untuk pendekatan seperti itu:

  • Anda perlu memiliki pengguna bisnis yang cakap yang memiliki pemahaman yang sangat baik tentang bisnis perusahaan.
  • Ada beban kerja yang signifikan dalam mencari seluruh sistem (dalam kasus kami Data Warehouse), untuk menentukan semua kondisi hard-code yang masuk akal untuk diterjemahkan ke dalam aturan yang akan ditangani oleh Business Rule Engine. Kami juga harus berhati-hati agar templat awal ini dapat sepenuhnya dipahami oleh Pengguna Bisnis.
  • Anda perlu memiliki aplikasi yang digunakan untuk pembuatan aturan, di mana algoritme untuk mendeteksi aturan bisnis yang tumpang tindih diterapkan. Jika tidak, Anda akan berakhir dengan kekacauan besar, di mana tidak ada lagi yang mengerti hasil yang mereka dapatkan. Jika Anda memiliki bug dalam komponen generik seperti Custom Business Rule Engine, akan sangat sulit untuk melakukan debug dan melibatkan pengujian ekstensif untuk memastikan bahwa hal-hal yang sebelumnya berfungsi juga berfungsi sekarang.

Rincian lebih lanjut tentang topik ini dapat ditemukan pada posting yang saya tulis: http://dwhbp.com/post/2011/10/30/Implementing-a-Business-Rule-Engine.aspx

Secara keseluruhan, keuntungan terbesar menggunakan Mesin Aturan Bisnis adalah memungkinkan pengguna untuk mengambil kembali kendali atas definisi dan penulisan Aturan Bisnis, tanpa perlu pergi ke departemen TI setiap kali mereka perlu memodifikasi sesuatu. Ini juga mengurangi beban kerja tim pengembangan TI, yang sekarang dapat fokus pada membangun barang dengan nilai lebih.

Bersulang,

Nicolae

Nicolae Guse
sumber
18

Satu poit yang saya anggap sebagai "pedang bermata dua" adalah:

menempatkan logika di tangan staf non teknis

Saya telah melihat ini bekerja dengan baik, ketika Anda memiliki satu atau dua orang jenius multidisiplin di sisi non teknis, tetapi saya juga melihat kurangnya teknik yang menyebabkan pembengkakan, lebih banyak bug, dan secara umum 4x biaya pengembangan / pemeliharaan.

Jadi, Anda perlu mempertimbangkan basis pengguna Anda dengan serius.

Robert Gould
sumber
13
Itu adalah kesalahan Anda sebagai programmer dan bukan kesalahan pengguna jika dia tidak dapat menggunakan sistem Anda atau jika dia terus-menerus mencapai hasil yang tidak dapat diprediksi dengannya, apakah itu BRE atau tidak. Saya akan mengatakan bahwa menyalahkan pengguna karena ketidakmampuan mereka untuk menggunakan kode Anda adalah jenis pemrograman yang benar-benar lebih buruk yang dapat dimiliki sebuah proyek.
Kizz
Meskipun ini adalah posting yang sangat lama tetapi saya sangat setuju. Saya pikir jika memungkinkan, orang-orang teknis (atau vendor) untuk melakukan konfigurasi untuk klien selama proses implementasi / on-boarding, dan kemudian setiap perubahan besar berdasarkan permintaan layanan.
Eric Xin Zhang
Mungkin seseorang akan terbantu membaca artikel bagus yang ditulis oleh Martin Fowler tentang DSL-s: "Apakah DSL memungkinkan pebisnis untuk menulis aturan perangkat lunak tanpa melibatkan pemrogram?" martinfowler.com/bliki/BusinessReadableDSL.html
Robert Lujo
11

Saya pikir artikel Alex Papadimoulis cukup berwawasan: http://thedailywtf.com/articles/soft_coding.aspx

Ini tidak komprehensif, tapi dia punya beberapa poin bagus.

Smashery
sumber
2
Masalahnya adalah tidak berbicara tentang mesin aturan standar yang sebenarnya, hanya tentang buatan sendiri, yang merupakan ide yang sangat buruk, saya berbicara tentang mesin aturan standar (Blaze Advisor, ILog, Drools) yang menerapkan algoritma RETE dan menyediakan keseluruhan ekosistem untuk mengelola aturan
BlackTigerX
artikel yang luar biasa dan saya pikir Anda bisa menjadi terlalu lembut dengan mesin aturan standar kadang-kadang membuat segalanya lebih kompleks
Dean Hiller
1
Bayangkan sebuah bank dengan jutaan transaksi per jam kehilangan koneksi dengan mesin aturan penghitungan biaya selama 30 menit karena pengembang mengalami depolyment, bayangkan ini adalah periode stabilitas di mana mereka memiliki banyak penerapan untuk perbaikan, berapa banyak kerugian yang akan mereka alami hanya dengan menghentikan satu layanan perdagangan saham, valuta asing, atau transfer SWIFT? Artikel ini adalah salah satu artikel terburuk tentang pemrograman secara umum
2
hragheb, dari mana 30 menit waktu henti berasal? Raksasa seperti Facebook terus-menerus menerapkan perangkat lunak baru tanpa waktu henti. Aplikasi dapat dibangun untuk mendukung pembaruan node dalam batch alih-alih menurunkan seluruh sistem.
Lauri Harpf
10

Artikel HEBAT tentang kapan tidak menggunakan aturan Mesin ... (serta kapan menggunakannya) ....

http://www.jessrules.com/guidelines.shtml

Pilihan lainnya adalah jika Anda memiliki seperangkat aturan linier yang hanya berlaku sekali dalam urutan apa pun untuk mendapatkan hasil adalah dengan membuat antarmuka yang menarik dan meminta pengembang menulis dan menerapkan aturan baru ini. Keuntungannya adalah sangat cepat karena biasanya Anda akan melewati sesi hibernasi ATAU sesi jdbc serta parameter apa pun sehingga Anda memiliki akses ke semua data aplikasi Anda tetapi dengan cara yang efisien. Dengan daftar fakta, mungkin ada banyak perulangan / pencocokan yang benar-benar dapat memperlambat sistem ..... Ini cara lain untuk menghindari mesin aturan dan dapat diterapkan secara dinamis (ya, aturan keren kami diterapkan di database dan kami tidak memiliki rekursi .... baik memenuhi aturan atau tidak). Ini hanyalah pilihan lain ..... oh dan satu lagi manfaatnya adalah tidak mempelajari sintaks aturan untuk pengembang yang masuk.

Itu sangat tergantung pada konteks Anda. Mesin aturan memiliki tempatnya dan yang di atas hanyalah opsi lain jika Anda memiliki aturan pada proyek yang mungkin ingin Anda terapkan secara dinamis untuk situasi yang sangat sederhana yang tidak memerlukan mesin aturan.

DASARNYA JANGAN menggunakan mesin aturan jika Anda memiliki kumpulan aturan sederhana dan dapat memiliki antarmuka yang asyik sebagai gantinya ..... sama seperti yang dapat diterapkan secara dinamis dan pengembang baru yang bergabung dengan tim Anda dapat mempelajarinya lebih cepat daripada bahasa drools. (Tapi itu pendapat saya)

Dean Hiller
sumber
7

Menurut pengalaman saya, mesin aturan bekerja paling baik jika yang berikut ini benar:

  1. Doktrin yang terdefinisi dengan baik untuk domain masalah Anda
  2. Data berkualitas tinggi (sebaiknya otomatis) untuk membantu mendorong sebagian besar input Anda
  3. Akses ke ahli materi pelajaran
  4. Pengembang perangkat lunak dengan pengalaman membuat sistem pakar

Jika salah satu dari empat ciri ini hilang, Anda mungkin masih menemukan mesin aturan bekerja untuk Anda, tetapi setiap kali saya mencobanya dengan bahkan 1 hilang, saya mengalami masalah.

DaveParillo
sumber
ini> _Pengembang perangkat lunak dengan pengalaman membuat sistem pakar_ <Jika Anda membaca dokumen drools dengan cermat, Anda akan menyadari bahwa aturan bisnis harus diterapkan oleh pengembang perangkat lunak yang memiliki pemahaman kuat tentang Algoritme Rete. Akses ke parameterisasi aturan dapat diberikan kepada pengguna bisnis melalui spreadsheet atau CSV. Aturan bagaimanapun juga dijelaskan oleh pengguna bisnis, tetapi diterapkan oleh, seperti yang Anda katakan, pengembang perangkat lunak dengan keahlian dalam sistem pakar. Drools docs menjelaskan ini.
Matt Friedman
1

Itu pasti awal yang bagus. Hal lain dengan mesin aturan adalah bahwa beberapa hal dipahami dengan baik, deterministik, dan lurus ke depan. Pemotongan gaji adalah (atau dulu) seperti itu. Anda dapat mengekspresikannya sebagai aturan yang akan diselesaikan oleh mesin aturan, tetapi Anda dapat mengekspresikan aturan yang sama sebagai tabel nilai yang cukup sederhana.

Jadi, mesin alur kerja bagus saat Anda mengekspresikan proses jangka panjang yang akan memiliki data yang persisten. Mesin aturan dapat melakukan hal serupa, tetapi Anda harus melakukan banyak kerumitan tambahan.

Mesin aturan bagus ketika Anda memiliki basis pengetahuan yang rumit dan perlu pencarian. Mesin aturan dapat menyelesaikan masalah yang rumit, dan dapat diadaptasi dengan cepat untuk mengubah situasi, tetapi menimbulkan banyak kerumitan pada implementasi dasar.

Banyak algoritme keputusan cukup sederhana untuk diekspresikan sebagai program berbasis tabel sederhana tanpa kerumitan yang disiratkan oleh mesin aturan nyata.

Charlie Martin
sumber
0

Saya sangat merekomendasikan mesin aturan bisnis seperti Drools sebagai open source atau Mesin Aturan Komersial seperti LiveRules.

  • Ketika Anda memiliki banyak kebijakan bisnis yang sifatnya tidak stabil, sangat sulit untuk mempertahankan bagian dari kode teknologi inti itu.
  • Mesin aturan menyediakan kerangka kerja yang sangat fleksibel serta mudah diubah dan digunakan.
  • Mesin aturan tidak boleh digunakan di mana-mana, tetapi perlu digunakan saat Anda memiliki banyak kebijakan di mana perubahan tidak bisa dihindari secara teratur.
muruga
sumber
0

Saya tidak begitu memahami beberapa poin seperti:
a) pelaku bisnis perlu memahami bisnis dengan sangat baik, atau;
b) perselisihan pebisnis tidak perlu tahu aturannya.

Bagi saya, sebagai orang yang baru menyentuh BRE, manfaat BRE disebut dengan membiarkan sistem beradaptasi dengan perubahan bisnis, oleh karena itu difokuskan pada adaptasi perubahan.
Apakah menjadi masalah jika aturan yang ditetapkan pada waktu x berbeda dengan aturan yang dibuat pada waktu y karena:
a) pelaku bisnis tidak memahami bisnis, atau;
b) pebisnis tidak mengerti aturan?

xw
sumber