هل تريد تقسيم فئة الوصول إلى البيانات إلى قارئ وكاتب أو دمجهما؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

قد يكون هذا من ناحية "المناقشة"، ولكني أود حقًا أن أسمع وجهة نظرك حول هذا الموضوع.

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

لذلك، بدأت مؤخرًا في تقسيم الوصول إلى البيانات إلى FooWriter وFooReader، مما يؤدي إلى أسماء أجمل ويمنح بعض المرونة الإضافية، ولكن في الوقت نفسه أحب الاحتفاظ بها معًا، إذا لم تكن الفصول الدراسية كبيرة جدًا.

هل يعتبر الفصل بين القارئ والكاتب تصميمًا أفضل أم يجب الجمع بينهما؟إذا كان يجب أن أجمع بينهما، فماذا يجب أن أسمي الفصل؟

شكرا / إريك

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

المحلول

قد يكون ORM هو الحل الأفضل لك.
أو استخدم نمط نوع المستودع، مع كائن "thingContext" المسؤول عن استمرار الحالة.

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

نصائح أخرى

أنا الآن أستخدم Linq إلى Sql.وهذا يحل المشكلة تماما.

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

  1. المكون/كائن الأعمال:سيارة
  2. الوصول إلى البيانات، التي تحتوي على طرق القراءة والكتابة الثابتة:CarDB

مثال للاستخدام:

Car car = new Car();
car.Manufacturer = "Toyota"
car.Model = "Camry"
car.Year = 2006;
car.CarID = CarDB.InsertCar(car)
car.OwnerID = 2;
CarDB.UpdateCar(car);

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

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

يمكن تسمية الشيء الذي يقرأ ويكتب إلى مخزن الواجهة الخلفية بأداة الوصول إلى البيانات، أو ReaderWriter، أو IO، أو Store.

فكيف بواحدة من:

  • fooDataAccessor
  • com.FooAccessor
  • FooReaderWriter
  • فورو
  • FooIO
  • فوستور
  • FooStorage

عندما يُتاح لي الاختيار، أقوم عمومًا بتصنيف القارئ إلى فئة فرعية لإنشاء الكاتب.

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