সত্তা ফ্রেমওয়ার্ক এবং স্তর পৃথকীকরণ


12

আমি সত্তা ফ্রেমওয়ার্কের সাথে কিছুটা চেষ্টা করার চেষ্টা করছি এবং স্তরগুলির পৃথকীকরণ সম্পর্কে আমি একটি প্রশ্ন পেয়েছি।

আমি সাধারণত ইউআই -> বিএলএল -> ডাল পদ্ধতির ব্যবহার করি এবং আমি কীভাবে EF ব্যবহার করব তা ভাবছি।

আমার ডাল সাধারণত এমন কিছু হত

GetPerson(id)
{
    // some sql
    return new Person(...)
}

BLL:

GetPerson(id)
{
    Return personDL.GetPerson(id)
}

UI 'তে:

Person p = personBL.GetPerson(id)

আমার এখন প্রশ্ন: যেহেতু ইএফ আমার মডেল এবং ডাল তৈরি করে, তাই নিজের ডলের ভিতরে ইএফটি গুটিয়ে ফেলা ভাল ধারণা বা এটি কেবল সময়ের অপচয়?

আমার যদি ইএফ মোড়ানোর প্রয়োজন না হয় আমি কি এখনও আমার মডেল.ইএসএক্সএক্সটিকে তার নিজস্ব শ্রেণীর পাঠাগারের ভিতরে রাখব বা কেবল এটি আমার বিএলএল এর ভিতরে রেখে সেখানে কিছু কাজ করা ভাল?

আমি নিজের ডলের ভিতরে ইএফ মোড়ানোর কারণটি সত্যিই দেখতে পাচ্ছি না তবে অন্যান্য লোকেরা কী করছে তা আমি জানতে চাই।

সুতরাং উপরেরটি না রেখে আমি ডালটি ছেড়ে দিয়ে যাব:

BLL:

GetPerson(id)
{
    using (TestEntities context = new TestEntities())
    {
            var result = from p in context.Persons.Where(p => p.Id = id)            
                    select p;
    }
}

কি করো?

উত্তর:


13

আপনি যে উদাহরণ সরবরাহ করেছেন তা হ'ল স্তরের স্তরযুক্ত আর্কিটেকচার। আমি জানি এটি ইচ্ছাকৃতভাবে সরল করা হয়েছে, তবে:

আপনার উপস্থাপনা স্তরটি সরাসরি ব্যক্তি সত্তার সাথে আবদ্ধ। এটি কেবলমাত্র সহজ ক্ষেত্রেই ঠিক আছে এবং আপনি যখন আপনার স্তরগুলি সংজ্ঞায়িত করার চেষ্টা করছেন তখন অবশ্যই তা নয়।

গেটপারসন পদ্ধতিটি প্রতিটি কলের জন্য একটি নতুন প্রসঙ্গ তৈরির পরিবর্তে একটি খারাপ অভ্যাস ব্যবহার করে। আপনার কনস্ট্রাক্টরের প্রসঙ্গটি পাওয়া উচিত এবং এটি আপনার আইওসি ধারক দ্বারা সরবরাহ করা হবে।

একটি সহজ, তবে কার্যকর কাঠামো আমি ব্যবহার করেছি:

  • Project.Core - এ দেখুন মডেল এবং ইন্টারফেস রয়েছে।
  • Project.DAL - আমার EDMX এবং উত্পন্ন কোড সহ generated
  • প্রজেক্ট.বিএলএল - ব্যবসায়িক যুক্তি।
  • Project.Web - ওয়েব অ্যাপ্লিকেশন নিজেই।

এটি লক্ষ করা গুরুত্বপূর্ণ:

  • কোর অন্য কোনও সমাধানের উপর নির্ভর করে না।
  • ডাল অন্য কোনও সমাধানের উপর নির্ভর করে না।
  • প্রোজেক্ট.ওয়েব কোরের উপর নির্ভর করে তবে ডাল বা বিএলএল নয়।
  • বিএলএল কোর এবং ডালের উপর নির্ভর করে।

1
কোর একটি ব্যবসায়িক অবজেক্ট স্তর হিসাবে উপস্থিত হবে।
sq33G

এটি আমি যা ব্যবহার করি তা বেশ বেশি, তবে ইন্টারফেসের ঘোষণার জন্য আমি অতিরিক্ত ডিএলএল যুক্ত করব। এইভাবে আপনি কেবল ইন্টারফেসগুলি উল্লেখ করুন (এবং ডিআইএর জন্য [url = ऐकিয়া কোডপ্লেক্স.com / UUnity // url ] এর মতো কিছু ব্যবহার করুন ) এবং আপনি নিশ্চিত হতে পারেন যে দুর্ঘটনাক্রমে উত্সাহিত করেছেন এমন কোনও অদ্ভুত নির্ভরতা নেই।
এড জেমস

সাধারণত, এএফ ছাড়াই আমি একটি "মডেল" স্তরটিতে নিজস্ব ব্যক্তি শ্রেণি তৈরি করি, তাই আমার কাছে ইউআই, বিএলএল, ডাল এবং মডেল রয়েছে যেখানে: ইউআই বিএলএল এবং মডেলকে চেনে। বিএলএল জানে ডাল এবং মডেল। ডিএলএল জানে মডেলকে। আপনি কি পাশাপাশি নিজের নিজস্ব "ভিউ মডেল" তৈরি করেন এবং কেন আপনি কেবল ইএফ উত্পন্ন উত্সগুলি ব্যবহার করবেন না? (আমি জানি এটি স্তরযুক্ত আর্কিটেকচারের বিপরীতে চলেছে, তবে আপনি কীভাবে ডেটা পাবেন সেই পথে আপনি কতবার স্যুইচ আউট করেন?)
টমাস

@ থমাস বিমূর্তের কোনও কিছুতে ভিউ মডেলগুলিকে মোড়ানোর ফলে ইউনিট পরীক্ষা করা আরও সহজ হবে।
sq33G

3
মডেল! = মডেল দেখুন
বরিস ইয়াঙ্কভ

2

আপনার কোনও কিছুতে আপনার ইডিএমএক্স মোড়ানোর দরকার নেই।

আপনি যদি ইএফ থেকে অন্য কোনও পদ্ধতির পরিবর্তনের প্রয়োজনের সম্ভাবনাটি দেখতে করতে পারেন তবে আপনি পৃথক বিজনেস অবজেক্ট স্তরটিতে সংজ্ঞায়িত ইন্টারফেস প্রয়োগ করতে আপনার ব্যবসায়িক বিষয়গুলি (আংশিক শ্রেণীর সুবিধা গ্রহণ) প্রসারিত করতে চাইতে পারেন।

তারপরে আপনার কোড থেকে আপনি কেবল সেই ইন্টারফেসগুলি নিয়ে কাজ করবেন না কংক্রিট উত্পন্ন ক্লাসগুলির সাথে। এটি একসাথে রাখার জন্য একটু আঠালো কোডের প্রয়োজন হতে পারে; যে EDMX আপনার ডাল হতে পারে।


সুতরাং আমি যদি EF থেকে অন্য পদ্ধতির কোনও পরিবর্তন পূর্বাভাস না দিই, তবে আমার উপরের কোডটি ঠিক হবে? আমার তখন কেবল ইউআই এবং বিএলএল থাকবে (যেখানে ইডিএমএক্স বিএলএল রয়েছে)?
থমাস

আমার বাস্তব উত্তর হ্যাঁ হবে। যে সতর্কতার সাথে আপনি সম্ভবত ইডিএমএক্সটিকে তার নিজের সামান্য সমাবেশে রাখতে চাইলে এটি বড় এবং বেশিরভাগ স্থির থাকতে পারে, যাতে আপনার এটি প্রায়শই পুনরায় সংকলন / পুনঃ বিতরণ করতে হবে না।
sq33G

আহ, পুনঃব্যবস্থা / পুনঃ বিতরণ সম্পর্কে ভাল কথা :)
থমাস

2

লেয়ারিংয়ের জন্য দুটি সাধারণ পন্থা রয়েছে: কঠোর লেয়ারিং এবং রিলাক্স লেয়ারিং।

কঠোরভাবে স্তরযুক্ত পদ্ধতির একটি স্তরের উপাদানগুলি কেবলমাত্র সমবয়সীদের সাথে এবং সরাসরি নীচে স্তরটির সাথে ইন্টারঅ্যাক্ট করতে বাধা দেয়।

একটি শিথিল স্তরযুক্ত অ্যাপ্লিকেশন সীমাবদ্ধতাগুলি আলগা করে যাতে কোনও উপাদান কোনও নিম্ন স্তর থেকে উপাদানগুলির সাথে যোগাযোগ করতে পারে।

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

অনেকগুলি সফ্টওয়্যার উপাদান জড়িত বৃহত্তর সমাধানগুলির জন্য, সমাহারযোগ্য নয় এমন একই বিমূর্ততার স্তরে প্রচুর সংখ্যক উপাদান থাকা সাধারণ। এই ক্ষেত্রে, প্রতিটি স্তর আরও এক বা একাধিক সমন্বিত সাবসিস্টেমগুলিতে বিগলিত হতে পারে। চিত্র 2 একাধিক সাব সিস্টেমের সমন্বয়ে গঠিত স্তরগুলি উপস্থাপনের জন্য একটি সম্ভাব্য ইউনিফাইড মডেলিং ল্যাঙ্গুয়েজ (ইউএমএল) স্বরলিপি তুলে ধরেছে।

উপসংহার: আপনার যদি মাঝের স্তরটির প্রয়োজন না হয় তবে এটি হারাবেন; সমস্ত অ্যাপ্লিকেশনগুলির জন্য একই পদ্ধতির প্রয়োজন হয় না এবং কোনওভাবে কেবল লেয়ারিং উদ্দেশ্যে একটি স্তর যুক্ত করার ক্ষেত্রে জটিলতা ব্যয় এবং রক্ষণাবেক্ষণের ক্ষেত্রে জরিমানা থাকবে।

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