ที่ทำงานเรามีแอปพลิเคชั่นภายในขนาดใหญ่ซึ่งอยู่ระหว่างการพัฒนามาเกือบ 2 ปีแล้ว ฉันเพิ่งเข้าร่วมโครงการและสถาปัตยกรรมบางอย่างทำให้ฉันงุนงงเล็กน้อยดังนั้นฉันหวังว่าจะมีใครบางคนที่นี่สามารถให้คำแนะนำก่อนที่ฉันจะออกไปถามสถาปนิกกับคำถามเหล่านี้ได้ )
คำขอโทษของฉันถ้าด้านล่างยาวหน่อยฉันแค่อยากจะลองวาดภาพที่ดีว่าระบบคืออะไรก่อนที่ฉันจะถามคำถาม :)
วิธีการติดตั้งระบบคือเรามีเว็บแอปพลิเคชั่นหลักหนึ่งตัว (asp.net, AngularJS) ซึ่งส่วนใหญ่จะรวบรวมข้อมูลจากบริการอื่น ๆ ดังนั้นโดยทั่วไปมันเป็นโฮสต์สำหรับแอปพลิเคชัน AngularJS มีตัวควบคุม MVC หนึ่งตัวที่บูตด้านไคลเอนต์จากนั้นตัวควบคุมอื่น ๆ คือตัวควบคุม WebAPI
การโทรจากฝั่งไคลเอ็นต์นั้นควบคุมโดยตัวควบคุมเหล่านี้ซึ่งจะปรับใช้กับกล่องที่ไม่ทำอะไรเลยนอกจากโฮสต์เว็บแอปพลิเคชัน ขณะนี้เรามี 4 กล่องดังกล่าว
อย่างไรก็ตามการโทรนั้นจะถูกส่งไปยังแอปพลิเคชั่น WebAPI อีกชุดหนึ่งในท้ายที่สุด (โดยทั่วไปจะเป็นการต่อพื้นที่ธุรกิจเช่นความปลอดภัยข้อมูลลูกค้าข้อมูลผลิตภัณฑ์ ฯลฯ ) WebAPIs เหล่านี้ทั้งหมดได้รับการปรับใช้ร่วมกันกับกล่องเฉพาะเช่นกัน เรายังมี 4 กล่องเหล่านี้
ด้วยข้อยกเว้นเดียว WebAPIs เหล่านี้จะไม่ถูกใช้โดยส่วนอื่น ๆ ขององค์กรของเรา
ในที่สุด WebAPIs เหล่านี้ก็ยังเรียกใช้บริการ "back end" อีกชุดซึ่งโดยทั่วไปจะเป็นบริการ asmx หรือ wcf แบบดั้งเดิมที่ตบอยู่ด้านบนของระบบ ERP และร้านค้าข้อมูล (ซึ่งเราไม่สามารถควบคุมได้)
ตรรกะทางธุรกิจส่วนใหญ่ของแอปพลิเคชันของเราอยู่ใน WebApis เหล่านี้เช่นการแปลงข้อมูลแบบดั้งเดิมรวมเข้าด้วยกันดำเนินการกฎทางธุรกิจซึ่งเป็นประเภทปกติ
สิ่งที่ฉันสับสนคือประโยชน์ที่เป็นไปได้ที่จะมีการแยกระหว่าง WebApplication และ WebAPIs ที่ให้บริการนั้น เนื่องจากไม่มีใครใช้มันฉันไม่เห็นประโยชน์การปรับขนาดได้ (เช่นไม่มีจุดในการใส่ในกล่อง API อีก 4 กล่องเพื่อจัดการกับโหลดที่เพิ่มขึ้นเนื่องจากการโหลดที่เพิ่มขึ้นบนเซิร์ฟเวอร์ API ต้องหมายความว่ามีการโหลดที่เพิ่มขึ้นบนเว็บเซิร์ฟเวอร์ - ดังนั้นจะต้องมีอัตราส่วน 1: 1 ของเว็บเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์ Api)
ฉันยังไม่เห็นประโยชน์ใด ๆ เลยที่ต้องทำการเรียกเบราว์เซอร์ HTTP พิเศษ => HTTP => WebApp => HTTP => WebAPI => HTTP => บริการแบ็คเอนด์ (การโทร HTTP นั้นระหว่าง WebApp และ WebAPI คือปัญหาของฉัน)
ดังนั้นตอนนี้ฉันกำลังมองหาที่จะผลักดันให้ WebAPIs ปัจจุบันถูกย้ายจากโซลูชันที่แยกจากกันไปเป็นเพียงโครงการที่แยกจากกันภายในโซลูชัน WebApplication โดยมีการอ้างอิงโครงการอย่างง่ายในระหว่างนั้นและโมเดลการปรับใช้เพียงครั้งเดียว ดังนั้นในที่สุดพวกเขาก็จะกลายเป็นห้องสมุดคลาส
การปรับใช้ที่ชาญฉลาดหมายความว่าเราจะมี 8 "สแต็กเต็ม" กล่องเว็บซึ่งตรงข้ามกับ 4 + 4
ประโยชน์ที่ฉันเห็นของวิธีการใหม่คือ
- เพิ่มประสิทธิภาพเนื่องจากมีหนึ่งรอบน้อยกว่าของการทำให้เป็นอนุกรม / deserialisation ระหว่างเว็บแอปพลิเคชันและเซิร์ฟเวอร์ WebAPI
- ตันของรหัสที่สามารถลบได้ (เช่นไม่จำเป็นต้องบำรุงรักษา / ทดสอบ) ในแง่ของ DTOs และผู้ทำแผนที่ในขอบเขตขาออกและขาเข้าของ Web Application และเซิร์ฟเวอร์ WebApi ตามลำดับ
- ความสามารถที่ดีกว่าในการสร้างการทดสอบการรวมอัตโนมัติที่มีความหมายเพราะฉันสามารถล้อเลียนบริการแบ็คเอนด์และหลีกเลี่ยงความยุ่งเหยิงรอบการกระโดด HTTP ระดับกลาง
ดังนั้นคำถามคือ: ฉันผิดหรือเปล่า? ฉันพลาด "เวทมนต์" พื้นฐานของการแยก WebApplication และ WebAPI กล่องออกจากกันหรือไม่?
ฉันได้ค้นคว้าข้อมูลสถาปัตยกรรม N-Tier บางอย่างแล้ว แต่ดูเหมือนจะไม่พบสิ่งใดในสิ่งที่สามารถให้ผลประโยชน์ที่เป็นรูปธรรมสำหรับสถานการณ์ของเรา (เนื่องจากความสามารถในการปรับขนาดไม่ได้เป็นปัญหาเท่าที่ฉันสามารถบอกได้และนี่คือแอปภายใน ความปลอดภัยในแง่ของแอปพลิเคชัน WebAPI ไม่ใช่ปัญหา)
และสิ่งที่ฉันจะสูญเสียในแง่ของผลประโยชน์ถ้าฉันจะจัดระเบียบระบบใหม่เพื่อการตั้งค่าที่ฉันเสนอ?