ทำไมฉันถึงใช้ Scala / Lift บน Java / Spring [ปิด]


151

ฉันรู้ว่าคำถามนี้เปิดอยู่เล็กน้อย แต่ฉันดู Scala / Lift แทน Java / Spring และฉันสงสัยว่าข้อดีที่แท้จริงที่ Scala / Lift มีอยู่นั้นคืออะไร จากมุมมองและประสบการณ์ของฉัน Java Annotations และ Spring ลดจำนวนการเข้ารหัสที่คุณต้องทำสำหรับแอปพลิเคชันให้น้อยที่สุด สกาลา / ลิฟท์ปรับปรุงตามนั้นหรือไม่?


คำถามนั้นเก่าเกินไป แต่ตอนนี้คำถามจะเป็น "ทำไมฉันจึงควรใช้ Scala / Play over XYX" และมีเหตุผลที่ดีมากมาย ฉันย้ายไปเล่นและไม่เคยมองย้อนกลับไป
Jus12

คำตอบ:


113

สมมติว่าเรามีความสะดวกสบายอย่างเท่าเทียมกันใน Scala และ Java และไม่สนใจความแตกต่างทางภาษา (ใหญ่) ยกเว้นที่เกี่ยวข้องกับ Spring หรือ Lift

สปริงและลิฟท์นั้นแทบจะไม่เห็นด้วยในแง่ของวุฒิภาวะและเป้าหมาย

  • ฤดูใบไม้ผลิมีอายุมากกว่าลิฟต์ห้าปี
  • การยกเป็นเสาหินและมีเป้าหมายเฉพาะเว็บ Spring เป็นโมดูลแยกส่วนและกำหนดเป้าหมายทั้งแอปพลิเคชันเว็บและ "ปกติ"
  • Spring รองรับคุณสมบัติ Java EE มากมายเหลือเฟือ ลิฟท์ไม่สนใจสิ่งนั้น

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

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

  1. ดูปรัชญา

    ลิฟท์สนับสนุนให้วางเนื้อหามุมมองบางส่วนในวิธีการโค้ด / การกระทำ โค้ดตัวอย่างจะถูกโปรยด้วยองค์ประกอบแบบฟอร์มที่สร้างขึ้นโดยทางโปรแกรม, <div>s, <p>s, เป็นต้น

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

    ในทางตรงกันข้ามการใช้งานปกติของ Spring สำหรับ webapps บังคับให้มีการแยกที่ชัดเจนระหว่างมุมมองและทุกสิ่ง ฉันคิดว่า Spring สนับสนุนเครื่องมือสร้างแรงจูงใจหลายอย่าง แต่ฉันใช้ JSP ในสิ่งที่ร้ายแรง การออกแบบ "FVCy MVC" ที่ได้แรงบันดาลใจจากลิฟต์ด้วย JSP นั้นเป็นเรื่องที่บ้าคลั่ง นี่เป็นสิ่งที่ดีสำหรับโครงการขนาดใหญ่ที่เวลาในการอ่านและทำความเข้าใจสามารถครอบงำได้

  2. ตัวเลือก Mapper เชิงวัตถุ

    ORM ที่มีอยู่ภายในของลิฟต์คือ "Mapper" มีทางเลือกใหม่ที่เรียกว่า "บันทึก" แต่ฉันคิดว่ามันยังถือว่าเป็น pre-alpha หนังสือ LiftWeb มีส่วนเกี่ยวกับการใช้ทั้ง Mapper และ JPA

    ยกระดับคุณสมบัติCRUDifyให้เย็นเท่ห์ใช้งานได้เฉพาะกับ Mapper (ไม่ใช่ JPA)

    แน่นอนว่า Spring รองรับชุดฐานข้อมูลมาตรฐานและ / หรือเทคโนโลยีที่ครบกำหนด คำผ่าตัดที่มี "รองรับ" ตามหลักวิชาคุณสามารถใช้ Java ORM ด้วย Lift ได้เนื่องจากคุณสามารถเรียกใช้โค้ด Java จาก Scala แต่ Lift เท่านั้นสนับสนุน Mapper และ JPA (ในระดับที่น้อยกว่ามาก) นอกจากนี้การทำงานกับโค้ด Java ที่ไม่น่าสนใจใน Scala นั้นในปัจจุบันยังไม่ราบรื่นเท่าที่ควร การใช้ Java ORM คุณอาจพบว่าตัวเองกำลังใช้ทั้งคอลเลกชัน Java และ Scala ทุกที่หรือแปลงคอลเลกชันทั้งหมดเข้าและออกจากองค์ประกอบ Java

  3. องค์ประกอบ

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

    ฤดูใบไม้ผลิค่อนข้างยืดหยุ่นในแง่ของการกำหนดค่า ตัวเลือก conf จำนวนมากสามารถขับเคลื่อนผ่านการกำหนดค่า XML หรือคำอธิบายประกอบ

  4. เอกสาร

    เอกสารของลิฟต์มีอายุน้อย เอกสารของ Spring นั้นค่อนข้างสมบูรณ์ ไม่มีการแข่งขัน

    เนื่องจากเอกสารของ Spring มีการจัดระเบียบอย่างดีและหาง่ายฉันจะตรวจสอบเอกสารที่ฉันพบสำหรับ Lift โดยทั่วไปแล้วมีแหล่งข้อมูลเกี่ยวกับลิฟท์ 4 แหล่ง ได้แก่LiftWeb Book , API เอกสาร , กลุ่ม Googleของ LiftWeb และ " เริ่มต้นใช้งาน " นอกจากนี้ยังมีชุดโค้ดตัวอย่างที่ดี แต่ฉันจะไม่เรียกพวกเขาว่า "เอกสาร" ต่อ se

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

    แต่ลิฟท์นั้นมีตัวอย่างที่ดี หากคุณสะดวกสบายในการอ่านรหัสยกและรหัสตัวอย่าง (และคุณรู้ว่าสกาล่าเป็นอย่างดีอยู่แล้ว) คุณสามารถทำงานในลำดับที่ค่อนข้างสั้น

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


10
คำตอบที่ดีจุดหนึ่งที่ฉันไม่เห็นด้วยคือ: ฤดูใบไม้ผลิเป็นเฮฟวี่เวท มันมี APIS ที่ดีหลากหลายและกำหนดวิธีการทำงานบางอย่างที่จำเป็นเพื่อให้ได้ผลลัพธ์ที่ดี แต่เมื่อเทียบกับ J2EE สิ่งที่มันมาแทนที่เดิมนั้นเป็นโซลูชันที่มีน้ำหนักเบากว่ามาก แน่นอนว่า "ความเบา" อยู่ในสายตาของคนดูดังนั้นนี่จึงเป็นข้อโต้แย้งที่เป็นอัตวิสัย เพียงแค่ 2 เซ็นต์ของฉันแล้ว
Brian

3
คำตอบที่ดีวัตถุประสงค์มาก ลิฟท์ทำสิ่งที่ดูฉลาดเกินไปซึ่งโง่มาก การย้ายตรรกะของเพจไปที่แบ็กเอนด์โดยผสม HTML กับโค้ดสกาล่าซึ่งแย่กว่าแท็กควบคุมภายในเทมเพลตหน้า ฉันไม่รู้ว่าทำไมพวกเขาถึงทำเช่นนี้บางทีพวกเขาคิดว่า Scala ต้องประมวลผล XML อย่างรวดเร็วอย่างน่าทึ่ง "คู่มือการแตกหักเพื่อยกระดับ" เป็นหนังสือเทคโนโลยีที่แย่ที่สุดที่ฉันเคยอ่าน
Sawyer

ฉันไม่คุ้นเคยกับการยกเท่าที่ฉันต้องการ ในความเห็นของคุณการทำ wrapper สำหรับวัตถุสำหรับบูตนั้นอ่านการตั้งค่าจากไฟล์ xml ได้อย่างไร ความประทับใจแรกของฉันคือเนื่องจาก scala จัดการ xml ได้ดีมากมันจึงไม่ยากอย่างยิ่ง
Ape-inago

Sawyer ความจริงที่ว่าคุณสามารถผสม HTML กับโค้ดสกาล่าไม่ได้บอกว่าคุณต้องทำ การใช้ตัวอย่างอย่างชาญฉลาดจะแยกโค้ด HTML และ Scala ออก แต่เดี๋ยวก่อนติดตามการใช้แท็กควบคุมของคุณ;)
Alebon

1
@Dan, มีการปรับปรุงใด ๆ ในตอนนี้ว่า Lift นั้นเก่าเป็นสองเท่าเหมือนตอนที่คุณเขียนครั้งแรก?
Pacerier

229

ฉันต้องบอกว่าฉันไม่เห็นด้วยอย่างยิ่งกับคำตอบของ Dan LaRocque

ลิฟท์ไม่ได้เป็นเสาหิน มันประกอบด้วยองค์ประกอบที่ไม่ต่อเนื่อง มันไม่ได้เพิกเฉยต่อองค์ประกอบ J / EE แต่ก็รองรับการกด JNDI, JTA, JPA และอื่น ๆ ความจริงที่ว่าคุณไม่ได้บังคับให้ใช้องค์ประกอบเหล่านี้ของ J / EE เป็นตัวบ่งชี้ที่แข็งแกร่งของการออกแบบโมดูลของลิฟต์

  • ปรัชญาการมองของลิฟต์คือ "ให้นักพัฒนาตัดสินใจ" ลิฟท์เสนอกลไกการสร้างแม่แบบที่ไม่อนุญาตให้รหัสตรรกะใด ๆ ในมุมมองของกลไกมุมมองบนพื้นฐานของการดำเนินรหัส Scala และสกาล่าของตัวอักษร XML และกลไกมุมมองบนพื้นฐานของScalate หากคุณเลือกกลไกการสร้างเทมเพลต XML คุณจะต้องเลือกว่าจะมี mark-up เท่าใดในตรรกะทางธุรกิจของคุณ การแยกมุมมองของลิฟต์นั้นแข็งแกร่งกว่าสิ่งที่สปริงมีให้เพราะคุณไม่สามารถแสดงตรรกะทางธุรกิจใด ๆ ในแม่แบบ XML ของลิฟต์
  • วัตถุประสงค์ของลิฟต์↔ปรัชญาการดำรงอยู่คือ "ให้ผู้พัฒนาตัดสินใจ" Lift มี Mapper ซึ่งเป็น Mapper เชิงสัมพันธ์เชิงวัตถุสไตล์ ActiveRecord มันทำให้งานสำเร็จสำหรับโครงการขนาดเล็ก ลิฟท์รองรับ JPA Lift มี abstraction บันทึกที่รองรับการเคลื่อนย้ายวัตถุเข้าและออกจากฐานข้อมูลเชิงสัมพันธ์เข้าและออกจากร้านค้า NoSQL (Lift รวมการสนับสนุนแบบดั้งเดิมสำหรับ CouchDB และ MongoDB แต่ชั้นอะแดปเตอร์เป็นโค้ดสองสามร้อยบรรทัดดังนั้นถ้าคุณต้องการ Cassandra หรือ อย่างอื่นมันไม่ใช่งานที่ต้องทำมากมาย) โดยพื้นฐานแล้วการยก Web Framework นั้นไม่ได้ขึ้นอยู่กับว่าวัตถุจะถูกทำให้เป็นรูปเป็นร่างได้อย่างไร นอกจากนี้เซสชั่นและรอบการร้องขอจะเปิดขึ้นเช่นการแทรก hooks การทำธุรกรรมลงในวงจรการร้องขอ / การตอบสนองเป็นเรื่องง่าย
  • ปรัชญาของลิฟต์คือ "ทีมเซิร์ฟเวอร์จำเป็นต้องรู้ภาษาเดียวไม่ใช่หลายภาษา" ซึ่งหมายความว่าการกำหนดค่าจะทำผ่าน Scala ซึ่งหมายความว่าเราไม่ต้องใช้ 40% ของการสร้างภาษาของ Java ในไวยากรณ์ XML เพื่อสร้างตัวเลือกการกำหนดค่าที่ยืดหยุ่น หมายความว่าไวยากรณ์คอมไพเลอร์และตรวจสอบข้อมูลการกำหนดค่าเพื่อให้คุณไม่ได้รับการแยกวิเคราะห์ XML ที่แปลกประหลาดหรือข้อมูลที่ไม่ถูกต้องตอนรันไทม์ หมายความว่าคุณไม่จำเป็นต้องมี IDE ที่เข้าใจรายละเอียดของคำอธิบายประกอบที่คุณใช้โดยอ้างอิงจากไลบรารีที่คุณใช้งานอยู่
  • ใช่แล้วเอกสารของลิฟต์ไม่ได้เป็นจุดแข็ง

จากที่กล่าวมาข้างต้นให้ฉันพูดเกี่ยวกับปรัชญาการออกแบบของลิฟต์

ฉันเขียนWeb Framework Manifestoก่อนที่จะเริ่มเขียน Lift ในระดับที่ดีและในระดับที่สูงกว่าความเป็นจริงสำหรับเว็บเฟรมเวิร์กอื่น ๆ ที่ฉันรู้จัก Lift จะบรรลุเป้าหมายเหล่านี้

ยกที่แกนของมันพยายามที่จะทำให้นามธรรมรอบคำขอ / การตอบสนองของ HTTP มากกว่าการวางวัตถุล้อมรอบคำขอ HTTP ในระดับการปฏิบัติซึ่งหมายความว่าการกระทำส่วนใหญ่ที่ผู้ใช้สามารถทำได้ (การส่งองค์ประกอบแบบฟอร์มการทำ Ajax และอื่น ๆ ) จะถูกแสดงด้วย GUID ในเบราว์เซอร์และฟังก์ชั่นบนเซิร์ฟเวอร์ เมื่อมีการนำเสนอ GUID เป็นส่วนหนึ่งของคำขอ HTTP ฟังก์ชันจะถูกนำไปใช้ (เรียกว่า) พร้อมกับพารามิเตอร์ที่ให้มา เนื่องจาก GUID นั้นยากต่อการคาดเดาและเฉพาะเซสชันการโจมตีซ้ำและการโจมตีที่มีพารามิเตอร์หลายตัวนั้นทำได้ยากกว่าการใช้ Lift มากกว่าเฟรมเวิร์กเว็บอื่น ๆ รวมถึง Spring นอกจากนี้ยังหมายความว่านักพัฒนาซอฟต์แวร์มีประสิทธิผลมากขึ้นเนื่องจากพวกเขามุ่งเน้นไปที่การกระทำของผู้ใช้และตรรกะทางธุรกิจที่เกี่ยวข้องกับการกระทำของผู้ใช้มากกว่าการวางระบบการบรรจุและการร้องขอ HTTP

ajaxButton("Accept", () => {request.accept.save; 
                            SetHtml("acceptrejectspan", <span/>}) ++ 
ajaxButton("Reject", () => {request.reject.save; 
                            SetHtml("acceptrejectspan", <span/>})

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

ดังนั้นความแตกต่างที่สำคัญอย่างหนึ่งระหว่างลิฟต์กับสปริงคือปรัชญาของ GUID ของลิฟต์ที่เกี่ยวข้องกับฟังก์ชั่นนั้นมีข้อดีสองประการคือการรักษาความปลอดภัยที่ดีขึ้นและผลผลิตของนักพัฒนาที่ดีขึ้นมาก GUID -> การเชื่อมโยงของฟังก์ชั่นได้รับการพิสูจน์แล้วว่ามีความทนทานมาก ... งานโครงสร้างเดียวกันสำหรับรูปแบบปกติอาแจ็กซ์ดาวหางพ่อมดหลายหน้าเป็นต้น

ชิ้นส่วนหลักของลิฟต์ถัดไปคือการเก็บภาพนามธรรมระดับสูงไว้ให้นานที่สุด ในด้านการสร้างหน้านั้นหมายถึงการสร้างหน้าเป็นองค์ประกอบ XHTML และทำให้หน้าเป็น XHTML จนกว่าจะได้รับการตอบกลับ ประโยชน์คือความต้านทานต่อข้อผิดพลาดการเขียนสคริปต์ข้ามไซต์ความสามารถในการย้ายแท็ก CSS ไปที่ส่วนหัวและสคริปต์ที่ด้านล่างของหน้าหลังจากสร้างหน้าเสร็จแล้วและความสามารถในการเขียนหน้าใหม่ตามเบราว์เซอร์เป้าหมาย ในด้านอินพุต URL สามารถเขียนใหม่เพื่อดึงพารามิเตอร์ (ทั้งพารามิเตอร์การสืบค้นและพารามิเตอร์พา ธ ) ในลักษณะที่ปลอดภัยระดับสูงข้อมูลการตรวจสอบความปลอดภัยพร้อมใช้งานสำหรับการประมวลผลเร็วมากในรอบคำขอ ตัวอย่างเช่นต่อไปนี้เป็นวิธีการกำหนดการให้บริการคำขอ REST:

  serve {
    case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
    case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
  }

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

ด้วยชิ้นส่วนหลักสองชิ้นนี้ลิฟต์จึงมีข้อได้เปรียบอย่างมากในเรื่องความปลอดภัย เพื่อให้คุณทราบถึงความสำคัญของความปลอดภัยของลิฟต์ที่ไม่สามารถเข้าถึงฟีเจอร์ต่างๆได้Rasmus Lerdorgซึ่งทำหน้าที่รักษาความปลอดภัยให้กับ Yahoo! มีเรื่องนี้จะพูดเกี่ยวกับ FourSquare (หนึ่งในเว็บไซต์เด็กโปสเตอร์ยก):

สี่ดาวใน @foursquare - ไซต์ที่ 1 ในขณะที่ฉันดูดีว่าไม่มีปัญหาด้านความปลอดภัยเดียว (ที่ฉันสามารถหาได้) - http://twitter.com/rasmus/status/5929904263

ในขณะนั้น FourSquare มีวิศวกรคนหนึ่งทำงานเกี่ยวกับรหัส (ไม่ใช่ว่า @harryh ไม่ใช่คนฉลาดหลักแหลม) และเป้าหมายหลักของเขาคือการเขียนเวอร์ชัน PHP ของ FourSquare อีกครั้งในขณะที่ต้องรับมือกับปริมาณการใช้ข้อมูลที่เพิ่มขึ้นทุกสัปดาห์

ส่วนสุดท้ายของการรักษาความปลอดภัยของลิฟต์คือ SiteMap มันเป็นการควบคุมการเข้าถึงแบบครบวงจรการนำทางไซต์และระบบเมนู ผู้พัฒนากำหนดกฎการควบคุมการเข้าถึงสำหรับแต่ละหน้าโดยใช้รหัส Scala (เช่นIf(User.loggedIn _)หรือIf(User.superUser _)) และกฎการควบคุมการเข้าถึงเหล่านั้นจะถูกนำไปใช้ก่อนที่การแสดงผลหน้าเว็บใด ๆ จะเริ่มขึ้น นี่คล้ายกับ Spring Security ยกเว้นว่ามันถูกอบเข้ามาตั้งแต่เริ่มต้นของโครงการและกฎการควบคุมการเข้าถึงจะรวมเป็นหนึ่งเดียวกับส่วนที่เหลือของแอปพลิเคชันดังนั้นคุณไม่จำเป็นต้องมีกระบวนการในการปรับปรุงกฎความปลอดภัยใน XML เมื่อ URL เปลี่ยนแปลงหรือวิธีการที่คำนวณการเปลี่ยนแปลงการควบคุมการเข้าถึง

เพื่อสรุปจนถึงปัจจุบันปรัชญาการออกแบบของลิฟต์ช่วยให้คุณได้รับประโยชน์จากการอบการควบคุมการเข้าถึงการต่อต้านช่องโหว่ด้านความปลอดภัย OWASP 10 อันดับแรกการสนับสนุน Ajax ที่ดีขึ้นมากและผลผลิตของนักพัฒนาที่สูงกว่า Spring

แต่ลิฟท์ยังให้การสนับสนุน Comet ที่ดีที่สุดสำหรับกรอบงานเว็บใด ๆ นั่นเป็นเหตุผลที่ Novell เลือกใช้ Lift เพื่อเพิ่มพลังให้กับผลิตภัณฑ์ Pulseของพวกเขาและนี่คือสิ่งที่ Novell กล่าวถึงเกี่ยวกับ Lift:

Lift เป็นเว็บเฟรมเวิร์กที่ช่วยให้คุณในฐานะนักพัฒนาเพื่อมุ่งเน้นไปที่ภาพใหญ่ คุณสมบัติการพิมพ์ที่แข็งแกร่งแสดงออกอย่างชัดเจนและระดับสูงขึ้นเช่นการรองรับ Comet ในตัวช่วยให้คุณสามารถมุ่งเน้นไปที่การสร้างสรรค์แทนที่จะใช้ระบบประปา การสร้างเว็บแอปพลิเคชั่นที่สมบูรณ์แบบเรียลไทม์เช่น Novell Pulse ต้องการกรอบการทำงานที่มีประสิทธิภาพของ Lift ภายใต้หน้ากาก

ดังนั้นลิฟท์ไม่ได้เป็นเพียงกรอบ MVC ฉันเหมือนกัน มันเป็นเฟรมเวิร์กที่มีหลักการออกแบบหลักที่อยู่ด้านหลังซึ่งมีความสมบูรณ์มาก มันเป็นเฟรมเวิร์กที่ให้ข้อดีด้านความปลอดภัยและประสิทธิผลของนักพัฒนา Lift เป็นเฟรมเวิร์กที่สร้างขึ้นในเลเยอร์และให้ทางเลือกที่เหมาะสมกับนักพัฒนาตามความต้องการของพวกเขา ... ตัวเลือกสำหรับการสร้างมุมมองตัวเลือกสำหรับการคงอยู่เป็นต้น

Scala และ Lift ช่วยให้นักพัฒนาได้รับประสบการณ์ที่ดีกว่าการผสมผสานของ XML การเพิ่มความคิดเห็นและสำนวนอื่น ๆ ที่ประกอบกันเป็น Spring


2
รุ่นที่เก็บถาวรของ blog.lostlake.org/index.php?/archives/16-Web-Framework-Manifesto.html มีอยู่ที่replay.web.archive.org/20070220231839/http://blog.lostlake.org/
Alan Hecht

1
คุณมีฉันที่ MongoDB สนับสนุนพื้นเมือง ... ฉันอยู่ใน
Eran Medan

8
ฉันเขียน webapps มาตั้งแต่กลางยุค 90 ฉันใช้ Perl, Java, Seam, JSP และอื่น ๆ อีกมาก ทุกคนที่ฉันรู้ว่าใครใช้สปริงบ่นเกี่ยวกับความยากลำบากในการได้รับการกำหนดค่าและการอ้างอิงขวาฝันร้าย Maven ฯลฯ ฉันเริ่มใช้ลิฟท์ในโครงการเมื่อไม่กี่สัปดาห์ที่ผ่านมาและรู้สึกประหลาดใจอย่างยิ่ง มันเป็นกรอบแรก (และภาษา) ที่ฉันเคยใช้ในสิ่งที่ทำงานเกือบจะไม่มีความพยายาม ฉันเขียนคุณลักษณะหลายสิบรายการในแอปของฉันจนถึงตอนนี้และฉันก็ประหลาดใจอย่างต่อเนื่องว่าฉันจะทำให้ถูกต้องได้อย่างรวดเร็ว ... แม้จะมีเอกสารที่ไม่น่าเชื่อถือและความเข้าใจที่ จำกัด ของ Scala การเห็นคือการเชื่อ
Tony K.

@TonyK: แน่นอนว่าสปริงนั้นหนัก แต่มันจะจ่ายผลตอบแทนถ้าเว็บแอพเปลี่ยนไปมากในภายหลังเนื่องจากง่ายต่อการปรับโครงสร้าง / ขยายด้วยสปริง IMHO มันขึ้นอยู่กับ ฉันใช้กรอบอื่น ๆ เช่น Grails ในโครงการขนาดเล็กและฉันคิดว่ามันสมบูรณ์แบบสำหรับมัน - แต่สำหรับบางสิ่งที่จะเปลี่ยนแปลงได้ในภายหลังฉันจะไปกับ Spring
Hoàng Long

7
@ HoàngLongมีหลายวิธีในการพัฒนาซอฟต์แวร์ที่ยาก ฉันแค่บอกประสบการณ์ของฉัน: Java แสดงว่าอายุเป็นภาษาเช่นเดียวกับกรอบที่สร้างขึ้นบนมัน เวลาที่จะพัฒนาไปสู่สิ่งต่าง ๆ ที่แสดงออกและมีพลังมากขึ้นโดยไม่มีความบ้าคลั่งและการกำหนดค่าทั้งหมด
Tony K.

11

ฉันอยากจะแนะนำให้คุณตรวจสอบกรอบการเล่นมันมีความคิดที่น่าสนใจและสนับสนุนการพัฒนาใน Java และ Scala


2
ฉันเช็คเอาท์เล่น ฉันไม่เห็นอะไรเลยนอกจากการโหลดซ้ำในตัวเพื่อแนะนำและด้วยสิทธิ์ใช้งาน Scala JRebel ฟรีคุณจะได้รับสิ่งนี้ด้วย Lift
Tony K.

10

แค่เล่น ๆ. และเพื่อประโยชน์ในการเรียนรู้วิธีการเขียนโปรแกรมใหม่


10

ฉันมองอย่างยิ่งในการใช้ Lift สำหรับโครงการเว็บล่าสุดไม่ใช่แฟนตัวยงของ Spring MVC ฉันไม่ได้ใช้รุ่นล่าสุด แต่ Spring MVC รุ่นก่อนหน้าทำให้คุณกระโดดผ่านห่วงจำนวนมากเพื่อให้เว็บแอปพลิเคชันทำงาน ฉันเกือบจะขายลิฟท์จนเห็นว่าลิฟต์สามารถขึ้นกับเซสชันได้มากและจะต้องใช้ 'เซสชันที่เหนียว' เพื่อให้ทำงานได้อย่างถูกต้อง ตัดตอนมาจากhttp://exploring.liftweb.net/master/index-9.html#sec:Session-Management

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

ดังนั้นเมื่อจำเป็นต้องมีเซสชันผู้ใช้จะต้องปักหมุดที่โหนดนั้น สิ่งนี้สร้างความต้องการการโหลดบาลานซ์ที่ชาญฉลาดและส่งผลกระทบต่อการปรับขนาดซึ่งทำให้ลิฟท์ไม่สามารถแก้ไขปัญหาในกรณีของฉันได้ ฉันเลือกhttp://www.playframework.org/และยินดีเป็นอย่างยิ่ง การเล่นมีเสถียรภาพและเชื่อถือได้จนถึงตอนนี้และใช้งานได้ง่ายมาก


7

ฉันไม่ได้มาที่ Lift and Scala จากพื้นหลังของ Java ดังนั้นนี่ไม่ใช่จากประสบการณ์ส่วนตัว แต่ฉันรู้ว่านักพัฒนา Lift หลายคนพบว่า Scala เป็นภาษาที่กระชับและมีประสิทธิภาพมากกว่า Java


3

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



0

ในความเห็นที่ต่ำต้อยของฉันจินตนาการคือสิ่งที่สำคัญ

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

Real app = programming language (imagined app)

ดังนั้นการเลือกภาษาจึงเป็นสิ่งสำคัญ ดังนั้นกรอบงานคือ มีคนฉลาดมากมายที่นี่ที่จะแนะนำคุณเกี่ยวกับสิ่งที่เลือก แต่ท้ายที่สุดภาษา / กรอบงานที่ดีที่สุดที่แปลจินตนาการของคุณควรเป็นทางเลือกของคุณ ดังนั้นต้นแบบทั้งกับและทำการเลือกของคุณ

สำหรับฉันฉันค่อยๆเรียนรู้สกาล่าและยกและรักมัน


0

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

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