คำถามติดแท็ก serialization

2
แนวทางปฏิบัติที่ดีที่สุดสำหรับการรวมเป็นอนุกรมของการรวม DDD
ตามตรรกะโดเมน DDD ไม่ควรปนเปื้อนด้วยความกังวลทางเทคนิคเช่นการทำให้เป็นอันดับการทำแผนที่วัตถุสัมพันธ์ ฯลฯ ดังนั้นคุณจะทำให้เป็นอันดับหรือแมปสถานะของมวลรวมได้โดยไม่เปิดเผยต่อสาธารณะผ่านผู้ได้รับและ setters อย่างไร ฉันได้เห็นตัวอย่างมากมายสำหรับการใช้งานของที่เก็บ แต่ในทางปฏิบัติทั้งหมดนั้นอาศัยการเข้าถึงสาธารณะบนเอนทิตีและวัตถุค่าสำหรับการทำแผนที่ เราสามารถใช้การสะท้อนเพื่อหลีกเลี่ยงการเข้าถึงสาธารณะ แต่ IMO วัตถุโดเมนเหล่านี้จะยังคงขึ้นอยู่กับข้อกังวลเกี่ยวกับการทำให้เป็นอนุกรม เช่นคุณไม่สามารถเปลี่ยนชื่อหรือลบฟิลด์ส่วนตัวโดยไม่ต้องปรับแต่งการกำหนดค่าอนุกรม / การแมป ดังนั้นคุณต้องพิจารณาการทำให้เป็นอันดับซึ่งคุณควรเน้นไปที่ตรรกะของโดเมนแทน ดังนั้นการประนีประนอมที่ดีที่สุดที่จะทำตามที่นี่คืออะไร? อยู่กับ accessors สาธารณะ แต่หลีกเลี่ยงการใช้สิ่งอื่นนอกจากรหัสการแมป หรือว่าฉันเพิ่งพลาดอะไรบางอย่างที่ชัดเจน? ฉันสนใจอย่างชัดเจนในการซีเรียลไลซ์สถานะของวัตถุโดเมน DDD (การรวมที่ประกอบด้วยเอนทิตีและวัตถุค่า) สิ่งนี้ไม่เกี่ยวกับการทำให้เป็นอนุกรมในสถานการณ์สคริปต์ทั่วไปหรือการแปลงรหัสที่บริการไร้สัญชาติทำงานบนวัตถุคอนเทนเนอร์ข้อมูลอย่างง่าย

2
ย้ายจาก JSON ไปยัง Protobuf มันคุ้มหรือไม่
เรามีเว็บเซอร์วิส REST ที่สามารถให้บริการ XML หรือ JSON (WCF) ฉันกำลังคิดจะใช้ Protobufs ทำไม? ข้อดี โหลดบนเซิร์ฟเวอร์น้อยลง ขนาดข้อความที่เล็กลง - ทราฟฟิกน้อย มันง่ายกว่าที่จะสลับตอนนี้ในภายหลัง ข้อเสีย จะต้องมีการดำเนินการ การแก้ไขปัญหา / การดมกลิ่นเพื่อแก้ไขข้อบกพร่องจะทำได้ยากขึ้น ฉันสามารถเปิดใช้งาน GZip บนเซิร์ฟเวอร์และ JSON จะใช้ปริมาณการใช้งานมาก คุณมีข้อเสนอแนะและ / หรือประสบการณ์เกี่ยวกับเรื่องนี้อย่างไร?

6
การทำให้เป็นอันดับ Java - ข้อดีและข้อเสียใช้หรือหลีกเลี่ยง? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว การทำให้เป็นอนุกรมใช้สำหรับการคงอยู่ใน Java มันอาจไม่เป็นไรที่จะคงอยู่วัตถุบางอย่างที่ใช้เป็นอันดับ แต่สำหรับวัตถุจำนวนมาก ORM ฐานข้อมูล ฯลฯ อาจดีกว่า ดูเหมือนว่าการจัดลำดับจะมีประโยชน์สำหรับงานขนาดเล็กเท่านั้น อาจเป็นฉันผิด ดังนั้นโปรดบอกฉันว่าข้อดีของการทำให้เป็นอนุกรมมากกว่าวิธีที่ไม่เป็นอนุกรมนั้นคืออะไร ควรใช้เมื่อใดและควรหลีกเลี่ยงเมื่อใด คำถามนี้มาถึงใจหลังจากเห็นบทความ DZone Is Object Serialization Evil หรือไม่? และนี่คือบรรทัดที่ก่อให้เกิดคำถามของฉัน: หากคุณดูที่ Java และวัตถุเซสชันจะมีการใช้การทำให้เป็นอันดับวัตถุอย่างแท้จริง สมมติว่าเซสชันแอปพลิเคชันค่อนข้างสั้นซึ่งมีความหมายมากที่สุดในเวลาไม่กี่ชั่วโมงการทำให้เป็นอันดับวัตถุนั้นง่าย ๆ ได้รับการสนับสนุนอย่างดีและสร้างขึ้นในแนวคิด Java ของเซสชัน อย่างไรก็ตามเมื่อการคงอยู่ของข้อมูลเป็นระยะเวลานานอาจเป็นวันหรือหลายสัปดาห์และคุณต้องกังวลเกี่ยวกับแอพพลิเคชั่นใหม่ ๆ ตามที่นักพัฒนา Java ที่ดีทุกคนรู้ถ้าคุณวางแผนที่จะทำให้เป็นอันดับวัตถุแม้ในเซสชั่นคุณต้องมีซีเรียลไลซ์เซชั่น ID จริง ๆ (serialVersionUID) ไม่ใช่แค่ 1L และคุณต้องใช้อินเตอร์เฟส Serializable อย่างไรก็ตามผู้พัฒนาส่วนใหญ่ไม่ทราบกฎที่แท้จริงที่อยู่เบื้องหลังกระบวนการดีซีเรียลไลเซชั่น Java …

2
รูปแบบการออกแบบ Protobuf
ฉันกำลังประเมินบัฟเฟอร์ของ Google Protocol สำหรับบริการบน Java (แต่คาดว่าจะมีรูปแบบของผู้ไม่เชื่อเรื่องภาษา) ฉันมีสองคำถาม: คำถามแรกคือคำถามทั่วไปที่กว้างขวาง: เราเห็นรูปแบบอะไรที่ผู้คนใช้? รูปแบบดังกล่าวเกี่ยวข้องกับองค์กรระดับ (เช่นข้อความต่อไฟล์ .proto, บรรจุภัณฑ์และการจัดจำหน่าย) และคำจำกัดความของข้อความ (เช่นเขตข้อมูลซ้ำแล้วซ้ำกับเขตข้อมูลที่ห่อหุ้มซ้ำ *) เป็นต้น มีข้อมูลประเภทนี้น้อยมากในหน้าความช่วยเหลือของ Google Protobuf และบล็อกสาธารณะในขณะที่มีข้อมูลจำนวนมากสำหรับโปรโตคอลที่กำหนดเช่น XML ฉันยังมีคำถามเฉพาะเหนือรูปแบบที่แตกต่างกันสองแบบ: แสดงข้อความในไฟล์ .proto, จัดเก็บเป็น jar แยกต่างหากและจัดส่งไปยังผู้บริโภคเป้าหมายของบริการ - ซึ่งเป็นวิธีการเริ่มต้นที่ฉันเดา ทำเช่นเดียวกัน แต่รวมถึงการห่อด้วยมือที่สร้างขึ้น (ไม่ใช่คลาสย่อย!) รอบ ๆ แต่ละข้อความที่ใช้สัญญาที่สนับสนุนอย่างน้อยสองวิธีนี้ (T คือคลาส wrapper, V คือคลาสของข้อความ (ใช้ชื่อสามัญ : public V toProtobufMessage() { V.Builder builder = …

2
การทำให้เป็นอันดับและการดีซีเรียลไลเซชั่นควรเป็นความรับผิดชอบของชั้นเรียนหรือไม่
ขณะนี้ฉันอยู่ในขั้นตอนการออกแบบ (อีกครั้ง) ของคลาสรุ่นต่างๆของแอปพลิเคชัน C # .NET (โมเดลดังใน M ของ MVC) คลาสโมเดลมีข้อมูลพฤติกรรมและความสัมพันธ์ซึ่งได้รับการออกแบบมาเป็นอย่างดี ฉันเขียนแบบจำลองใหม่จาก Python เป็น C # ใน Python model ฉันคิดว่าฉันเห็นหูด แต่ละรุ่นรู้วิธีการทำให้เป็นอันดับตัวเองและตรรกะการทำให้เป็นอันดับไม่มีส่วนเกี่ยวข้องกับพฤติกรรมที่เหลือของคลาสใด ๆ ตัวอย่างเช่นลองนึกภาพ: Imageชั้นเรียนด้วย.toJPG(String filePath) .fromJPG(String filePath)วิธีการ ImageMetaDataชั้นเรียนด้วย.toString()และ.fromString(String serialized)วิธีการ คุณสามารถจินตนาการได้ว่าวิธีการทำให้เป็นอันดับเหล่านี้ไม่ได้เชื่อมโยงกับส่วนที่เหลือของชั้นเรียน แต่มีเพียงชั้นเรียนเท่านั้นที่สามารถรับประกันได้ว่าจะรู้ข้อมูลที่เพียงพอในการทำให้เป็นอันดับตัวเอง มันเป็นเรื่องธรรมดาสำหรับชั้นเรียนหรือไม่ที่จะรู้วิธีการทำให้เป็นอันดับและทำให้เสียความเป็นตัวของตัวเอง? หรือฉันไม่มีรูปแบบทั่วไป

2
จะเกิดอะไรขึ้นถ้าเราทำให้ซีเรียลไลซ์และดีซีเรียลไลซ์สองวัตถุที่อ้างอิงถึงกันและกัน?
เพื่อให้ชัดเจนยิ่งขึ้นนี่เป็นตัวอย่างด่วน: class A implements Serializable { public B b; } class B implements Serializable { public A a; } A a = new A(); B b = new B(); a.b = b; b.a = a; แล้วจะเกิดอะไรขึ้นถ้าเราทำให้วัตถุ a และ b เป็นอนุกรมเป็นไฟล์และทำการดีซีเรียลไลซ์ออกจากไฟล์นั้น? ฉันคิดว่าเราได้วัตถุ 4 ชิ้นชิ้นละ 2 ชิ้น วัตถุที่เหมือนกัน แต่มีอินสแตนซ์ต่างกัน แต่ฉันไม่แน่ใจว่ามีอะไรอีกหรือมันถูกหรือผิด หากเทคโนโลยีใดจำเป็นต้องตอบโปรดคิดตาม Java …

3
เราเข้าคิวและจัดลำดับซีเรียลอย่างถูกต้องหรือไม่?
เราประมวลผลข้อความผ่านบริการที่หลากหลาย (หนึ่งข้อความจะสัมผัสถึง 9 บริการก่อนที่จะเสร็จสิ้นแต่ละคนทำหน้าที่เฉพาะที่เกี่ยวข้องกับ IO) ตอนนี้เรามีการรวมกันของกรณีที่เลวร้ายที่สุด (อนุกรมข้อมูลสัญญา XML) และกรณีที่ดีที่สุด (MSMQ ในหน่วยความจำ) สำหรับประสิทธิภาพ ลักษณะของข้อความหมายถึงข้อมูลที่ต่อเนื่องของเราสิ้นสุดลงประมาณ 12-15 กิโลไบต์และเราประมวลผลข้อความประมาณ 4 ล้านข้อความต่อสัปดาห์ ข้อความถาวรใน MSMQ นั้นช้าเกินไปสำหรับเราและเมื่อข้อมูลเติบโตขึ้นเราก็รู้สึกกดดันจากไฟล์ที่แม็พหน่วยความจำของ MSMQ เซิร์ฟเวอร์อยู่ที่ 16GB ของการใช้หน่วยความจำและเพิ่มขึ้นเพียงเพื่อรอคิว ประสิทธิภาพยังลดลงเมื่อการใช้หน่วยความจำสูงเนื่องจากเครื่องเริ่มทำการแลกเปลี่ยน เรากำลังทำพฤติกรรมการล้างข้อมูลด้วยตนเองด้วย MSMQ ฉันรู้สึกว่ามีส่วนหนึ่งที่เราทำผิดที่นี่ ฉันพยายามใช้ RavenDB เพื่อคงข้อความไว้และเพียงรอคิวตัวระบุ แต่ประสิทธิภาพการทำงานนั้นช้ามาก (ดีที่สุด 1,000 ข้อความต่อนาทีอย่างดีที่สุด) ฉันไม่แน่ใจว่าเป็นผลมาจากการใช้รุ่นพัฒนาหรืออะไร แต่เราต้องการปริมาณงานที่สูงขึ้น [1] แนวคิดนี้ทำงานได้ดีในทางทฤษฎี แต่ประสิทธิภาพไม่ได้ขึ้นอยู่กับภารกิจ รูปแบบการใช้มีบริการหนึ่งที่ทำหน้าที่เป็นเราเตอร์ซึ่งจะอ่านทั้งหมด บริการอื่น ๆ จะแนบข้อมูลตามเบ็ดของบุคคลที่สามและส่งต่อกลับไปที่เราเตอร์ วัตถุส่วนใหญ่จะถูกสัมผัส 9-12 ครั้งแม้ว่าประมาณ 10% จะถูกบังคับให้วนรอบในระบบนี้สักครู่จนกว่าบุคคลที่สามจะตอบสนองอย่างเหมาะสม ขณะนี้บริการนี้มีบัญชีและมีพฤติกรรมการนอนหลับที่เหมาะสมเนื่องจากเราใช้ฟิลด์ลำดับความสำคัญของข้อความด้วยเหตุนี้ …

2
การเปรียบเทียบแอปพลิเคชัน TCP / IP กับแอปพลิเคชัน HTTP [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันสนใจที่จะพัฒนาเว็บไซต์ขนาดใหญ่ที่ผู้ใช้งานเขียนด้วยภาษาจาวา สำหรับการออกแบบฉันคิดว่าการพัฒนาบริการแบบแยกส่วนอิสระที่สามารถทำหน้าที่เป็นผู้ให้บริการข้อมูลกับเว็บแอปพลิเคชันหลักของฉัน สำหรับการเขียนบริการแบบแยกส่วน (ผู้ให้บริการข้อมูล) ฉันสามารถใช้ประโยชน์จากเฟรมเวิร์กที่มีอยู่เช่น Spring และพัฒนาบริการเหล่านี้ตามรูปแบบการออกแบบ RESTful และเปิดเผยทรัพยากรผ่าน HTTP ด้วยรูปแบบข้อความเช่น JSON ... หรือฉันสามารถใช้ประโยชน์จากเครือข่ายที่มีอยู่ เฟรมเวิร์กเช่น Netty ( http://netty.io/ ) และรูปแบบการทำให้เป็นอนุกรมเช่น Protobufs ( https://developers.google.com/protocol-buffers/docs/overview ) และพัฒนาเซิร์ฟเวอร์ TCP ที่ส่งกลับมาแบบอนุกรม น้ำหนักบรรทุก เมื่อใดที่คุณควรเลือกรายการอื่น จะมีประโยชน์ใด ๆ จากการใช้รูปแบบการทำให้เป็นอันดับเช่น Protobufs และการส่งกระแสข้อมูลของไบต์ผ่านสาย จะมีค่าใช้จ่ายในการใช้ JSON หรือไม่ มีค่าใช้จ่ายเท่าไรในการใช้ TCP / IP และ HTTP …
13 java  rest  http  serialization  tcp 

2
การทำให้เป็นอันดับทำให้การใช้การฉีดพึ่งพาหรือไม่
คำถามง่าย ๆ : ฉันเข้าใจว่าการทำให้เป็นอันดับใน C # ต้องใช้ตัวสร้างเริ่มต้น นี้จะขจัดความเป็นไปได้ของการใช้สร้างฉีด DI (ซึ่งโดยทั่วไปคือสไตล์ที่ชื่นชอบของ DI ในการอ่านของฉัน[อ้างจำเป็น] ) ดังนั้นมันจึงเป็นเหตุการณ์หรือสถานการณ์จริง ๆ หรือฉันกำลังทำอะไรบางอย่างหายไป? (คำถามด้านข้าง): IoC ทำหน้าที่บรรจุขั้นตอนนี้หรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.