تخزين البيانات المجردة للفصل بناءً على البيئة (الويب/النوافذ)

StackOverflow https://stackoverflow.com/questions/643987

  •  22-07-2019
  •  | 
  •  

سؤال

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

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

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

المحلول

وكما يقول sgreeve، فصل الاهتمامات امر يؤخذ في الاعتبار من أجل الحصول على رمز للصيانة.

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

public class MyClassRepository
{
    IStorageProvider _provider;
    public MyClassRepository(IStorageProvider provider)
    {
        _provider = provider;
    }

    public void Save(MyClass o)
    {
        _provider.Save(o);
    }

    public MyClass GetBy(string id)
    {
        return _provider.GetBy(id);
    }
}

وقال إن التطبيق WinForms عناصر الاحتجاج التخزين من خلال:

var provider = new WindowsStorageProvider();
var rep = new MyClassRepository(provider);
rep.Save(myClassObject);

ووالتطبيق على الويب:

var provider = new WebStorageProvider();
var rep = new MyClassRepository(provider);
rep.Save(myClassObject);

نصائح أخرى

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

هذا ليس ما تحتاجه هنا.أعتقد أنك بحاجة إلى تجريد تخزين البيانات بعيدًا عن الفصل الذي يصمم البيانات التي يتم تخزينها.

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

  1. يجب أن يحتوي كل تطبيق (نموذج الويب وWindows) على وظيفة للقيام بتخزين البيانات بعيدًا - ولكن لا يحتاج أي منهما إلى تضمين الكود الذي يستخدمه الآخر.على سبيل المثاللا يحتاج تطبيق Windows Forms إلى معرفة كيفية تخزين البيانات في جلسة الويب.لذلك يجب أن يكون الكود الذي يخزن البيانات في جلسة الويب في كائن يمثل جزءًا من تطبيق الويب ولكنه ليس جزءًا من تطبيق نماذج Windows، والعكس صحيح.

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

نأمل أن يكون هذا مفيدا

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