সংগ্রহস্থল এবং কাজের ইউনিটের মধ্যে সম্পর্ক


17

আমি একটি সংগ্রহস্থল বাস্তবায়ন করতে যাচ্ছি, এবং আমি ইউওউ প্যাটার্নটি ব্যবহার করতে চাই যেহেতু ভান্ডারটির গ্রাহক বেশ কয়েকটি ক্রিয়াকলাপ করতে পারেন, এবং আমি সেগুলি একবারে প্রতিশ্রুতিবদ্ধ করতে চাই।

বিষয়টি সম্পর্কে বেশ কয়েকটি নিবন্ধ পড়ার পরে, এখনও এই দুটি উপাদান কীভাবে সম্পর্কিত তা আমি পাই না, নিবন্ধের উপর নির্ভর করে এটি অন্যভাবে করা হচ্ছে।

কখনও কখনও UW সংগ্রহস্থলের অভ্যন্তরীণ কিছু হয়:

public class Repository
{
    UnitOfWork _uow;

    public Repository()
    {
       _uow = IoC.Get<UnitOfWork>();
    }

    public void Save(Entity e)
    {
        _uow.Track(e);
    }

    public void SubmittChanges()
    {
        SaveInStorage(_uow.GetChanges());
    }
}

এবং কখনও কখনও এটি বাহ্যিক:

public class Repository
{
    public void Save(Entity e, UnitOfWork uow)
    {
        uow.Track(e);
    }

    public void SubmittChanges(UnitOfWork uow)
    {
        SaveInStorage(uow.GetChanges());
    }
}

অন্যান্য সময়, সেই ইউওউ হ'ল রেপোজিটরিটি উল্লেখ করে

public class UnitOfWork
{
    Repository _repository;

    public UnitOfWork(Repository repository)
    {
       _repository = repository;
    }

    public void Save(Entity e)
    {
        this.Track(e);
    }

    public void SubmittChanges()
    {
       _repository.Save(this.GetChanges());
    }
}

এই দুটি উপাদান কীভাবে সম্পর্কিত? UW যে উপাদানগুলিকে পরিবর্তন করা প্রয়োজন তা অনুসরণ করে এবং এই পরিবর্তনগুলি বজায় রাখার জন্য সংগ্রহস্থলটিতে যুক্তি রয়েছে তবে ... কে কাকে ডাকে? শেষ কি আরও বোঝায়?

এছাড়াও, কে সংযোগ পরিচালনা করে? যদি সংগ্রহস্থলটিতে বেশ কয়েকটি অপারেশন করতে হয় তবে আমি মনে করি একই সংযোগ এবং এমনকি লেনদেন আরও বেশি কার্যকর, তাই সম্ভবত সংযোগের বস্তুটি ইউওউ-এর ভিতরে রাখে এবং এটি रिपোরিটরের অভ্যন্তরেও বোধগম্য হয়।

চিয়ার্স


উত্তর:


7

পুনরায়: "ওও পরিবর্তিত হওয়া প্রয়োজনীয় উপাদানগুলি ট্র্যাক করে, এবং এই পরিবর্তনগুলি চালিয়ে যাওয়ার জন্য ভাণ্ডারগুলিতে যুক্তি রয়েছে তবে ... কে কাকে ডাকবে?"

আপনি এই শ্রেণীর প্রাথমিক দায়িত্ব বুঝতে পারেন। আপনি বলছেন যে প্রতিটি নিবন্ধ, যা আপনি পড়েছেন সেগুলি একে একে বিভিন্নভাবে সংযুক্ত করে। এ থেকে বোঝা যায় যে "কে ডাকে" সম্পর্কে সিদ্ধান্তটি আপনার উপর নির্ভর করে।

ভালো সফ্টওয়্যার ডিজাইনের মূল প্রিন্সিপাল যেমন পরিচালনা করার সময় আমি 'স্তরগুলির' ক্ষেত্রে সমস্যাটি স্কেচ করার চেষ্টা করতাম লেয়ার'- সংহতি , ডিকোপলিং , পুনরায় ব্যবহারযোগ্যতা , ইউনিট-টেস্টিবিলিটি ইত্যাদি I'd

এরিক ইভান্স ডোমেন চালিত নকশার উদ্ধৃতি দিতে , (2004) অ্যাডিসন ওয়েসলি, পৃষ্ঠা 69 :

[স্তরিত স্থাপত্যগুলির] মূল অধ্যক্ষটি হ'ল যে কোনও স্তরের কোনও উপাদান একই স্তরের অন্যান্য উপাদানগুলির উপর বা তার স্তরগুলির নীচে "স্তরগুলির" উপাদানগুলির উপর নির্ভর করে।

আমার মতে, ইউউডাব্লু এবং রেপো উভয়ই দুটি খুব পৃথক শ্রেণি যার স্পষ্ট, স্বতন্ত্র, দায়িত্ব রয়েছে। শুরু করার জন্য, আমি অন্যটিকে অনুরোধ করব না।

আমি মনে করি আপনার কিছু তৃতীয় ক্লায়েন্ট শ্রেণি প্রয়োজন (যেমন হয় একটি controllerবা service class) যা সত্যই জানে যে 'কখন এবং কী পেতে হবে' রেপো থেকে এবং 'কখন' লেনদেনটি সংরক্ষণ করতে। এই ক্লায়েন্টটি আর্কিটেকচারে তুলনামূলকভাবে উঁচুতে বসেছেন (সুতরাং আরও ক্লাস সম্পর্কে জানতে পারেন ) এবং উভয়ের মধ্যে কিছু অর্কেস্টেশন করতে পারেন।

--------------------------------

         [Client]
           /   \
----------/---- \---------------
         /       \
        V         V
[Unit Of Work]  [Repo]


--------------------------------

2

পদ্ধতিগুলি সাধারণত UOW ইন্টারফেসে দেওয়া হয় (যা সাধারণত একটি কারখানার মাধ্যমে নির্মিত হয়)।

আপনি সাধারণত কমান্ড প্যাটার্ন ক্লাস (এসএস) / ফেকাড থেকে কোনও UOW ইন্টারফেসে পদ্ধতিগুলি কল করেন। যেহেতু ইউউউ কেবলমাত্র ডাটাবেস আইওকে পিছনে ফেলে দেয় (আপনাকে দীর্ঘমেয়াদে লেনদেন বা ডাটাবেসে একাধিক কল হওয়া অপ্রয়োজনীয় হতে পারে তা থেকে বিরত রাখতে), ইউওউয়ের সাথে কাজ করা একই স্তরে হওয়া উচিত যা আপনি সাধারণত আপনার ডাটাবেসের সাথে কাজ করবেন।

মাইক্রোসফ্ট UOW প্যাটার্ন একটি খুব পুস্তক পোস্ট আছে:

http://msdn.microsoft.com/en-us/magazine/dd882510.aspx

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.