سؤال

السيناريو النموذجي.نحن نستخدم خدمات ويب XML للمدرسة القديمة internally للتواصل بين مزرعة خوادم وعدة خوادم موزعة و العملاء المحليين.لا توجد أطراف ثالثة معنية، فقط تطبيقاتنا التي نستخدمها نحن وعملاؤنا.

نحن نفكر حاليًا في الانتقال من XML WS إلى أ WCF/object-based نموذج وتم تجربة أساليب مختلفة.يتضمن أحدها نقل كائنات/تجميعات المجال مباشرة عبر السلك، وربما استدعاء سمات DataContract عليها.

باستخدام IExtensibleDataObject و أ DataContract باستخدام خاصية الطلب على DataMembers, ، يجب أن نكون قادرين على التعامل مع مشكلات إصدار الخاصية البسيطة (تذكر أننا نتحكم في جميع العملاء ويمكننا فرض تحديثهم بسهولة).

ما زلت أسمع أنه يجب علينا استخدام كائنات نقل البيانات المخصصة للنقل فقط (DTOs) عبر السلك.

لماذا؟هل لا يزال هناك سبب للقيام بذلك؟نحن نستخدم نفس نموذج المجال على جانب الخادم والعميل، بالطبع، التعبئة المسبقة للمجموعات، وما إلى ذلك.فقط عندما يعتبر الحق و "الضروري". تستخدم خصائص التجميع مبدأ محدد الخدمة و IOC لاستدعاء إما NHibernate-based "الخدمة" لجلب البيانات مباشرة (من جانب الخادم)، و أ WCF عميل "الخدمة" من جانب العميل للتحدث معه WCF مزرعة الخادم.

إذن - لماذا نحتاج إلى استخدامها DTOs?

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

المحلول

في تجربتي، تعتبر DTOs مفيدة جدًا لـ:

  1. التحديد الدقيق لما سيتم إرساله عبر السلك ووجود نوع مخصص خصيصًا لهذا التعريف.
  2. عزل بقية التطبيق والعميل والخادم الخاص بك عن التغييرات المستقبلية.
  3. إمكانية التشغيل المتداخل مع الأنظمة غير المتصلة بالشبكة.من المؤكد أن DTOs ليست متطلبًا، ولكنها تسهل تصميم الأنواع "الآمنة".

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

نصائح أخرى

بعد أن عملت مع كلا النهجين (كائنات المجال المشترك وDTOs) أود أن أقول إن المشكلة الكبيرة في كائنات المجال المشترك هي عندما لا تتحكم في جميع العملاء، ولكن من تجاربي السابقة كنت عادةً أستخدم DTOs ما لم تكن سرعة التطوير عالية الجوهر.

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

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

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

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