Business Logic Layer (BLL) ใช้อะไร?


14

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

บางทีฉันผิดเกี่ยวกับสิ่งที่ DAL ควรทำเช่นกัน แต่ไม่ว่าจะมีฟังก์ชั่นอะไรบ้างที่คาดว่าน่าจะเป็น BLL ในแอพพลิเคชั่นการจัดการฐานข้อมูล?


เสียงเหมือนประสิทธิภาพเทียบกับความยืดหยุ่น / ขึ้นเขียงนำมาใช้ใหม่
งาน

@Job - ใช่โดยเฉพาะอย่างยิ่งเนื่องจากเป็นแอปขนาดเล็กที่มีโอกาสนำโค้ดกลับมาใช้ใหม่ได้น้อย (แต่) แต่บางส่วนก็พยายามใช้วิธีปฏิบัติที่ดีที่สุดเท่าที่จะทำได้
Andrew Arnold

ฉัน upvoting ทุกคนเพราะพวกเขาทั้งหมดคำตอบที่ดี น่าเสียดายที่ฉันยอมรับได้เพียงอันเดียวเท่านั้น
Andrew Arnold

คำตอบ:


10

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

ฉันจะพิจารณารวม BLL และ DAL เข้ากับโครงการขนาดเล็กหรือไม่ ฉันอาจยกเว้นว่าฉันเปลี่ยนเทคโนโลยี DAL บ่อยเท่าที่ฉันเปลี่ยนทรงผมและฉันชอบที่จะมีบางสิ่งบางอย่างเพื่อแยกรหัสลูกค้าของฉันจากสิ่งนั้น


2
ฉันไม่ได้เปลี่ยนทรงผมใน 20 ปี ฉันเกลียดที่จะเปลี่ยนเทคโนโลยี DAL บ่อยเท่าที่ฉันเปลี่ยนทรงผม
Erik Funkenbusch

3
บางคนอัปเดต DAL ทุก ๆ 20 ปีด้วยเช่นกัน!
Marcie

4
คำตอบที่ดี. เป็นเรื่องปกติสำหรับโครงการขนาดเล็กที่ไม่ค่อยมีอะไรให้ใส่ใน BLL นอกจากนี้ยังเป็นเรื่องธรรมดาสำหรับโครงการขนาดเล็กที่จะขยายใหญ่ขึ้นและถ้าคุณไม่มีเปลือกของ BLL อย่างน้อยที่สุดจำนวนตรรกะที่เพิ่มขึ้นก็จะสะสมในชั้นนำเสนอหรือ DAL ซึ่งก็ไม่ได้เป็นเช่นนั้น เป็นที่น่าพอใจ.
Carson63000

5

BLL จะจัดการสิ่งต่าง ๆ ที่เป็นส่วนหนึ่งของโดเมนธุรกิจไม่ใช่ส่วนหนึ่งของฐานข้อมูลและไม่ใช่ส่วนหนึ่งของ UI (โดยปกติ) ตัวอย่างเช่นการใช้อายุของลูกค้าเพื่อตรวจสอบว่าพวกเขามีสิทธิ์ได้รับส่วนลดอาวุโสของพิเศษ DAL ไม่ควรทำสิ่งนี้เพียงแค่ดึงข้อมูลลูกค้าจากนั้นจัดเก็บข้อมูลส่วนลดหลังจาก BLL ทำงานเสร็จแล้ว DAL ควรมุ่งเน้นที่ CRUD มากขึ้น ในแอปพลิเคชันขนาดเล็กทั้งสองข้อกังวลอาจทับซ้อน


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

2
@Mystere Man มีประสิทธิภาพมากขึ้นเป็นส่วนตัว ความคิดเห็นนั้นหมายความว่าคุณรู้ว่าเกิดอะไรขึ้นกับส่วนหน้า มันคงที่ในธรรมชาติ ใช้ประโยชน์จากแบบสอบถาม SQL เพื่อเพิ่มประสิทธิภาพข้อมูลได้อย่างแน่นอน แต่มีบรรทัดที่ดีในขณะที่คุณเริ่มผูก UI เข้ากับส่วนหลัง
Aaron McIver

1
@Mystere Man: แน่นอนมันสามารถ และบ่อยครั้งที่สิ่งต่าง ๆ "ตก" ผ่านจากชั้นหนึ่งไปอีกชั้นหนึ่ง ศิลปะที่แท้จริงอยู่ในการแยกพวกเขาและทำให้พวกเขาแยกจากกัน ฉันรู้ว่ามันไม่ใช่เรื่องง่ายเสมอไป ...
FrustratedWithFormsDesigner

1
และความเจริญรุ่งเรืองการเพิ่มประสิทธิภาพก่อนวัยอันควรจะยกหัวที่น่าเกลียด! ฉันคิดว่ามันยากที่จะจินตนาการว่าการเปรียบเทียบวันที่ง่ายเป็นคอขวดที่รับประกันการย้ายกฎธุรกิจไปยัง DAL การบำรุงรักษาควรเป็นเป้าหมายด้วยเช่นกันไม่ใช่แค่เพิ่มความเร็ว
TMN

5

แอนดรู

เลเยอร์ตรรกะทางธุรกิจคือสิ่งที่คุณจะได้รับเมื่อคุณพัฒนาและขับเคลื่อนโดเมนโดยมุ่งเน้นที่กิจกรรมหลักของโดเมน หากคุณตัดเลเยอร์การนำเสนอ (gui, เว็บ) และเลเยอร์โครงสร้างพื้นฐาน (db, การเชื่อมต่อเครือข่ายและอื่น ๆ ) คุณจะมี acitivies หลักที่เป็นส่วนหนึ่งของโดเมนของคุณเช่นการฝากเงินเข้าบัญชีธนาคาร ตอนนี้ถ้าคุณจำลองโมเดลเลเยอร์ธุรกิจของคุณและแยกมันออกจากการนำเสนอและโครงสร้างพื้นฐานคุณสามารถย้ายพอร์ตไปยังการใช้งานอื่น ๆ ได้อย่างง่ายดายเช่นเว็บหรืออุปกรณ์มือถือ มันเป็นวิธีที่สะอาดในการคิดเกี่ยวกับการพัฒนาและจากสิ่งที่ฉันเห็นมันไม่ได้นำสิ่งที่น่าเสียดายอย่างจริงจัง

ฉันขอแนะนำให้จับอีริคอีแวนส์ - การออกแบบการขับเคลื่อนด้วยโดเมนซึ่งเป็นหนังสือที่ดีที่แสดงให้เห็นถึงการมุ่งเน้นการพัฒนาบนโดเมน เป็นที่ทราบกันดีว่าเป็นเรื่องที่อ่านได้ยาก แต่ก็เป็นการสร้างแรงผลักดันและมีความเชื่อมั่นอย่างมากเกี่ยวกับสิ่งที่นักพัฒนาทำผิดกับระบบในปัจจุบัน


4

ไม่มีอะไรที่บอกว่าคุณจะต้องมีระดับหรือเลเยอร์จำนวนหนึ่ง ทุกอย่างขึ้นอยู่กับความซับซ้อนของโครงการของคุณ ลองดูที่แอปตัวอย่าง MVC จำนวนมากเช่น nerd dinner หรือ record store .. พวกเขาใช้ 2 เลเยอร์เพราะสำหรับแอปพลิเคชันที่มีตรรกะการประมวลผลน้อยมากมันก็ไม่สมเหตุสมผล

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

สมมติว่าคุณตัดสินใจเปลี่ยน ORM จาก Linq เป็น SQL เป็น Entity Framework (หรือ nhibernate) มันอาจจะง่ายกว่าที่จะเปลี่ยนในเลเยอร์ธุรกิจกว่าในเลเยอร์การนำเสนอของคุณเนื่องจากงานนำเสนอมักจะมีรูปแบบการนำเสนอที่แน่น

หากคุณเข้าใจ MVC นั่นคือ .. Model View Controller คุณสามารถนึกถึงสถาปัตยกรรมแอปพลิเคชันของคุณในแง่เดียวกัน แบบจำลองนั้นคล้ายกับชั้นข้อมูลของคุณชั้นการนำเสนอคือมุมมองและชั้นธุรกิจเป็นตัวควบคุม


4

เมี่ยงคำตอบที่อ้างว้างของโลกเกี่ยวกับการขับเคลื่อนโดเมนออกแบบ:

ลองดูThe Onion Architectureซึ่งสอดคล้องกับแนวคิดการออกแบบโดเมนขับเคลื่อน

โปรดสังเกตว่า Business Layer "Layer" เป็นแกนหลักของหัวหอมใหญ่และทุกชั้นโครงสร้างพื้นฐาน (เช่น data access layer) นั้นขึ้นอยู่กับการพึ่งพาจากภายนอก สิ่งนี้ช่วยทดสอบได้มากเพราะคุณควรจะจำลองการพึ่งพาโครงสร้างพื้นฐานภายนอกและทดสอบตรรกะโดเมนของคุณอย่างเต็มที่

ในความคิดของฉัน: ชั้นตรรกะทางธุรกิจเป็นที่ที่ "วิธีแก้ปัญหาแนวคิดบริสุทธิ์" มีชีวิต ส่วนที่เหลือเป็นเพียงรายละเอียดการใช้งานโครงสร้างพื้นฐาน

อย่างไรก็ตามแอพพลิเคชั่นบางตัวอาจไม่ต้องการสถาปัตยกรรมประเภทนี้ หากแอปพลิเคชันของคุณทั้งหมดเป็นชุดข้อมูล CRUD การดำเนินงาน 'บริสุทธิ์แนวคิดแนวคิด' ของคุณอาจว่างเปล่าจริงและสิ่งที่คุณต้องมีการแก้ไขฐานข้อมูล front-end ในกรณีนี้คุณน่าจะดีกว่ามุ่งเน้นไปที่เลเยอร์ DAL และ UI เท่านั้น


1

คำตอบสำหรับคำถามนี้คือ (IMHO): "ฉันสามารถแทนที่ DAL ของฉันได้อย่างสมบูรณ์และไม่ต้องเขียนรหัสตรรกะทางธุรกิจของฉันใหม่"

คิดว่ามันเหมือนกับเลเยอร์การนำเสนอของคุณ - เป็นเรื่องธรรมดาที่จะคิดว่าจะเปลี่ยน GUI สำหรับอีกอันหนึ่งเดสก์ท็อป GUI หนาจะถูกสับเปลี่ยนสำหรับเว็บไคลเอ็นต์ซึ่งเปลี่ยนเป็นแอป iPhone มันไม่ธรรมดาที่จะคิดเช่นนี้สำหรับ BLL / DAL เพราะพวกเขาไม่เคยได้รับการแลกเปลี่ยนยกเว้นบางทีสำหรับสิ่งที่คล้ายกันมาก (เช่น SQLServer DB แทนที่ด้วย MySQL หนึ่ง) แต่ถ้าคุณคิดว่าคุณต้องเปลี่ยน DB ของคุณเป็นที่จัดเก็บแบบกระจาย บริการที่เข้าถึงโดยใช้ API คุณอาจได้รับแนวคิดที่ชัดเจนว่าเลเยอร์มาบรรจบกันได้อย่างไร

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