سؤال

لقد قمت بإنشاء تطبيق سطح مكتب بسيط في C# 3.0 لتعلم بعض C# وwpf و.Net 3.5.يقرأ تطبيقي بشكل أساسي البيانات من ملف CSV ويخزنها في قاعدة بيانات SQL Server CE.أستخدم sqlmetal لإنشاء كود ORM لقاعدة البيانات.كان التكرار الأول لهذا التطبيق قبيحًا للغاية وأنا الآن بصدد إعادة هيكلته.

وهو ما يقودني إلى سؤالي.كيف يمكنك تصميم تطبيق قاعدة بيانات سطح المكتب في C#؟ما هي أفضل الممارسات؟

هل تقوم بإنشاء طبقة تجريد قاعدة البيانات (DAL) التي تستخدم الكود الذي تم إنشاؤه بواسطة sqlmetal؟أم أن الكود الذي تم إنشاؤه يكفي للتجريد؟

إذا كنت تستخدم نمط DAL، فهل تجعله عضوًا مفردًا أم ثابتًا؟هل تستخدم نمط View-Model-ModelView مع نمط DAL؟

أعتذر إذا كان هذا يبدو وكأنه سؤال مفتوح لفترة طويلة، لكنني فكرت في هذا الأمر كثيرًا مؤخرًا.أرى الكثير من الأمثلة حول كيفية تصميم تطبيق مؤسسي من المستوى n في لغة C# ولكن ليس هناك الكثير من الأمثلة على تصميم تطبيقات سطح المكتب المستقلة.

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

المحلول

سأبدأ مع إرشادات التطبيق المركب لـ WPF (سعال نشور زجاجي سعال) من فريق P&P في Microsoft.مع التنزيل يأتي تطبيق مرجعي رائع يمثل نقطة البداية لمعظم تطوير WPF الخاص بي اليوم.

ال طاقم دوت نت روكس تمت مقابلته للتو جلين بلوك و بريان نويز حول هذا إذا كنت مهتمًا بسماع المزيد منهم.

والأفضل من ذلك، أن Prism ليس ثقيلًا تقريبًا مثل CAB، إذا كنت معتادًا على ذلك منذ أيام WinForms.

نصائح أخرى

الجواب هو "يعتمد" كما هو الحال دائما.

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

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

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

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

أما بالنسبة لمصادر التعلم المفيدة، فأنصحك بشدة بإلقاء نظرة عليها مركبWPF إنه مشروع مصمم خصيصًا لتعليم المطورين أفضل الممارسات لتطوير تطبيقات سطح المكتب.

سأبدأ مع جيريمي ميلر قم ببناء الكابينة الخاصة بك مسلسل.

لقد كنت من أوائل مستخدمي CAB.لقد تعلمت الكثير من خلال البحث في هذه التكنولوجيا وقراءة جميع مدونات .NET حول بنية التطبيقات.

لكن أتيحت لي الفرصة مؤخرًا لبدء مشروع جديد، وبدلاً من استخدام CAB، استخدمت StructureMap & NHibernate واستعرت بعض الأنماط التي يستخدمها جيريمي (على وجه الخصوص، طريقته في التعامل مع تجميع الأحداث).وكانت النتيجة إطارًا مبسطًا للغاية ومجهزًا بأدوات يدوية يفعل كل ما أحتاج إليه وأحب العمل معه.

أما بالنسبة لتفاصيل سؤالك:أستخدم مستودعًا للوصول إلى البيانات.لقد كتبت في البداية بعض تعليمات برمجية ADO.NET واستخدمت برامج قراءة البيانات وقمت بتعيين الكائنات الخاصة بي.لكن ذلك أصبح قديمًا بسرعة كبيرة، لذلك قمت باستخدام NHibernate وكنت سعيدًا حقًا.تستخدم المستودعات NHibernate للوصول إلى البيانات، واحتياجات الوصول إلى البيانات الخاصة بي بسيطة جدًا في هذا التطبيق المحدد.

لدي طبقة خدمة (مكشوفة عبر WCF، قنوات دوبلكس) تستخدم المستودعات.تطبيقي هو في الأساس خادم عميل مع تحديث في الوقت الفعلي (وأعلم أن سؤالك كان يتعلق فقط بالعملاء، لكنني سأستخدم نفس التقنيات والأنماط).يا

من جانب العميل، أستخدم MVP مع StructureMap لـ IoC وبعض إستراتيجيات تجميع الأحداث البسيطة جدًا للاتصالات عبر الفئات.أقوم بتشفير الواجهات لكل شيء تقريبًا.الشيء الآخر الوحيد الذي قمت به هو استعارة فكرة "مساحة العمل" المرنة من CAB لعرض طرق العرض ديناميكيًا.لقد كتبت واجهة Workspace الخاصة بي وقمت بتنفيذ DeckWorkspace وTableWorkspace الخاصين بي لاستخدامهما في تطبيقي (كانت هذه أشياء سهلة الكتابة حقًا).

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

أود أن أقول نعم، يمكن تنظيمها بسهولة نحو التطبيقات الأصغر.هناك منحنى تعليمي للبدء، ولكن بصراحة، ساعدني ذلك على فهم WPF بشكل أفضل من محاولة البدء من الصفر.بعد بدء مشروع باستخدام CompositeWPF ثم بدء مشروع آخر بدونه، وجدت نفسي أحاول تكرار ميزات CompositeWPF بنفسي لأنني فاتني هذه الميزات!:)

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