سؤال

هل كائن نقل البيانات مماثل لكائن القيمة أم أنهما مختلفان؟إذا كانت مختلفة ، فأين يجب أن نستخدم DTO وأين يجب أن نستخدم VO؟

لغة البرمجة التي نتحدث عنها هي Java والسياق هو - هناك تطبيق ويب يقوم بجلب البيانات من قاعدة البيانات ثم معالجتها وفي النهاية يتم عرض المعلومات المعالجة في الواجهة الأمامية

هل كانت مفيدة؟

المحلول

كائن القيمة هو كائن بسيط لا تقوم المساواة على الهوية. كائن نقل البيانات هو كائن يستخدم لنقل البيانات بين الأنظمة الفرعية لتطبيقات البرامج ، عادةً بين طبقات الأعمال وواجهة المستخدم.إنه يركز فقط على البيانات العادية ، لذلك ليس لديه أي سلوك.

نصائح أخرى

استخدم DTO على حدود خدماتك إذا كنت لا تريد إرسال كائن المجال الفعلي إلى عملاء الخدمة - فهذا يساعد في تقليل التبعيات بين العميل والخدمة.

كائنات القيم هي ببساطة أشياء لا تستند مساواتها إلى الهوية ، مثلjava.lang.Integer

لا تعد DTOs والأشياء القيمة بدائل لبعضها البعض.

يعد كائن نقل البيانات بمثابة خدعة لنقل مجموعة من البيانات من طبقة أو طبقة إلى أخرى ، والهدف هو تقليل عدد المكالمات ذهابًا وإيابًا عن طريق تعبئة مجموعة من العناصر في نفس بنية البيانات وإرسالها سويا. يستخدمه بعض الأشخاص أيضًا ، مثل أشار مايكل في مشاركته هنا ، بحيث لا يتم عرض الفئات التي تستخدمها طبقة واحدة إلى الطبقة التي تسميها. عندما أشير إلى DTO باعتباره kludge ، أعني أنه لا يوجد مفهوم تجريدي دقيق يتم تنفيذه ، إنه حل عملي للمساعدة في التواصل بين طبقات التطبيق.

كائن القيمة هو الشيء الذي نهتم فقط بقيمته ، مثل مبلغ نقدي أو نطاق تاريخ أو رمز من جدول البحث . ليس لها هوية ، بمعنى أنك لن تهتم ، إذا كان لديك العديد منها ، بمتابعة أي منها ، لأنها ليست أشياء في حد ذاتها.

كائنات قيم التباين مع الأشياء التي لها هوية فريدة في نظامك ، والتي تسمى الكيانات. إذا كان لديك نظام يتتبع فيه العميل الذي يقوم بالدفع ، فالعميل والدفع هما كيانان ، لأنهما يمثلان أشياء محددة ، ولكن المبلغ النقدي على الدفع هو مجرد قيمة ، وليس له وجود في حد ذاته ، بقدر ما يتعلق الأمر بالنظام الخاص بك. كيف يرتبط شيء ما بنظامك يحدد ما إذا كان كائنًا ذا قيمة أم كيانًا.

إنهما مختلفان ، لكني استخدمت الاثنين بالتبادل في الماضي ، وهذا خطأ.قرأت أن DTO (كائن نقل البيانات) كان يطلق عليه VO (كائن القيمة) في الإصدار الأول من كتاب Core J2EE Patterns ، لكن لم أتمكن من العثور على هذا المرجع.

يتم استخدام DTO ، والذي أطلق عليه أحيانًا "كائن النقل الغبي" لمساعدتي في تذكر أنه حاوية ولا ينبغي أن يحتوي على أي منطق عمل ، لنقل البيانات بين الطبقات والمستويات.يجب أن يكون مجرد كائن بسمات له حاصل / محددات.

ومع ذلك ، فإن الصوت الصوتي يشبه JAVA Enum ويمثل مجموعة ثابتة من البيانات.لا يحتوي VO على هوية كائن (عنوان مثيل الكائن في الذاكرة) ، ويتم تحديده من خلال قيمته وهو غير قابل للتغيير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top