سؤال

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

وكان حين كتابة هذا الملخص أن أدركت أنني اتخذت نهجا مختلفا قليلا في المرة الثانية.

واحد وتستخدم وسيلة InsertOnSubmit صريح إلى جانب وحدة العمل وتحديث الضمني مع تعقب التغييرات UOW. كان البعض طريقة Save التي إدراج بنود جديدة وتحديث القائمة (دون UOW).

ما النهج من شأنه أن تؤيدون عادة؟ خذ بعين الاعتبار السيناريوهات CRUD المعتادة، حيث يجب على من responbility لكل منهما يكذب؟

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

المحلول

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

interface ICustomerRepository
{
    Customer Load(int id);
    IEnumerable<Customer> Search(CustomerQuery q);
    void Save(Customer c);
    void Delete(Customer c);
}

وهذه يمكن تنفيذها بسهولة عن طريق شيء من هذا القبيل NHibernate، أو NHibernate مع NHibernate.Linq، أو مكتبة SQL مباشرة، أو حتى XML أو ملف ثابت متجر. إذا كان ذلك ممكنا، وأنا أحب حفاظ على مفهوم المعاملة خارج المستودع، أو على نطاق عالمي أكبر بحيث عمليات عدة مستودعات قد يكون جزءا من عملية واحدة.

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