"ตรรกะทางธุรกิจ" คืออะไร?


115

ฉันทำงานกับการพัฒนาเว็บไซต์ตั้งแต่ปี 2009 เมื่อฉันเริ่มต้นกับ PHP เมื่อฉันย้ายไปที่ ASP.NET ฉันได้ยินมากเกี่ยวกับ DDD และ OOAD ที่ให้ความสำคัญกับ "ตรรกะทางธุรกิจ" และ "กฎทางธุรกิจ" นี้ ประเด็นก็คือแอพทั้งหมดที่ฉันพัฒนาขึ้นจนถึงตอนนี้ล้วนเกี่ยวกับการทำงานของ CRUD และฉันไม่เคยเห็นสิ่งเหล่านี้มาใช้ในทางปฏิบัติ

ฉันไม่สามารถจินตนาการได้ว่าสิ่งเหล่านั้นสามารถนำไปปฏิบัติได้จริง ๆ ดังนั้นตรรกะทางธุรกิจนี้คืออะไรและมันเข้ากับแอพได้อย่างไร ฉันรู้ว่าสิ่งเหล่านี้ถูกนำมาใช้เป็นวิธีการในแบบจำลองโดเมน แต่วิธีการเหล่านั้นอาจเป็นไปได้และในแอปพลิเคชันที่พวกเขาสามารถใช้งานได้

คำตอบ:


107

CRUDเป็นตัวย่อที่ย่อมาจากสร้างอ่านอัปเดตและลบ สิ่งเหล่านี้คือการดำเนินการพื้นฐานสี่อย่างที่คุณสามารถทำได้บนtuple ฐานข้อมูล แต่แอพพลิเคชั่นทางธุรกิจมีมากกว่าการสร้างอ่านอัปเดตและลบบันทึกฐานข้อมูล

เริ่มจากคำจำกัดความพื้นฐานจากนั้นดูตัวอย่างสองสามตัวอย่างและดูว่าคำจำกัดความเหล่านั้นจับคู่ตัวอย่างและวิธีการจับคู่กับซอฟต์แวร์จริง

ตรรกะทางธุรกิจหรือลอจิกโดเมนเป็นส่วนหนึ่งของโปรแกรมที่เข้ารหัสกฎเกณฑ์ทางธุรกิจในโลกแห่งความจริงที่กำหนดว่าจะสามารถสร้างจัดเก็บและเปลี่ยนแปลงข้อมูลได้อย่างไร มันกำหนดวิธีการที่วัตถุธุรกิจโต้ตอบกับคนอื่นและบังคับใช้เส้นทางและวิธีการที่วัตถุทางธุรกิจมีการเข้าถึงและปรับปรุง

กฎทางธุรกิจอธิบายการดำเนินงานคำจำกัดความและข้อ จำกัด ที่ใช้กับองค์กร การดำเนินการรวมกันเป็นกระบวนการ; ทุกธุรกิจใช้กระบวนการเหล่านี้เพื่อสร้างระบบที่จะทำให้เสร็จ

ตอนนี้มาทำงานกับตัวอย่าง

โอนเงินจากบัญชีที่ตรวจสอบหนึ่งไปยังอีก

ก่อนสิ่งที่คุณต้องรู้คืออะไร (ใส่)?

  • ตัวตนของบุคคลที่ทำการโอน
  • จำนวนเงินที่จะโอน
  • แหล่งที่มาตรวจสอบหมายเลขบัญชี
  • เป้าหมายการตรวจสอบหมายเลขบัญชี

"กฎทางธุรกิจ" ที่ต้องใช้มีอะไรบ้าง

  • บุคคลที่ทำการร้องขอจะต้องมีอำนาจดำเนินการดังกล่าว
  • การทำธุรกรรมจะต้องเป็นอะตอม
  • ธุรกรรมดังกล่าวอาจมีข้อกำหนดในการรายงานต่อรัฐบาลหากเกินจำนวนที่กำหนด

โดย "atomic" ฉันหมายความว่าการทำธุรกรรมจะต้องสำเร็จอย่างสมบูรณ์หรือต้องล้มเหลวโดยสิ้นเชิง คุณไม่สามารถทำธุรกรรมบัญชีที่เงินถูกนำออกจากบัญชีหนึ่งโดยไม่ต้องเข้ามาอีก (เงินหายไป) หรือเงินถูกฝากเข้าบัญชี แต่ไม่หักจากบัญชีอื่น (เงินปรากฏอย่างน่าอัศจรรย์จากที่ใด)

สั่งบางอย่างจากอเมซอน

สิ่งที่คุณต้องรู้

  • ตัวตนของผู้สั่ง
  • ข้อมูลการจัดส่ง
  • ข้อมูลการเรียกเก็บเงิน
  • วิธีการชำระเงิน
  • จำนวนและปริมาณของแต่ละรายการที่จะจัดส่ง
  • วิธีการจัดส่ง (ข้ามคืนเรือช้าหรือซูเปอร์เซฟเวอร์)
  • อัตราภาษีของรัฐ

จะเกิดอะไรขึ้นหลังจากสั่งซื้อสินค้า?

  • รายการจะถูกดึงออกจากสต็อก
  • ในปริมาณที่ถูกหัก
  • รายการจะถูกบรรจุสำหรับการจัดส่ง
  • สินค้าหมดสต๊อกจะถูกจัดเรียงใหม่
  • สั่งซื้อสินค้าที่ลดลงต่ำกว่าปริมาณขั้นต่ำ
  • การจัดส่งหนึ่งหรือสอง
  • รายการใบแจ้งหนี้ / การจัดส่งจะถูกพิมพ์และส่งไปพร้อมกับคำสั่งซื้อ

    ..etc


5
ฉันชอบคำจำกัดความ แต่ในตัวอย่างฉันคิดถึงความแตกต่างระหว่างตรรกะทางธุรกิจกับกฎเกณฑ์ทางธุรกิจ
jdv-Jan de Vaan

1
ตกลง. แต่ทำไมคุณถึงติดป้ายกำกับว่า "ธุรกรรมจะต้องเป็นแบบปรมาณู" เป็นกฎทางธุรกิจ ฉันฟังดูระดับต่ำไปหน่อยสำหรับกฎธุรกิจ
jdv-Jan de Vaan

9
@jdv: คุณคิดมากเรื่องนี้ พนักงานรับฝากจะดำเนินการเพียงครึ่งหนึ่งของธุรกรรมนั้นหรือไม่
Robert Harvey

1
@jdv: การพูดว่าการทำธุรกรรมจะต้องเป็นแบบสองอะตอม: (1) หากมีสิ่งใดรบกวนการประมวลผลของธุรกรรมอาจเป็นไปได้ที่จะยกเลิกผลกระทบใด ๆ ของการทำธุรกรรมราวกับว่ามันไม่เคยเกิดขึ้น (ยกเว้นบางทีสำหรับ การสร้างรายงานบันทึกข้อผิดพลาด) หรือทำทุกอย่างที่จำเป็นต้องทำ (2) ไม่มีส่วนใดของธุรกรรมที่จะทับซ้อนธุรกรรม "อะตอมมิก" อื่น ๆ ที่เกี่ยวข้องกับบัญชีเหล่านั้น ตัวอย่างเช่นหากใครบางคนที่มี $ 1,000,000 ในแต่ละบัญชีสองบัญชีโอนเงิน 500,000 ดอลลาร์จากบัญชีหนึ่งไปอีกบัญชีหนึ่งในขณะที่ธนาคารถูกถาม ...
supercat

4
การทำธุรกรรม @jdv ที่เป็นอะตอมเป็นข้อกำหนดขั้นพื้นฐานที่ต้องทำให้มั่นใจและเกี่ยวข้องกับสถานะปลายทาง
icarus74

27

CRUD เป็นเพียงสร้างอ่านอัปเดตลบแอปพลิเคชัน

ตัวติดตามบั๊กก็เป็นแอพ CRUD เช่นกัน สร้างข้อบกพร่องอ่าน (แสดง) ข้อบกพร่องอัปเดตข้อบกพร่องและอาจจะลบพวกเขา

อย่างไรก็ตามมีตัวติดตามข้อผิดพลาดมากกว่า CRUD

  • นักพัฒนาไม่ได้รับอนุญาตให้ทำเครื่องหมายข้อผิดพลาดที่ตรวจสอบหรือปิดซึ่งเป็นส่วนหนึ่งของงานของ QA ดังนั้นจึงมีรหัสบางส่วนเพื่อให้แน่ใจว่าคนที่ขาดบทบาทของการประกันคุณภาพไม่สามารถทำเครื่องหมายข้อบกพร่องเป็นปิดหรือตรวจสอบแล้ว
  • ไม่มีใครยกเว้นผู้จัดการโครงการสามารถลบบั๊กได้จริง
  • เพื่อให้ข้อผิดพลาดที่จะทำเครื่องหมายว่า "ทดสอบฉัน" จะต้องมีอย่างน้อยหนึ่งการกระทำของรหัสต่อข้อผิดพลาด
  • เฉพาะข้อบกพร่องที่อยู่ในสถานะ 'ปิด' เท่านั้นที่อาจถูกย้ายไปที่สถานะ 'เปิดใหม่'
  • นักพัฒนาซอฟต์แวร์ที่ได้รับมอบหมายข้อผิดพลาดไม่สามารถย้ายจาก 'ตรวจสอบรหัส' เป็น 'ตรวจสอบโค้ดเสร็จสมบูรณ์'
  • QA และผู้พัฒนาสามารถเห็นบั๊กในโครงการที่ได้รับมอบหมายเท่านั้น

รหัสที่ใช้ด้านบนเป็นตรรกะทางธุรกิจของแอปพลิเคชัน

ข้อ จำกัด ของเวิร์กโฟลว์หรือผู้ที่สามารถทำการดำเนินการต่าง ๆ ใน CRUD นี่คือสิ่งที่แยกแอป CRUD หนึ่งแอปออกจากแอปอื่น พวกเขาเป็นส่วนที่คุณต้องการที่จะได้รับธุรกิจที่จริงบอกว่าวิธีการทำงานของแอพลิเคชัน ตรรกะเป็นอย่างไรกัน ... ดีที่กล่าวถึงที่ดีที่สุดกว่าเบียร์ออกจากหูของผู้จัดการโครงการ แต่นั่นคือเหตุผลทางธุรกิจอะไร

แน่นอนว่าเป็นไปได้ที่จะเขียนแอป CRUD ที่ 'บริสุทธิ์' โดยที่ไม่มีบทบาททุกอย่างสามารถแก้ไขและดูได้ - แต่สิ่งเหล่านี้เป็นข้อยกเว้นมากกว่ากฎ

ตรรกะทางธุรกิจเป็นตรรกะที่คุณเขียนลงในโปรแกรมของคุณเพื่อจัดการกับกฎเกณฑ์ทางธุรกิจที่คุณได้รับ


เมื่อคุณเริ่มใช้กฎเกณฑ์ทางธุรกิจสิ่งนี้มีแนวโน้มที่จะอยู่ในระดับที่สูงกว่าตัวของตัวเองหรือตรรกะทางธุรกิจ นี่เป็นสิ่งที่คุณได้รับจากนักวิเคราะห์ธุรกิจที่ทำงานกับธุรกิจนี้

ลองพิจารณาในตัวอย่างนี้โปรแกรมที่กำหนดวิธีจัดการการส่งคืนสินค้าที่โต๊ะรับคืนในร้านค้า

  • หากใบเสร็จรับเงินเท่ากับหรือมากกว่า 90 วันอาจได้รับเครดิตร้านค้าเท่านั้น
  • หากใบเสร็จรับเงินมีอายุน้อยกว่า 90 วันให้เครดิตการประกวดราคาที่ใช้ในการซื้อพร้อมกับ (เครดิตกลับไปที่บัตรเครดิตเงินสดจะกลับเป็นเงินสดในเครดิตของร้านค้าจะเป็นเครดิตในร้านค้า) ... เว้นแต่จะเป็น เป็นเช็คซึ่งในกรณีนี้ใช้เงินสด

นี่เป็นกฎทางธุรกิจบางอย่าง พวกเขาไม่ได้พูดกับส่วน CRUD ของแอปพลิเคชัน

เมื่อทำงานกับกฎเกณฑ์ทางธุรกิจคุณมักพบสิ่งเหล่านี้เขียนในเอ็นจินกฎ (ตัวอย่างเช่นWindows Workflow Foundation Rules Engine ) แทนที่จะเขียนโค้ดดิบในระบบของคุณ


ตระหนักดีว่าตรรกะ / กฎแตกต่างเป็นหนึ่งในคำศัพท์และสามารถโต้เถียงได้ตลอดทั้งคืน (ดีกว่าเบียร์อีกครั้ง) แม้ว่านี่จะไม่ใช่ความแตกต่างที่ผิดปกติ แต่ทั้งสองสามารถผสมผสานกัน


23

คำตอบอื่น ๆ นั้นถูกต้อง หนึ่งความคิดเพิ่มเติม ...

ตรรกะทางธุรกิจเป็นแบบพกพา

หากคุณกำลังจะre-ดำเนินโครงการซอฟต์แวร์ในการเขียนโปรแกรมภาษาที่แตกต่างกันกล่าวว่าการย้ายจากเทอร์โบปาสคาลที่จะJava , ตรรกะทางธุรกิจและกฎเกณฑ์ทางธุรกิจคือสิ่งที่โครงการเก่าและใหม่จะมีเหมือนกัน

ภาษาโปรแกรมจะแตกต่างกัน รหัสที่มาจะแตกต่างกันอย่างสิ้นเชิง เครื่องมือ ( IDE s, คอมไพเลอร์และอื่น ๆ ) อาจแตกต่างกันโดยสิ้นเชิง ส่วนติดต่อผู้ใช้อาจจะทั้งหมดอีกครั้งจัดหรือมีที่แตกต่างกันมองและความรู้สึก เอกสารอาจจะแตกต่างกัน แต่วัตถุประสงค์ของทั้งสองโครงการผลลัพธ์สุดท้ายของการทำงาน / เป้าหมายที่สำเร็จจะเหมือนกัน


10

ตรรกะทางธุรกิจโดยทั่วไปประกอบด้วย 2 ประเภทกว้าง ๆ : การตรวจสอบและการไหล ตรรกะทางธุรกิจบอกว่าจำนวน 1 ต้องมากกว่าหรือเท่ากับจำนวน 2 - ตัวอย่างเช่นจำนวนรายการที่จะซื้อจะต้องน้อยกว่าหรือเท่ากับจำนวนรายการในสต็อก

ในแอปพลิเคชันเดียวกลุ่มธุรกิจจะกล่าวว่านี่เป็นกฎเกณฑ์ทางธุรกิจและเพื่อให้คุณเขียนรหัสเพื่อบังคับใช้ตรรกะทางธุรกิจนี้ (การตรวจสอบ) แอปพลิเคชันอื่นจะบอกว่าหากจำนวนรายการที่สั่งมากกว่าจำนวนของรายการในสต็อกเพื่อยอมรับคำสั่งซื้อแล้วสั่งซื้อของคุณเองสำหรับความแตกต่างบวก 20% และคุณจะเขียนตรรกะทางธุรกิจนี้ (ไหล) .

CRUD เป็นเพียงการรับข้อมูลเข้าและออกจากการจัดเก็บและการเปลี่ยนแปลง ตรรกะทางธุรกิจกำหนดสิ่งที่คุณทำกับข้อมูลนั้นและการเปลี่ยนแปลงใดที่คุณได้รับอนุญาตให้ทำ ลูกค้าของคุณเกิดในอนาคตต่ำกว่า 5 จากพื้นที่ทางภูมิศาสตร์ที่แน่นอน (ส่วนลดสำหรับคนในท้องถิ่น / ผู้เข้าชม) CRUD นั้นง่ายโดยรู้ว่าคุณจะได้รับเครดิตภาษีสำหรับเด็กเฉพาะในกรณีที่เด็กอยู่กับคุณมากกว่าครึ่งหนึ่งของเวลาที่มันมีชีวิตอยู่ในปีปฏิทินไม่เกิน 6 เดือนมีความซับซ้อนมากขึ้น


9

ตรรกะหรือกฎเกณฑ์ทางธุรกิจเป็นสิ่งที่ไม่เกี่ยวข้องกับกลไกของส่วนต่อประสานผู้ใช้ ("เนื้อหาการเขียนโปรแกรม") นี่คือสิ่งที่คุณจะต้องใช้หากคุณทำธุรกรรมนี้หรือเมื่อ 100 ปีก่อน (ด้วยตนเอง) ตัวอย่างเช่นเมื่อใดที่จะใช้ภาษีการขายกับการซื้อ


1

"ตรรกะทางธุรกิจ" ของโปรแกรมหรือแอปพลิเคชันเป็นส่วนหนึ่งของรหัสที่ทำสิ่งที่มีการป้อนข้อมูล (จากผู้ใช้ระบบปฏิบัติการและอื่น ๆ ) "กฎทางธุรกิจ" ของแอปพลิเคชันมักจะเป็นพารามิเตอร์ที่กำหนดไว้ของโปรแกรมเอง (เช่นวิธีการจัดการอินพุต) อย่างน้อยนี่คือสิ่งที่ฉันได้ยินมาจากหลาย ๆ คน มันเป็นคำที่คล้ายกันมากในการอธิบายบางส่วนของรหัส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.