কোডফর্স্ট কি বড় আকারের অ্যাপ্লিকেশনগুলির জন্য উদ্দিষ্ট?


16

আমি সত্ত্বা ফ্রেমওয়ার্কটি পড়ছি, বিশেষত, ইএফ 4.1 এবং এই লিঙ্কটি অনুসরণ করছি ( http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-de વિકાસment-with-entity- ফ্রেমওয়ার্ক-৪.এসপিএক্স ) এবং এটি প্রথম কোডের নির্দেশিকা।

আমি এটি পরিষ্কার পরিচ্ছন্ন দেখতে পেয়েছি কিন্তু আমি ভাবছিলাম, কোড ফার্স্টকে দ্রুত বিকাশের জন্য কেবলমাত্র একটি সমাধান বলে মনে করা হয় যেখানে আপনি খুব বেশি পরিকল্পনা ছাড়াই ডানদিকে ঝাঁপিয়ে পড়তে পারেন বা এটি আসলে বড় আকারের অ্যাপ্লিকেশনগুলির জন্য ব্যবহারের উদ্দেশ্যে?


আমি মনে করি কোড-ফার্স্ট পদ্ধতিটি উপহাসের জন্য আরও উপযুক্ত। সুতরাং, এটি আরও পরীক্ষামূলকভাবে বন্ধুত্বপূর্ণ।
গুলশান

9
কোড-প্রথমটি হ'ল খুব কম সময়ে, আপনার ডিবিএকে একটি অনিয়ন্ত্রিত লাথারে কাজ করার জন্য একটি দুর্দান্ত প্রযুক্তি। সুতরাং, এটি সব খারাপ হতে পারে না।
স্পে

উত্তর:


17

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

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

ছোট অ্যাপ্লিকেশনগুলি ব্যতিক্রম হতে পারে, তবে আমি আমার ডেটা-কেন্দ্রিক পদ্ধতির ব্যবহার চালিয়ে যাব।


2
এটি হতে পারে কারণ আমার কাছে দৃষ্টিভঙ্গিটি এখনও কিছুটা বিদেশী এবং আমি পরে আমার মন পরিবর্তন করতে পারি, তবে ছোট অ্যাপ্লিকেশনগুলির জন্যও আমি মনে করি যে আমি প্রথমে ডাটাবেস থেকে আরও স্বাচ্ছন্দ্য বানাব। এটি সর্বাধিক যৌক্তিক বিন্দু বলে মনে হচ্ছে।
রোবশপ

5
এমনকি আপনি কোডফার্টে আপনার ডাটাবেস বেস করার সময়ও, আপনি এখনও ডেটা-কেন্দ্রিক পদ্ধতির ব্যবহার করছেন। আপনি কেবল কঠোর ডাটাবেস না করে নেট ক্লাসগুলি ব্যবহার করে আপনার ডেটা মডেলিং করছেন। আপনি যদি নেট ডেটা ক্লাসে আপনার ডেটা মডেল করতে পারেন, যা আপনাকে যেভাবেই ডেটা ব্যবহার করতে হয় তা জানতে হবে, তবে আমি দেখতে পাচ্ছি না যে কীভাবে EF সেই ডেটা মডেলটিকে সমর্থন করার জন্য স্কিমা তৈরি করতে দেয় to
কলড্রেইক্সিক্স

1
আমি আরও যোগ করতে চাই যে আপনি EF 5.0+ এবং .NET 4.5+ এ না থাকলে কোড ফার্স্ট নির্বাচন করা আপনার অ্যাপ্লিকেশনে কমপ্লাইডকোয়ারি বস্তু তৈরি করতে না পারার কারণে পারফরম্যান্স সীমাবদ্ধতা স্থাপন করবে। আমি বর্তমানে কোড ফার্স্ট থেকে ডেটাবেস প্রথমটিতে একটি অ্যাপ্লিকেশন স্থানান্তরিত করার প্রক্রিয়াতে রয়েছি কারণ আমরা EF 4.3 এর সাথে আটকেছি
Esteban Brenes

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

5

আমি দেখতে পাচ্ছি না যে কেন বৃহত্তর এন্টারপ্রাইজ প্রকল্পগুলিতে কোড ফার্স্ট ব্যবহার করা যায় না। আমি বলব যে আমি বেশ কয়েকটি প্রকল্পে ইএফ কোডফার্স ব্যবহার করি, এটি একটি যেখানে আমার ইএফ কোডফার্স্ট মডেলটি তৈরি করে এবং দ্বিতীয়টি যেখানে ইএফ কোডফার্স একটি বিদ্যমান ডাটাবেসে ম্যাপ করা হয়।

আমার অভিজ্ঞতা থেকে, একটি বড় প্রকল্পে সিএফ কতটা কার্যকর তা নির্ভর করে আপনার ব্যবসায়ের স্তর থেকে আপনার ডেটা স্তরটি কীভাবে বিমূর্ত করা যায় তার উপর নির্ভর করে।

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

তবে, অন্য একটি প্রকল্পে আমি একটি নন-জেনেরিক সংগ্রহস্থল প্যাটার্নে ডাটাবেস অ্যাক্সেসকে বিমূর্ত করেছি এবং আমার সংগ্রহস্থলের গেট * পদ্ধতিগুলি ডেটাবেজে অনুসন্ধান চালানোর জন্য একমাত্র দায়বদ্ধ এবং তারা আসল বস্তু ( IQueryable<T>গুলি নয় ) ফেরত দেয় । এই উদাহরণস্বরূপ, সংগ্রহস্থল পদ্ধতিগুলি ডিবি সত্তাগুলি পোকো সত্তায় রূপান্তর করছে এবং এই ক্ষেত্রে কোডফার্স আপনার পক্ষে তেমন সুবিধা দেয় না যতটা কোডফার্স পোকো স্বল্পস্থায়ী এবং দ্রুত ব্যবসায় স্তর স্তর # ক্লাসে রূপান্তরিত হয়।

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


4

কোড ফার্স্ট বড় আকারের অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত নয়। বড় আকারের অ্যাপ্লিকেশন বিকাশের টার্নআরআউন্ড খুব বিশাল।

সাধারণত আপনার ব্যবসায়ের অ্যাপ্লিকেশনটির জীবনচক্রটি হ'ল,

  1. সংস্করণ 1 উত্পাদিত হয়
  2. সংস্করণ 2 বিটাতে রয়েছে
  3. সংস্করণ 3 সক্রিয় বিকাশে রয়েছে
  4. সংস্করণ 4 পরিকল্পনা করা হয়।

এবং অন্যান্য ক্রস অ্যাপ্লিকেশন যোগাযোগ সেতু রয়েছে, কিছু তফসিলযুক্ত কাজ, কিছু তৃতীয় পক্ষের ইন্টিগ্রেশন, কিছু বিভিন্ন যোগাযোগের ডিভাইসের জন্য ওয়েব পরিষেবা যেমন মোবাইল ইত্যাদি etc.

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

অটোমেটেড মাইগ্রেশন

অটোমেটেড মাইগ্রেশন তাত্ত্বিকভাবে ভাল মনে হয়, তবে একবার আপনি লাইভ হয়ে গেলে অনুশীলনে অসম্ভব। এটি কেবল প্রোটোটাইপিংয়ের জন্য ভাল, কিছু দ্রুত ডেমো বিকাশ করতে পারে।

কোড ফার্স্ট মাইগ্রেশন এ জাতীয় সিস্টেমে মোটেই উপযুক্ত নয়। সংস্করণ 1 এবং সংস্করণ 2 সম্ভবত একই ডাটাবেসের সাথে কথা বলে। সংস্করণ 3 এবং সংস্করণ 4 সাধারণত মঞ্চায়িত হয় এবং বিভিন্ন ডেটাবেস থাকে।

প্রথম ডাটাবেস

ডেটাবেস প্রথম হ'ল ব্যবহারিক পদ্ধতির, এসকিউএল স্ক্রিপ্টগুলির তুলনা করা এবং কল্পনা করা এবং বজায় রাখা সহজ। ডিবিএগুলি সহজেই কাজ করতে পারে।

পাঠ্য টেম্পলেট

কার্য সম্পাদনের সমস্যাগুলিকে সম্বোধনকারী সামান্য কাস্টম প্রয়োগের সাথে আমরা EDMX এবং অবজেক্টকন্টেক্সটি অনুসন্ধান করতে এবং তৈরি করতে আমাদের নিজস্ব পাঠ্য টেম্পলেট তৈরি করেছি। কোনও সমস্যা ছাড়াই একই ডাটাবেসে যোগাযোগ করে একাধিক সংস্করণ সহ একাধিক অ্যাপ্লিকেশন রয়েছে।

আমার কাছে, ড। টিটি ফাইলের উপর ডান ক্লিক করা এবং "রান কাস্টম টুল" ক্লিক করা ক্লাস রচনা, কনফিগারেশন এবং মডেল তৈরির পরে সবচেয়ে দ্রুত এবং সহজতম পদক্ষেপ।


আপনার বর্ণনা করা দৃশ্যের জন্য হিজরতগুলি হুবহু উদ্দেশ্যযুক্ত।
কেসি

সমস্ত মাইগ্রেশনগুলি করে (এবং তাদের স্বয়ংক্রিয়ভাবে চালাতে হবে না) আপনি কোড তৈরি করতে চান ডাটাবেস পরিবর্তনের সিরিজটি বর্ণনা করে। যদি পুরানো মডেল এবং নতুনটির মধ্যে কোনও বিরোধ না হয় (বা আপনার কোনওভাবেই ডাটাবেস পরিবর্তনের দরকার নেই) তবে একই ডাটাবেসটি ব্যবহার করে আপনার দুটি সংস্করণ না পাওয়ার কোনও কারণ নেই।
কেসি

2
@ ক্যাসি এটি একটি বড় আইএফ, কোনও আবেদনের জীবদ্দশায় বিবেচনা করার সময় :)
বিভারনন

3

সাধারণত বড় প্রকল্পগুলির জন্য ইতিমধ্যে ডেটাবেস তৈরি করা হয়েছে। হয় কারণ এটি কোনও উত্তরাধিকারের ডাটাবেস বা পারফরম্যান্সের জন্য উপযুক্ত ডিবিএ দ্বারা তৈরি। কোড ফার্স্টের একমাত্র সুবিধা হ'ল আপনি যদি ইএফের সত্ত্বাগুলি ব্যবহার না করতে চান তবে পরিবর্তে পোকসই ব্যবহার করতে পারেন।


2

এটি আমার কাছে মনে হচ্ছে "কোড ফার্স্ট" বলতে আরও বেশি "চটজলদি" EF ব্যবহার করার জন্য বোঝানো হয়েছে (সেই শব্দটির উপর খুব বেশি বীণা বানাবেন না, আমি প্রয়োজনীয় পদ্ধতিটির অর্থ অবশ্যই প্রয়োজন না) এবং গ্রিনফিল্ড অ্যাপস, যেখানে আপনার কাছে নেই বিদ্যমান ডেটা মডেল বা বিদ্যমান ডেটা; যে ধরণের অ্যাপ্লিকেশন আপনি জ্যাঙ্গো, বা একটি পিএইচপি ফ্রেমওয়ার্ক বা রেলগুলি ব্যবহার করতে পারেন সেগুলি ফ্রেমওয়ার্কের নির্দেশিকাগুলি অনুসরণ করার জন্য যা সাধারণত কোডের অংশ হিসাবে ডেটা মডেল তৈরি করা জড়িত, কোনও ডেটা মডেলের চারপাশে একটি অ্যাপ্লিকেশন তৈরির পরিবর্তে যা প্রচলিত is মাইক্রোসফ্ট জিনিস পরিচালনা করার উপায়।

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


আমার 400++ এর সাথে একটি চলমান অ্যাপ্লিকেশন রয়েছে এবং সমস্ত কোড প্রথম EF পদ্ধতির ব্যবহার করে তৈরি করা হয়েছিল, আমি বিমূর্ততা ব্যবহার করতে পেরেছি, উত্তরাধিকার অন্যান্য মডেলিং পদ্ধতির তুলনায় অনেক বেশি সহজ (ডেটাবেস প্রথম, মডেল প্রথম), আমি কোডটি প্রথম পদ্ধতির ব্যবহার করার পরামর্শ দিই এটি আপনাকে কোডের নিয়ন্ত্রণ এবং বজায় রাখা সহজ করবে এবং আপনি কার্য সম্পাদন এবং কোডিংয়ের সময় কোনও কিছু হারাবেন না।
মোনাহ

1

আমি সত্যিই বড় প্রকল্পগুলিতে বলব, কোড-ফার্স্টটি বোঝায় না।

আসলে, যখন প্রকল্পটি সত্যই বড় হয়, আপনার প্রায়শই উদ্বেগের কঠোর বিচ্ছেদ ঘটে separa আপনার কাছে একই ব্যক্তি সি # কোড লিখছেন, ডাটাবেস ডিজাইন করছেন, এইচটিএমএল / সিএসএস লিখে ফটোশপটিতে ভিজ্যুয়াল ডিজাইন করছেন can't পরিবর্তে, ডাটাবেস ডিজাইন একটি ডাটাবেস প্রশাসক (বা কমপক্ষে একজন ডেডিকেটেড ব্যক্তি যিনি তার কাজ জানেন) দ্বারা সম্পন্ন হয়।

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

তদুপরি, আমি নিশ্চিত নই যে সত্তা ফ্রেমওয়ার্ক সঠিকভাবে ডাটাবেসটি ডিজাইনের জন্য যথেষ্ট শক্তিশালী কিনা। সূচকের কী হবে? সীমাবদ্ধতাসমূহ? দেখেছে?


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

আমরা আমাদের, খুব বড়, প্রকল্পের জন্য একটি এক্সটেনশান লাইব্রেরি যুক্ত করেছি যা আমাদের কোড-প্রথম সত্তাগুলিতে সূচীগুলি বেনিফিট করতে দেয় - দুর্দান্ত কাজ করে এবং তুলনামূলকভাবে সহজ ছিল।
ক্যাস্পার

1

কোডটি এমনকি বৃহত সিস্টেমের জন্য প্রথম কার্যকর: কেবলমাত্র তৈরির পরে মডেলটি পরীক্ষা করুন এবং আপনার পছন্দমতো ডিবি মডেল না পৌঁছানো পর্যন্ত সাবলীল এপিআই ব্যবহার করে পুনরায় তৈরি করুন।

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