سؤال

ولدي مشروع الذي يستخدم الربيع وتقسيمها إلى بضع عشرات DAOs وDTOs المرتبطة بها. أنا باستخدام JdbcTemplate، ولكن ليس أي شيء آخر، كما انها بالضبط مستوى من التجريد أنا سعيد.

وأنا أؤدي حاليا تحميل كسول على DTOs بلدي عن طريق وضع بعض التعليمات البرمجية شعر وليس في حاصل بهم.

والمنطق النمطي الأساسي هو: 1. إذا الحقل غير عودة فارغة قيمتها والخروج 2. اتصل DAO المناسب وجلب DTOs ذات الصلة 3. تخزينها حتى في المرة القادمة.

وأنه يعمل بشكل جيد إلا أن تقترن بلدي DTOs المتواضع مع مجموعة كاملة من DAOs وليس ذلك POJOey.

ويبدو أن رائحة كود آخر إذا أضع المنطق في DAO لأنه سيتم التعامل مع كل من CRUD لDTOs وتحميل كسول، وكما فهمت أنه ينبغي أن يكون مسؤولية واحدة كائنات.

وأنا على أمل هذا هناك نهج الربيع بسيط نسبيا التي يمكن استخدامها لحقن كائن كسول لودر بين DAOs وDTOs لتحقيق ذلك، ولكن أي حل آخر يعمل بالنسبة لي.

وأي أفكار؟

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

المحلول

وانه من الاسهل للالتفاف حول DAO في لDAO ... ذلك يعتمد على كم من النموذج الذي تريد إيجاده. لا تستخدم في DTO عادة لجلب واحد إلى العديد من أكثر معهم، واثنين أو أكثر من المكالمات قاعدة بيانات / داو منفصلة. في هذه الحالة كنت تريد حقا ORM. منذ كنت تبحث عن إجابة داو ......

وليس هناك شيء يمنعك من ربط معا DAO لتعطيك واحد DTO. انه من الاسهل ثم يكون DTO متصلة DAO. انها ليست حقا طبقة الخدمة، انها مجرد بناء كتل من DAO. لذلك قد يكون لديك PersonDao، وTelephoneNumberDao. يمكن لأي شخص أن يكون أكثر من رقم هاتف واحد، لذلك هل يمكن أن يكون أيضا PersonModelDAo، يستخدم PersonDao وTelephoneNumberDao تحت غطاء محرك السيارة للقيام بذلك العمل.

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

نصائح أخرى

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

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