คำถามติดแท็ก n-tier

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

2
ประโยชน์ของการใช้เซิร์ฟเวอร์ API และ UI แยกต่างหากสำหรับเว็บแอปพลิเคชัน
ที่ทำงานเรามีแอปพลิเคชั่นภายในขนาดใหญ่ซึ่งอยู่ระหว่างการพัฒนามาเกือบ 2 ปีแล้ว ฉันเพิ่งเข้าร่วมโครงการและสถาปัตยกรรมบางอย่างทำให้ฉันงุนงงเล็กน้อยดังนั้นฉันหวังว่าจะมีใครบางคนที่นี่สามารถให้คำแนะนำก่อนที่ฉันจะออกไปถามสถาปนิกกับคำถามเหล่านี้ได้ ) คำขอโทษของฉันถ้าด้านล่างยาวหน่อยฉันแค่อยากจะลองวาดภาพที่ดีว่าระบบคืออะไรก่อนที่ฉันจะถามคำถาม :) วิธีการติดตั้งระบบคือเรามีเว็บแอปพลิเคชั่นหลักหนึ่งตัว (asp.net, AngularJS) ซึ่งส่วนใหญ่จะรวบรวมข้อมูลจากบริการอื่น ๆ ดังนั้นโดยทั่วไปมันเป็นโฮสต์สำหรับแอปพลิเคชัน AngularJS มีตัวควบคุม MVC หนึ่งตัวที่บูตด้านไคลเอนต์จากนั้นตัวควบคุมอื่น ๆ คือตัวควบคุม WebAPI การโทรจากฝั่งไคลเอ็นต์นั้นควบคุมโดยตัวควบคุมเหล่านี้ซึ่งจะปรับใช้กับกล่องที่ไม่ทำอะไรเลยนอกจากโฮสต์เว็บแอปพลิเคชัน ขณะนี้เรามี 4 กล่องดังกล่าว อย่างไรก็ตามการโทรนั้นจะถูกส่งไปยังแอปพลิเคชั่น WebAPI อีกชุดหนึ่งในท้ายที่สุด (โดยทั่วไปจะเป็นการต่อพื้นที่ธุรกิจเช่นความปลอดภัยข้อมูลลูกค้าข้อมูลผลิตภัณฑ์ ฯลฯ ) WebAPIs เหล่านี้ทั้งหมดได้รับการปรับใช้ร่วมกันกับกล่องเฉพาะเช่นกัน เรายังมี 4 กล่องเหล่านี้ ด้วยข้อยกเว้นเดียว WebAPIs เหล่านี้จะไม่ถูกใช้โดยส่วนอื่น ๆ ขององค์กรของเรา ในที่สุด WebAPIs เหล่านี้ก็ยังเรียกใช้บริการ "back end" อีกชุดซึ่งโดยทั่วไปจะเป็นบริการ asmx หรือ wcf แบบดั้งเดิมที่ตบอยู่ด้านบนของระบบ …

6
วิธีการของการดีบักรหัส (สถานการณ์ฝันร้าย)
ฉันมักจะมอบหมายงานให้ดีบั๊กแอปพลิเคชันในงานของฉัน มันเป็นแอปพลิเคชั่น BI ที่เราปรับใช้กับธุรกิจซึ่งรวมถึงสภาพแวดล้อมการทดสอบและสภาพแวดล้อมการผลิต ฉันสงสัยว่ามีแอพ / เครื่องมือ / วิธีการที่ผู้คนสามารถแนะนำได้หรือไม่ตามข้อ จำกัด เหล่านี้: ตัวดีบักเกอร์ไม่สามารถใช้ได้บนไซต์ของลูกค้าหรือในเครื่องเนื่องจากซอฟต์แวร์จะขึ้นอยู่กับแอปพลิเคชันของบุคคลที่สามที่เรากำหนดเองซึ่งเราไม่มีสภาพแวดล้อมการทดสอบ (แก้ไข: เพื่อความยุติธรรมมันเป็นไปได้ที่จะแก้จุดบกพร่องในเครื่องในบางกรณีถ้าเราใช้อะไรนอกจากรหัสหลักรหัสที่มีปัญหาส่วนใหญ่อยู่ใน dll ที่ห่อหุ้มการสื่อสารเฉพาะบุคคลที่สาม: ซ็อกเก็ตกระบวนการท่อสบู่เรียก ตรรกะที่กำหนดเองที่เปลี่ยนแปลงพฤติกรรมของรหัสหลักโดยทั่วไปในระหว่างการนำไปใช้งานหรือปรับปรุงสำหรับลูกค้า แทบจะไม่มีการบันทึกในแอพของเรา ไม่มีการทดสอบหน่วย การควบคุมเวอร์ชันมีโซลูชันเต็มรูปแบบเพียง 1 เวอร์ชันเท่านั้น (โดยใช้แหล่งที่มาที่ปลอดภัย 2005) ดังนั้นจึงเป็นไปไม่ได้ที่จะได้รับโซลูชั่นรุ่นก่อนหน้าทั้งหมด แต่เพียงไฟล์เดียว (ถ้าไม่มีใครรู้วิธีแก้ปัญหานี้) ไม่สามารถทำซ้ำภายในเครื่องบ่อยครั้งไม่สามารถทำซ้ำในสภาพแวดล้อมการทดสอบ (มีโอกาสสูงที่การทดสอบและการผลิตไม่เป็นรุ่นเดียวกัน) มีโอกาสสูงที่เวอร์ชันที่ไคลเอ็นต์กำลังใช้จะแตกต่างจากแหล่งที่ปลอดภัย นี่เป็นเพราะแต่ละไฟล์ถูกอัพเดตซึ่งมีโลจิคัลที่กำหนดเองแบบฝังสำหรับไคลเอ็นต์เฉพาะนั้น บ่อยครั้งที่สิ่งที่เกิดขึ้นคือมีการอัพเดตไบนารีซึ่งต้องการการเปลี่ยนแปลงไบนารีอื่น ๆ หลายอย่าง แต่เมื่อการคอมมิชชันเสร็จสิ้นไม่มีใครมีบันทึกหรือความรู้เกี่ยวกับเรื่องนี้ ข้อผิดพลาดทั่วไปที่ฉันเห็นคือ 'ไม่พบฟังก์ชัน / วิธีการ' หรือ 'การเรียกใช้เมธอดมีการระบุพารามิเตอร์มากเกินไป / น้อยเกินไป' บนสภาพแวดล้อมของไคลเอ็นต์ นี่คือโซลูชัน. net VB ไม่สามารถติดตั้งซอฟต์แวร์ใด ๆ …
16 .net  vb.net  n-tier 

2
การฉีดพึ่งพากับโซลูชัน n-tier Entity Framework
ขณะนี้ฉันกำลังออกแบบโซลูชัน n-tier ซึ่งใช้ Entity Framework 5 (.net 4) เป็นกลยุทธ์การเข้าถึงข้อมูล แต่ฉันกังวลเกี่ยวกับวิธีรวมการฉีดพึ่งพาเพื่อให้สามารถทดสอบ / ยืดหยุ่นได้ เค้าโครงโซลูชันปัจจุบันของฉันมีดังนี้ (โซลูชันของฉันชื่อ Alcatraz): Alcatraz.WebUI : การ asp.net เว็บฟอร์มโครงการส่วนติดต่อผู้ใช้ปลายด้านหน้าอ้างอิงโครงการAlcatraz.BusinessและAlcatraz.Data.Models Alcatraz.Business : โครงการห้องสมุดระดับมีตรรกะทางธุรกิจโครงการอ้างอิงAlcatraz.Data.Access , Alcatraz.Data.Models Alcatraz.Data.Access : ห้องสมุดชั้นโครงการบ้านAlcatrazModel.edmxและAlcatrazEntitiesDbContext อ้างอิงโครงการAlcatraz.Data.Models Alcatraz.Data.Models : โครงการห้องสมุดคลาสมี POCO สำหรับรุ่น Alcatraz ไม่มีการอ้างอิง วิสัยทัศน์ของฉันสำหรับวิธีการแก้ปัญหานี้จะทำงานเป็น web-UI จะยกตัวอย่างพื้นที่เก็บข้อมูลภายในห้องสมุดธุรกิจที่เก็บนี้จะมีการพึ่งพา (ผ่านตัวสร้าง) ของสตริงการเชื่อมต่อ (ไม่ใช่AlcatrazEntitiesอินสแตนซ์) web-ui จะรู้จักสตริงการเชื่อมต่อฐานข้อมูล แต่ไม่ใช่ว่าเป็นสตริงการเชื่อมต่อของเฟรมเวิร์กเอนทิตี ในโครงการธุรกิจ: public class InmateRepository : …

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

2
. NET MVC สถาปัตยกรรมโครงการ / ชั้น
เมื่อวางแผนสถาปัตยกรรมสำหรับเว็บแอ็พพลิเคชัน MVC ขนาดกลางขนาดใหญ่คุณจะใช้เลเยอร์ให้เป็นแบบแยกย่อยได้มากที่สุดและง่ายต่อการทดสอบอย่างไร (โดยทั่วไปปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด) สมมติว่าฉันใช้รหัสก่อนเพื่อเข้าถึงข้อมูลของฉัน ฉันต่อสู้กับสิ่งที่จะกำหนด "ตรรกะทางธุรกิจ" เป็นและวิธีที่มันหมายถึงการโต้ตอบกับชั้นข้อมูล ยกตัวอย่างเช่นแอปพลิเคชันการขายยานพาหนะตรรกะทางธุรกิจจะเป็นคลาสที่ทำงานเช่นการคำนวณวงภาษีสำหรับยานพาหนะที่กำหนดเปรียบเทียบสถิติไมล์ต่อแกลลอน ฯลฯ หรือไม่ สำหรับองค์กรธุรกิจ (เช่นรถยนต์รถตู้รถจักรยานยนต์) ฉันจะใส่สิ่งเหล่านี้ในชั้นข้อมูลพร้อมกับDataContextชั้นเรียนของฉัน นอกจากนี้สิ่งที่จะเป็นตรรกะของแอปพลิเคชันซึ่งตรงข้ามกับธุรกิจ - ฉันคาดเดาสิ่งต่าง ๆ เช่นการตรวจสอบการป้อนข้อมูลเซสชัน / ผู้ใช้? ตัวอย่างเช่นตัวควบคุมรถอาจส่งคืนผลลัพธ์การกระทำ / มุมมองที่แสดงรายการรถยนต์สิบอันดับแรกที่กรองตามประเภทและ mpg ที่ดีที่สุด ดังนั้นสมมติว่าฉันมีICarRepository'carRepo' ฉีดเข้าไปในคอนโทรลเลอร์ของฉัน (โดยใช้รูปแบบพื้นที่เก็บข้อมูล / DI) ฉันกรองรถยนต์ของฉันจากพารามิเตอร์วิธีการกระทำเช่นvar cars = carRepo.getCarsByType("hatchback"); ดังนั้นฉันจึงเก็บความรู้การเข้าถึงข้อมูลออกจากตัวควบคุมของฉันโดยใช้ที่เก็บตอนนี้เพื่อให้ตรรกะทางธุรกิจออกจากตัวควบคุมโดยใช้รูปแบบโดเมน - var result = new MpgCalculator (cars); - สมมติว่าฉันต้องการคลาสเครื่องคิดเลขเพราะมันต้องใช้ตรรกะเพิ่มเติมเพื่อคำนวณประสิทธิภาพการใช้เชื้อเพลิงที่ดีที่สุดมากกว่าแค่การโหลด / กรองเอนทิตีจาก DB ดังนั้นตอนนี้ฉันมีชุดข้อมูลสำหรับมุมมองของฉันในการเรนเดอร์ที่ใช้ที่เก็บเพื่อดึงข้อมูลจากเลเยอร์การเข้าถึงข้อมูลและวัตถุเฉพาะโดเมนเพื่อประมวลผลและดำเนินงานที่เกี่ยวข้องกับธุรกิจในข้อมูลนั้น ฉันทำผิดพลาดที่นี่ …

2
รูปแบบพื้นที่เก็บข้อมูลกับการสร้างวัตถุ DAL
เท่าที่ผมได้เรียนรู้ที่ควรมีIRepository CRUDจากนั้นเราจะสืบทอดสิ่งนี้IRepositoryในอินเทอร์เฟซอื่นของเราที่ชอบIProductและใช้IProductคลาสที่เป็นรูปธรรมProductRepositoryด้วยวิธีการเช่นGetAllProducts(), Top5Products(). เราสามารถทำเช่นเดียวกันกับสถาปัตยกรรมระดับ n เช่นการสร้างDAL Class Libraryและในนั้นกำหนดชั้นเรียนProductด้วยวิธีการเช่น,GetAllProducts()Top5Products() ทั้งในDAL.ProductและRepo.ProductRepositoryชั้นเรียนที่เราเริ่มต้นDB ContextของEntity Frameworkและสอบถามข้อมูลที่เกี่ยวข้องของเรา การโทรคล้ายกันทั้งในRepo.ProductRepositoryหรือDAL.ProductจากวิธีการBLL ในมุมมองของความคล้ายคลึงกันเหล่านี้คำถามของฉัน Repos มีประโยชน์อย่างไร? ฉันสามารถทำเช่นเดียวกันกับความสะดวกมากโดยใช้สถาปัตยกรรม n ชั้นด้วย ( Controller, BLL Class Library, DAL Class Library)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.