จะแนะนำให้ใช้ ORM แทนขั้นตอนการจัดเก็บได้อย่างไร


31

ฉันทำงานที่ บริษัท ที่ใช้ขั้นตอนการจัดเก็บสำหรับการเข้าถึงข้อมูลทั้งหมดเท่านั้นซึ่งทำให้มันน่ารำคาญมากที่จะทำให้ฐานข้อมูลท้องถิ่นของเราตรงกันเนื่องจากทุกครั้งที่เราต้องเรียกใช้โปรแกรมใหม่ ฉันเคยใช้ ORM พื้นฐานบางอย่างในอดีตและฉันพบว่าประสบการณ์ดีขึ้นและสะอาดขึ้นมาก ฉันอยากจะแนะนำผู้จัดการฝ่ายพัฒนาและทีมอื่น ๆ ที่เราใช้ ORM เพื่อการพัฒนาในอนาคต (ทีมที่เหลือคุ้นเคยกับกระบวนการจัดเก็บเท่านั้นและไม่เคยใช้อะไรเลย) สถาปัตยกรรมปัจจุบันคือ. NET 3.5 ที่เขียนเหมือน. NET 1.1 โดยมี "god classes" ที่ใช้การดำเนินการแปลก ๆ ของ ActiveRecord และส่งกลับชุดข้อมูลที่ไม่ได้พิมพ์ซึ่งวนลูปในไฟล์ code-behind คลาสใช้งานดังนี้:

class Foo { 
    public bool LoadFoo() { 
        bool blnResult = false;
        if (this.FooID == 0) { 
            throw new Exception("FooID must be set before calling this method.");
        }

        DataSet ds = // ... call to Sproc
        if (ds.Tables[0].Rows.Count > 0) { 
            foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString();
            // other properties set
            blnResult = true;
        }
        return blnResult;
    }
}

// Consumer
Foo foo = new Foo();
foo.FooID = 1234;
foo.LoadFoo();
// do stuff with foo...

สวยมากไม่มีแอพพลิเคชั่นลวดลายการออกแบบใด ๆ ไม่มีการทดสอบใด ๆ (ไม่มีใครรู้วิธีเขียนการทดสอบหน่วยและการทดสอบจะทำผ่านการโหลดเว็บไซต์ด้วยตนเองและเจาะเข้าไป) มองผ่านฐานข้อมูลของเราเรามี: 199 ตาราง, 13 มุมมอง, 926ขั้นตอนการจัดเก็บมากและ 93 ฟังก์ชั่น มีการใช้ตารางประมาณ 30 ตารางสำหรับงานแบ็ตช์หรืองานภายนอกส่วนที่เหลือจะใช้ในแอปพลิเคชันหลักของเรา

มันคุ้มค่าที่จะใฝ่หาแนวทางที่แตกต่างในสถานการณ์นี้หรือไม่? ฉันกำลังพูดถึงการก้าวไปข้างหน้าเท่านั้นเนื่องจากเราไม่ได้รับอนุญาตให้สร้างรหัสใหม่เนื่องจาก "ใช้งานได้" ดังนั้นเราจึงไม่สามารถเปลี่ยนคลาสที่มีอยู่ให้ใช้ ORM ได้ แต่ฉันไม่รู้ว่าเราเพิ่มโมดูลใหม่บ่อยแค่ไหน ของการเพิ่ม / แก้ไขโมดูลปัจจุบันดังนั้นฉันไม่แน่ใจว่า ORM เป็นวิธีการที่เหมาะสมหรือไม่ (ลงทุนมากเกินไปในขั้นตอนการจัดเก็บและชุดข้อมูล) หากเป็นตัวเลือกที่ถูกต้องฉันจะนำเสนอกรณีการใช้งานได้อย่างไร จากด้านบนของหัวของฉันประโยชน์เดียวที่ฉันสามารถคิดได้คือการมีโค้ดที่สะอาดกว่า (แม้ว่ามันอาจจะไม่ใช่เพราะสถาปัตยกรรมปัจจุบันไม่ใช่ ' t สร้างขึ้นด้วย ORMs ในใจดังนั้นโดยทั่วไปเราจะเป็นคณะลูกขุน rigging ORMs เพื่อโมดูลในอนาคต แต่คนเก่าจะยังคงใช้ชุดข้อมูล) และยุ่งยากน้อยกว่าที่จะต้องจำว่าสคริปต์ขั้นตอนที่ได้รับการทำงานและที่จะต้องทำงาน ฯลฯ แต่นั่นแหละและฉันก็ไม่รู้ว่าการโต้แย้งที่น่าสนใจจะเป็นอย่างไร การบำรุงรักษาเป็นเรื่องกังวลอีกเรื่องหนึ่ง แต่ไม่มีใครนอกจากฉันดูเหมือนจะเป็นกังวล


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

6
กระแทกแดกดันฉันคิดว่าในการพัฒนาประมาณ 5 ปีฉันได้พบเพียงไม่กี่คน / ทีมที่ตระหนักถึงสิ่งต่าง ๆ เช่นรูปแบบการออกแบบและการทดสอบหน่วย ปกติฉันเป็นคนเดียวใน บริษัท ที่รู้เรื่องเหล่านี้
Wayne Molina

3
@ Wayne M: ฉันคิดว่ามันน่ารำคาญ แต่ฉันก็ไม่แปลกใจกับเรื่องนี้
เบอร์นาร์ด

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

2
ฉันเป็นแฟนตัวยงของขั้นตอนการจัดเก็บดังนั้นความคิดเห็นของฉันจึงลำเอียง แต่ฉันไม่เห็นด้วยกับหลักฐานทั้งหมด คุณชอบ ORM และคุณต้องการใช้สิ่งนี้ได้ดี อย่างไรก็ตามทีมอื่น ๆ ก็ทำได้ดีด้วย Stored procs ทำไมต้องบังคับพวกเขาในสิ่งที่คุณชอบ
Darknight

คำตอบ:


47

ขั้นตอนการจัดเก็บไม่ดีบ่อยครั้งพวกเขาจะช้าและประมาณว่ามีประสิทธิภาพเท่ากับโค้ดฝั่งไคลเอ็นต์ทั่วไป

[การเร่งความเร็วมักเกิดจากวิธีที่ไคลเอนต์และอินเทอร์เฟซกระบวนงานที่เก็บไว้ได้รับการออกแบบและวิธีการทำธุรกรรมจะถูกเขียนเป็นช่วงสั้น ๆ ซึ่งจะเน้นไปที่ SQL]

ขั้นตอนการจัดเก็บเป็นหนึ่งในสถานที่ที่เลวร้ายที่สุดในการใส่รหัส แอปพลิเคชันของคุณแบ่งเป็นสองภาษาและแพลตฟอร์มตามกฎที่มักจะสุ่ม

[คำถามนี้จะถูกลดระดับลงจนมีคะแนนประมาณ -30 เพราะหลายคนรู้สึกว่ากระบวนการจัดเก็บมีพลังเวทย์มนตร์และต้องใช้แม้จะมีปัญหาที่เกิดขึ้น]

การย้ายรหัสกระบวนงานที่เก็บไว้ทั้งหมดไปยังไคลเอนต์จะทำให้ทุกคนง่ายขึ้นสำหรับทุกคน

คุณยังคงต้องอัปเดตโมเดลสคีมาและ ORM เป็นครั้งคราว อย่างไรก็ตามการเปลี่ยนแปลงสคีมาถูกแยกออกจากการเปลี่ยนแปลง ORM ซึ่งอนุญาตให้มีความเป็นอิสระระหว่างแอปพลิเคชันและสคีมาฐานข้อมูล

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

ORM นั้นไม่ได้วิเศษและทักษะการออกแบบฐานข้อมูลที่ดีนั้นเป็นสิ่งจำเป็นอย่างยิ่งที่จะทำให้มันใช้งานได้

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

ORM ไม่ได้บังคับใช้การออกแบบธุรกรรมอย่างระมัดระวัง การออกแบบธุรกรรมยังคงต้องทำอย่างระมัดระวังเช่นเดียวกับเมื่อเขียนขั้นตอนการจัดเก็บ


19
+1 เนื่องจากขั้นตอนการจัดเก็บเป็นความเจ็บปวดโดยรวมในการทำงานกับ
Gary Rowe

3
: '(ฉันไม่มีปัญหากับขั้นตอนการจัดเก็บมันเป็นเพียงอีกชั้นหนึ่งที่เป็นนามธรรมสำหรับฉัน
Mike Weller

3
ถ้าเราสร้าง SP แล้วโปรแกรมฐานข้อมูลจะจัดเก็บเป็นรูปแบบที่รวบรวมและสร้างเส้นทางการดำเนินการเพื่อที่จะดำเนินการโดยเร็วที่สุด แต่ออมส่ง SQL ทุกครั้งที่จะต้องรวบรวมและเรียกใช้โดยโปรแกรมฐานข้อมูล ฉันคิดว่าการใช้ ORM จะช้ากว่าการใช้ Stored Procedure
DeveloperArnab

4
ตลก. เราเปลี่ยนกลับจาก ORM เป็นขั้นตอนการจัดเก็บเพียงเพราะ .. ความเร็ว ไม่ใช่ระยะเวลาที่เราต้องการสำหรับการเขียนโปรแกรม แต่เวลาที่ ORM ต้องการสิ่งต่าง ๆ เช่นวัตถุที่เป็นรูปธรรมค้นหาวัตถุอัปเดตไคลเอ็นต์ที่แตกต่างกัน SP ที่นรกเร็วกว่ามาก ตัวอย่างหนึ่ง: การอ่านวัตถุ 30,000 รายการจากฐานข้อมูลพร้อมด้วย ORM ที่ทันสมัยใหม่ต้องการ ... หมดเวลาหลังจาก 2 นาที เรียกขั้นตอนที่เก็บไว้และรับผล - 2 วินาที ใช่ - มีเทคนิคมากมายเช่นเพจจิ้งเพื่อลด callign ให้มากจาก DB - แต่แตกต่างกันมากถ้าพวกเขาเป็นเพียงแค่ว่า ORM สามารถใช้หรือเพื่อ
Offler

2
@DeveloperArnab: นั่นอาจเป็นจริงเมื่อ 20 ปีที่แล้ว แต่เครื่องมือฐานข้อมูลที่ทันสมัยนั้นค่อนข้างซับซ้อนและสามารถรับรู้การสืบค้นก่อนหน้านี้และแผนการใช้งานซ้ำความแตกต่างของความเร็วในปัจจุบันค่อนข้างเล็กน้อยทำให้แทบไม่ต้องกังวลเรื่อง SPs อีก
whatsisname

20

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

ฉันสงสัยว่า DBA กำลังนั่งอยู่ที่นั่นพูดว่า "โอ้ทุกการกระทำฉันต้องดึงลูกค้าลงมาอีกครั้งเราควรย้ายรหัสทั้งหมดไปยังฟอร์ม DB แทน"

ในกรณีของคุณคุณควรจะสามารถแทนที่ ORM ที่กำหนดเองที่มีอยู่ (เช่นคลาสที่ตลกของคุณ) กับคนอื่นโดยไม่มีการสูญเสียใด ๆ ยกเว้นการเปลี่ยนแปลงวิธีการเขียนโค้ดที่ล้าหลังของคุณ คุณสามารถทำให้ SPs เป็นไปได้มากที่สุด (ทั้งหมด?) ORMs จะเรียกพวกเขาอย่างมีความสุข ดังนั้นฉันขอแนะนำให้แทนที่คลาส "Foo" ด้วย ORM และไปจากที่นั่น ฉันจะไม่แนะนำให้เปลี่ยน SP ของคุณ

PS ดูเหมือนว่าคุณมีรหัสทั่วไปจำนวนมากในคลาส behind รหัสที่ทำให้พวกเขาเป็นรูปแบบการออกแบบในตัวเอง คุณคิดว่ารูปแบบการออกแบบเป็นสิ่งแรก! (โอเคมันอาจจะไม่ดีที่สุดหรือดีกว่า แต่ก็ยังเป็น DP)

แก้ไข: และตอนนี้ด้วยDapperเหตุผลใด ๆ ที่จะหลีกเลี่ยง sprocs มากกว่า ORM เฮฟวี่เวทหายไป


3
+1 ขั้นตอนแรกที่ชัดเจนคือการย้ายไปยัง ORM และใช้เพื่อแมปผลลัพธ์ของโพรซีเดอร์ที่เก็บอยู่กับวัตถุ กำจัดds.Tables[0].Rows[0]["FooName"].ToString()อึทั้งหมดนั้น ผู้จัดการชอบขั้นตอนการจัดเก็บ? เขาจะเก็บพวกมันไว้ แต่มันเป็นไปไม่ได้ทางร่างกายที่จะโต้แย้งว่าการย้ายรหัสสำเร็จรูปที่ซ้ำซ้อนไปเป็นสิ่งที่สร้างขึ้นโดยการพูด LINQ ไปยัง SQL นั้นเป็นสิ่งที่ไม่ดี
Carson63000

11
ฉันไม่อยากจะเชื่อเลยว่า "ผิด" ในบทความของคุณ การเปรียบเทียบของคุณกับ DBA ที่คร่ำครวญเกี่ยวกับการดึงรหัสนั้นไม่เหมาะสมและหมดสติอย่างสมบูรณ์ ก่อนอื่นฐานข้อมูลคือบริการที่มีไว้เพื่อจัดเก็บและเรียกใช้ข้อมูลในตอนท้ายของเรื่องราว LOGIC เมื่อชื่อมีความหมายจะเข้าสู่ Business Logic Layer ซึ่งเป็นส่วนหนึ่งของรหัส API แอพพลิเคชั่นเคลื่อนไหวได้ง่ายกว่า Sprocs ไหม? คุณจริงจังหรือหลอกเพียงแค่? TDD แอปที่มีตรรกะใน sprocs และบอกฉันว่ามันสนุกขนาดไหน นอกจากนี้ยังไม่ได้หมายถึงการเปลี่ยน ORMs ฐานข้อมูลเป็นเพราะพวกเขาเป็นเพียงบริการ
Matteo Mosca

5
ฉันไม่เข้าใจจริง ๆ ว่าทำไมบางคนคิดว่าฐานข้อมูลเป็นดินแดนศักดิ์สิทธิ์บางอย่างที่ทุกสิ่งศักดิ์สิทธิ์ คิดเกี่ยวกับสิ่งนี้. เมื่อ บริษัท บุคคลที่สามให้บริการแก่คุณพวกเขาจะให้คุณเข้าถึงฐานข้อมูลของพวกเขาโดยตรงหรือพวกเขาปิดบังเบื้องหลัง API หรือไม่ ในการใช้ตัวอย่างที่เป็นที่นิยมใช้บริการใด ๆ ของ Google คุณผู้พัฒนาเชื่อมต่อกับ API สาธารณะของพวกเขาคุณไม่รู้ด้วยซ้ำว่าฐานข้อมูลใดอยู่ภายใต้หรือถ้ามีฐานข้อมูลอยู่เลย นั่นคือวิธีที่คุณออกแบบซอฟต์แวร์ที่แข็งแกร่งและแยกได้ แอปพลิเคชันไม่ได้เข้าถึงฐานข้อมูลโดยตรง ชั้นกลางอยู่ตรงนั้น
Matteo Mosca

5
@Matteo Mosca: แน่นอน แต่มิดเดิ้ลเข้าถึง DB ได้อย่างไร ... มันเป็นไคลเอนต์ไปยัง DB "ลูกค้า" ไม่ได้หมายถึง "GUI" หรือ "แอปเดสก์ท็อป" มีพื้นที่สีเทามากมายในระดับแอปพลิเคชัน - คุณใส่การตรวจสอบใน GUI หรือในเซิร์ฟเวอร์ / ตรรกะทางธุรกิจหรือไม่ ควรไปที่เซิร์ฟเวอร์เพื่อให้ได้การออกแบบที่สะอาดตา แต่นั่นจะแย่มากต่อประสิทธิภาพและการตอบสนองของผู้ใช้ ในทำนองเดียวกันคุณมักจะใส่ตรรกะบางอย่างในฐานข้อมูลเมื่อมันทำให้ประสิทธิภาพและ (ในกรณีนี้) ข้อมูลถูกต้องดีขึ้น
gbjbaanb

4
ฉันขอโทษ แต่ฉันก็ยังไม่เห็นด้วย วันที่คุณต้องปรับใช้แอปพลิเคชันของคุณในสภาพแวดล้อมที่แตกต่างกันโดยที่คุณไม่มีเทคโนโลยี DB เดียวกับที่คุณใช้คุณจะพบว่าตัวเองอยู่ในสถานการณ์ที่แอพของคุณไม่สามารถทำงานได้เพราะคุณไม่มี sprocs ทั้งหมดบนฐานข้อมูลใหม่ .. และแม้ว่าคุณจะสร้างมันขึ้นมาใหม่ (ซึ่งเป็นความเจ็บปวดทั้งหมด) พวกเขาอาจจะแตกต่างกันเนื่องจากความแตกต่างของภาษา SQL ฯลฯ API ที่รวมศูนย์ด้วยตรรกะและการตรวจสอบความถูกต้องเปิดเผยผ่านมาตรฐาน (เช่น SOAP หรือ REST) ปัญหาและเพิ่มความสามารถในการทดสอบการกำหนดเวอร์ชันและความสอดคล้อง
Matteo Mosca

13

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

รหัสการนำไปใช้งานแบบบันทึกที่ยังไม่ได้โพสต์นั้นไม่ได้มีความสง่างามเป็นพิเศษ - ผมขอแนะนำให้ศึกษารูปแบบของพื้นที่เก็บข้อมูลที่เข้าใจง่ายและนำไปใช้และเป็นที่นิยมในหมู่นักพัฒนา. NET รูปแบบนี้มักจะเกี่ยวข้องกับ ORM แต่ก็เป็นเรื่องง่ายที่จะสร้างที่เก็บโดยใช้ ADO.NET ธรรมดา

สำหรับชุดข้อมูล - yuck! ไลบรารีคลาสของคุณจะทำงานได้ง่ายขึ้นถ้าคุณส่งคืนวัตถุที่พิมพ์แบบคงที่ (หรือแบบไดนามิก) ฉันเชื่อว่าภาพประกอบนี้อธิบายความคิดเห็นของฉันเกี่ยวกับชุดข้อมูลได้ดีกว่าที่ฉันสามารถทำได้

นอกจากนี้คุณสามารถทิ้ง proc ที่เก็บไว้โดยไม่ต้องกระโดดไปที่ ORM - ไม่มีอะไรผิดปกติกับการใช้ SQL ที่มีพารามิเตอร์ ในความเป็นจริงฉันชอบมันมากกว่าการใช้ proc ที่เก็บไว้ของเว้นแต่คุณจะมีขั้นตอนที่ซับซ้อนที่ประหยัดในการเดินทางไปกลับหลายรอบไปยังเซิร์ฟเวอร์ ฉันเกลียดเมื่อเปิดฐานข้อมูลดั้งเดิมและดูรายการ CRUD ที่ไม่รู้จบ

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


2
ฉันคิดว่าปัญหานี้เกิดขึ้นเมื่อแอปถูกเขียนขึ้นมานั้นไม่มี ORMs จริง ๆ ของบันทึกย่อของ. NET ดังนั้นจึงทำในลักษณะอื่น (วิธี ASP.NET 1.1) และไม่มีใครเคยคิดที่จะทำมัน (หรืออย่างอื่น) จนกว่าฉันจะเข้าร่วมไม่กี่เดือนที่ผ่านมา
Wayne Molina

1
+1 สำหรับ Dapper ฉันเพิ่งเริ่มใช้มันในโครงการและมันง่ายมากที่จะติดตั้งและใช้งาน ฉันเป็นแฟนตัวยงอยู่แล้ว
Sloret

4

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

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


3

JFTR - ฉันเป็นนักพัฒนา PHP ต่ำ แต่ดูเหมือนว่าปัญหาทางการเมืองส่วนใหญ่

เมื่อพิจารณาถึงระดับของ "เน่า" ที่เพิ่มขึ้นของแอปแล้ว - แนวทางปฏิบัติที่ดีที่สุด - จะมีค่าใช้จ่ายที่สำคัญในการรูทมัน ดูเหมือนว่ามันจะติดกับดินแดนที่เขียนใหม่

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

ORM เป็นทางเลือกเดียวสำหรับ SPROCS หรือไม่ มีสองรูปแบบการออกแบบระหว่าง ORM แบบเต็มเป่าและวานิลลา SQL บางทีคุณสามารถเริ่มต้นกระบวนการด้วยการนำ SPROCS เหล่านี้ออกจากฐานข้อมูลเป็น DBAL มีอันตรายที่แน่นอนว่าสิ่งนี้จะกลายเป็น ORM ของ homebrew เมื่อเวลาผ่านไป - แต่คุณจะเข้าใกล้วัตถุประสงค์ได้มากขึ้น


2

เราเปลี่ยนจาก SP เป็น ORM เมื่อสองสามปีก่อน

ในกรณีหนึ่งเราต้องอัปเดต 80 ตาราง แบบจำลองการประมาณค่าแบบเก่าจะใช้เวลาประมาณ 80 ชั่วโมงสำหรับสิ่งนี้ด้วย entlib และ SP เราทำได้ใน 10 :)

มันทำให้เราลดลง 80% ในระยะเวลาที่เราใช้ในการพัฒนาชั้นการเข้าถึงข้อมูล


1
และคุณไม่สามารถสคริปต์การอัปเดตตารางทำไม?
Darknight

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

-1

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

อาจง่ายกว่าในการตั้งค่าเอ็นจินการสร้างต่อเนื่องซึ่งรู้วิธีจัดการฐานข้อมูลตามต้องการหลังจากการคอมมิตแต่ละครั้ง

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