এএসপি.এনইটি এমভিসি কী করতে পারে এবং রুবেল রিলে করতে পারে না? [বন্ধ]


37

এএসপি.এনইটি এমভিসি এবং রেলগুলির একই ব্যবহারের ক্ষেত্র রয়েছে, একই স্থাপত্যের চারপাশে নির্মিত, উভয় ফ্রেমওয়ার্ক অপেক্ষাকৃত নতুন এবং উন্মুক্ত উত্স and

সুতরাং একজন রেলস প্রোগ্রামার হিসাবে আমি জানতে চাই, এএসপি.এনইটি এমভিসি কী করতে পারে এবং রুবেল রিলে করতে পারে না, এবং ভিসা বিপরীতে?


দুর্দান্ত প্রশ্ন। আমি একজন এমভিসি বিকাশকারী এবং এর উত্তর জানতে আগ্রহী।
স্টুপারউসার

14
এই ধরণের প্রশ্নগুলি উন্মুক্ত এবং ওয়েব আইএমএইচও ট্রল করে আরও ভাল উত্তর দেওয়া হয়। একটি বিএমডাব্লু 335 হুন্ডাই সোনাটা যে পারে না তা কী করতে পারে? তাদের উভয়ের 4 টি প্রচেষ্টা, একটি স্টিয়ারিং হুইল এবং একই ব্যবহারের কাঠামোর উপর নির্মিত; জ্বালানি। এই প্রশ্নগুলি প্রদত্ত বিষয়গুলিতে বোঝার জন্য গবেষণার অভাবের কারণে পৃষ্ঠপোষকতা করেছে যা আরও সরাসরি প্রশ্নকে সহজ করতে পারে .... আমি নিশ্চিত যে এই প্রোগ্রামার হওয়ায় অনেকেই একমত হবেন না ...
অ্যারন ম্যাকআইভার

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

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

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

উত্তর:


31

আমি রেল এবং এএসপি.এনইটি এমভিসি উভয়ের সাথেই সত্যিকারের অ্যাপ্লিকেশনগুলি বিকাশ করেছি, তবে এই উত্তরটি একটি উল্লেখযোগ্য সতর্কতার সাথে আসে: আমি প্রাক সংস্করণ 2 রেলগুলি দিয়ে শিখেছি এবং বিকাশ করেছি, তাই এটি সম্পূর্ণভাবে সম্ভব যে আমি আমার সাথে পুরানো-সীমাবদ্ধ am রেল জ্ঞান।

বলা হচ্ছে, আমি মনে করি না যে এমন কিছু আছে যা একটি দিয়ে করা যায় তবে অন্যটির সাথে নয়। কোনও ওয়েব অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় কোনও সেট দেওয়া হয়েছে, আপনার অবশ্যই সেই অ্যাপ্লিকেশনটি তৈরি করতে সক্ষম হওয়া উচিত - সম্ভবত সমান দক্ষতার সাথে - রেল বা এএসপি.নেট এমভিসি উভয়ই দিয়ে।

বেশ কয়েকটি ঝরঝরে জিনিস রয়েছে যা আমার জ্ঞানের সর্বোপরি - এএসপি.নেট এমভিসিতে মূলত সি # /। নেট এর দিকগুলির কারণে উপলব্ধ। উদাহরণস্বরূপ: যখন আমার কাছে এমন একটি পৃষ্ঠা রয়েছে যাতে জমা দেওয়া একটি ফর্ম থাকে, তখন আমার কাছে একটি অ্যাকশন থাকবে যা এটি জিইটি বা পোষ্টের সাথে কী করবে তা স্থির করে কিনা তা পরীক্ষা করে দেখুন:

def edit
  @item = Item.find(params[:id])

  if request.post? 
    @item.update_attributes(params[:item])
    redirect_to :action => 'edit', :id => @item.id 
  end
end

এটি এর তুচ্ছ উদাহরণ, তবে if request.post?প্যাটার্নটি রেলগুলির মধ্যে অত্যন্ত সাধারণ একটি। তুচ্ছ-বিহীন মামলার ক্ষেত্রে অ্যাকশন কোডটি বড় এবং অগোছালো হয়ে উঠতে পারে এবং প্রায়শই আমি চাই যে আমি এটি পরিষ্কার পদ্ধতিতে পৃথক পদ্ধতিতে রিফ্যাক্টর করতে পারি could এএসপি.নেট এমভিসিতে আমি এটি করতে পারি:

public ActionResult Edit() {
  // Render my page that has the Edit form
  ...
}

[HttpPost]
public ActionResult Edit(Foothing foo) {
  // Save my Foothing data
  ...
}

আমি মনে করি যে পরিষ্কারভাবে জিইটি এবং পোষ্ট অনুরোধগুলির হ্যান্ডলিংটি পৃথক করতে সক্ষম হওয়া পরিষ্কার is আপনার মাইলেজ পরিবর্তিত হতে পারে.

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

def edit
  @item = Item.find(params[:id])

  if params[:status] == "new"
    ...
  else
    ...
  end

  if params[:gonkulated] == "true"
    ...
  else
    ...
  end

  if params[:invert] == "true"
    ...
  else
    ...
  end

  # Rest ommited for brevity
end

তবে এএসপি.নেট এমভিসি ঝরঝরে করে আমাকে আমার ক্রিয়া পদ্ধতির পরামিতি হিসাবে আমার ফর্মের সমস্ত মান পেতে দেয়:

[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
    ...
}

এএসপি.নেট এমভিসি বা রেলগুলি সম্পর্কে আমি দুটি জিনিসই সত্যই পছন্দ করি। এগুলি কোনও বুদ্ধিমান বা সক্ষম বিকাশকারীকে অন্যের চেয়ে এক কাঠামো চয়ন করার পক্ষে যথেষ্ট কারণ নয়।


6
অ্যাকশন প্যারামিটারগুলি সম্পর্কে: আমি ভাবতাম public ActionResult Edit(Foothing foothing), অর্থাত মডেলবাইন্ডার বৈশিষ্ট্যগুলি আরও সুন্দর ছিল।
rmac

10
রেলের উদাহরণগুলি বেশ পুরানো। তারা কাজ করে তবে এটি করার আরও ভাল উপায় আছে।
জেসন

2
@Jason: আপনি এই প্রসারিত করতে এবং হয়ত একটি পোস্ট যত্ন নেবেন সারকথা ?
ড্যান

3
আমি একমত যে অনুরোধ.পষ্ট? আমার কাছেও এটি অস্বাভাবিক দেখাচ্ছে (সম্ভবত এটি পুরানো সংস্করণে ব্যবহৃত হয়েছিল)। আমি রেল 3 দিয়ে শুরু করেছি এবং সম্পাদনা পদ্ধতিটি সর্বদা একটি 'পাওয়া'। আমি মনে করি আপনি এটি একটি পোস্ট হিসাবে কনফিগার করতে পেরেছিলেন, তবে রেলগুলি একটি RESTful প্যাটার্ন ব্যবহার করে যা কোনও মডেলটিতে ঘটে যাওয়া কোনও পরিবর্তনগুলিতে পোস্ট করার জন্য একটি 'আপডেট' পদ্ধতি ব্যবহার করবে। সুতরাং, যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনার এমনকি 'সম্পাদনা' পদ্ধতিটি কোনও পোস্ট ছিল কিনা তাও পরীক্ষা করা উচিত নয়।
ফিলিপক্রিগ

3
আপনাকে ভোট দেওয়ার জন্য কেবল আপনি একটি বুদ্ধিমান যুক্তি উপস্থাপন করেছেন। আমি রেলগুলি পছন্দ করি তবে এটি সম্পূর্ণরূপে বিষয়গত এবং আপনি আপনার মামলার পক্ষে তর্ক করেন।
স্টিভ হিল

6

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

এএসপি.নেট এমভিসির ডিফল্ট ওআরএম নেই। আপনি আপনার প্রয়োজন অনুসারে একটি ডেটা অ্যাক্সেস কৌশল বেছে নিতে পারেন fits নাইবারনেটের মতো কিছু ওআরএম উত্তরাধিকারের ডাটাবেসগুলিকে সমর্থন করতে পারে। আপনার গাইড প্রাইমারি কী ইত্যাদি থাকতে পারে

ডেটা ম্যাপার নামে পরিচিত রেলস অ্যাক্টিভেকর্ডের বিকল্প রয়েছে , তবে আমি এটি চেষ্টা করি নি।


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

1
এএসপি.নেট এমভিসির কাছে ওআরএম-এর সত্তা ফ্রেমওয়ার্ক রয়েছে যা এটির সাথে আমার অভিজ্ঞতায় এখনও অবাক হয়েছে।
কুপার

যদি দুর্দান্তভাবে আপনি বোঝাচ্ছেন খারাপভাবে উত্পন্ন প্রশ্নগুলি যথাযথভাবে লিখিত এসকিউএল থেকে 20 গুণ কম ধীরে ধীরে কার্যকর করা হয় তবে হ্যাঁ;) ... ড্যাপার কন্ট্রিবিব এমন একটি জিনিস যা আমি দুর্দান্ত এবং দ্রুত পেয়েছি ...
niico

2

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

একটি সাধারণ "ওয়েব ২.০" সিআরইউডি অ্যাপ্লিকেশনে অন্য সমস্ত কিছু সমান হয়ে ওঠায় অন্যরকম কিছু করার মতো কিছুই নেই, তবে আরও জটিল অ্যাপ্লিকেশনের জন্য যা একটি ওয়ার্কফ্লো প্রয়োজন হয়, বা ডেটা উত্সগুলিকে পৃথক করে তোলে, বা অন্য অ্যাপ্লিকেশন, বা যে কোনও কিছুর সাথে ইন্টারঅ্যাক্ট করে for যে নয় টিপিক্যাল টি ককটেলের, ASP.NET আরো অনেক কিছু করতে পারি এবং পাগল যেমন নিয়ন্ত্রণমূলক হতে।


9
-1 আমি এএসপি.নেট এমভিসিটিকে আরও নমনীয় বলে বিবেচিত হওয়ার কোনও কারণ দেখছি না - যদি আপনি প্রধান উপাদানগুলি, রাউটিং, কন্ট্রোলারগুলি, রেন্ডারিংয়ের দিকে লক্ষ্য করেন তবে সেগুলি কেবল রেলপথ থেকে ছিটকে পড়ে এবং প্রচুর বৈশিষ্ট্যও হারিয়েছে।
স্কটসক্ল্থেথস

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

2
কাঁচা সি # / .নেট কাঠামোতে নামিয়ে আনতে সক্ষম হওয়া কি আরও নমনীয় বলে বিবেচিত হতে পারে?
ক্রিস ব্যারি

2
এতে খুব দেরী হয়েছে, তবে এই পোস্টটির সাথে আমি যা বোঝাতে চেয়েছি তা হ'ল এএসপি.নেট এমভিসি আপনাকে সি # /। নেট এ নামাতে দেয় এবং পুরো কাঠামোটি উত্সাহ দেয়। সেই সময়ে রেলগুলি (২.০-এর আশেপাশে আমার মনে হয়? আমি মনে করতে পারি না) মূলত সিআরইউডি খুব সহজ এবং সমস্ত কিছু শক্ত করে তোলে; আমি যখন এই প্রকল্পটি লিখেছিলাম তখন আমি যে প্রকল্পটিতে কাজ করছিলাম তা রেলগুলিতে করা হয়েছিল (আমার ত্রুটি) এবং আমরা "ডেটাবেস থেকে পঠন, পৃষ্ঠায় প্রদর্শন" ছাড়িয়ে যুক্তিটি করার মুহুর্তটি ভেঙে ফেলেছিলাম, আমি কি সি # / এএসপি.নেট এমভিসিতে এটি করেছিলাম ( আইআইআরসি এই মুহুর্তে ১.০) এর পরিবর্তে অ্যাপ্লিকেশনটির জন্য রেলগুলি বেছে নিয়ে আমি যেগুলি বেশিরভাগ সমস্যার মুখোমুখি হতে পারি না।
ওয়েইন মোলিনা

2

আমি কখনই রুবেল অন রেলসের সাথে কাজ করি নি, তাই এই প্রশ্নের উত্তর দেওয়ার জন্য আমি ঠিক যোগ্য নই, তবে এএসপি.নেট এমভিসি সম্পর্কে আমি একটি জিনিস পছন্দ করি তা হ'ল টাইপ-সুরক্ষা safety এই পথে আসে। অ্যাডাম ক্রসল্যান্ড এবং rmac তাদের মন্তব্যে সংক্ষেপে এটি স্পর্শ করেছেন, তবে আমি উল্লেখ করতে চাই যে নীচের মতো একটি নিয়ামক পদ্ধতিতে প্রতিটি প্যারামিটার দৃ strongly়ভাবে টাইপ করা হবে। এটি সম্পাদনা পদ্ধতির মধ্যে কোডকে অনেক বেশি পরিষ্কার করে তোলে যে স্ট্রিং উপস্থাপনাগুলি সঠিকভাবে টাইপ করা ভেরিয়েবলগুলিতে রূপান্তর করার বিষয়ে আপনাকে চিন্তা করতে হবে না।

[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
    ...
}

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

যদি Infinity.ViewModels.Siteকোনও শ্রেণি সম্বলিত নামের ContactViewModelস্থানটি বলা হয় , তবে রেজার দর্শনগুলির জন্য, আপনি দেখার শীর্ষে এই জাতীয় একটি লাইন রেখে এটি করেন:

@model Infinity.ViewModels.Site.ContactViewModel

এবং এএসপিএক্স দর্শনগুলির জন্য, আপনি দর্শনটি এইভাবে ঘোষণা করে করেন:

<%@ Page Language="C#" ="~/Views/Shared/Site.master" ="System.Web.Mvc.ViewPage<Infinity.ViewModels.Site.ContactViewModel>" %>

আপনি কন্ট্রোলার অ্যাকশন পদ্ধতিতে মডেল অবজেক্টের প্রকৃত উদাহরণটি যুক্ত করে এবং তারপরে দৃশ্যের Modelসম্পত্তি অনুসারে মডেল অবজেক্টটির দৃষ্টান্ত অ্যাক্সেস করেন ।

এই দৃ strong়-টাইপড নেসটি আমার কাছে অত্যন্ত শীতল। এএসপি.এনইটি এমভিসি তৈরি করা দলটি 3 টি মডেল, ভিউ এবং কন্ট্রোলার অঞ্চলকে দৃ strongly়ভাবে টাইপ করার জন্য প্রচুর প্রচেষ্টা করেছে spent

আমি নিশ্চিত নই যে রুবি অন-রেলগুলি এটি রয়েছে কিনা তবে আমি আশা করি।


রুবি ভাষা দৃ strongly়ভাবে টাইপ করা হয় (হাঁসের টাইপও করা হয়)। এবং এর মডেলগুলি তার দৃষ্টিভঙ্গিগুলির সাথে স্বয়ংক্রিয়ভাবে যুক্ত করতে সক্রিয় রেকর্ডগুলি ব্যবহার করে uses এগুলি আপনাকে নিয়ামক হিসাবে ঘোষণা করার দরকার হবে না। আপনি যদি দেখার মতো নেস্টেড হায়ারার্কি তৈরি করতে চান, আপনি নিয়ন্ত্রণে এমন একটি মডেল ভেরিয়েবল তৈরি করবেন যেগুলি আপনাকে ভিউতে যেতে চান এমন মডেলগুলি উপস্থাপন করে। হ্যাঁ, তারা উভয়ই একই জিনিস করতে পারে।
ফিলিপক্রিগ

1

এগুলি খুব একই রকম এবং এগুলি বেশিরভাগই "একই জিনিসগুলি" করতে পারে, কেবল কিছু জিনিস একটিতে সহজ এবং অন্যের চেয়ে শক্ত।

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


2
সত্য - তবে রেলগুলিও প্রায় 8 বছর ধরে রয়েছে তাই এটির শুরুটাও রয়েছে। আমি রেলগুলি থেকে এসপ.net এ আসছি এবং এমভিসি 3 আসলে খুব সুন্দর। এন্টি ফ্রেমওয়ার্ক এবং নুগেট প্যাকেজ ম্যানেজার এখনও পর্যন্ত আমার জন্য খুব চিত্তাকর্ষক।
ফিলিপক্রিগ

1

আমার সীমিত অভিজ্ঞতায়, এএসপি.এনইটি এমভিসি-র প্রধান সুবিধা হ'ল এটি একটি সংকলিত ভাষা। এটি আপনাকে সংকলনে ইতিমধ্যে কয়েকটি প্রোগ্রামিং বাগ সনাক্ত করতে সহায়তা করে, যেখানে ইউনিট পরীক্ষার সময় রুবিকে তারপরে সনাক্তকরণের উপর নির্ভর করতে হবে।

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

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

যে কোনও সময়ে যেকোনও সময় যে কোনও পদ্ধতি প্রতিস্থাপনের ক্ষমতা আমাকে ইউনিট পরীক্ষাগুলি লেখার ক্ষেত্রে ব্যাপক সহায়তা করেছে। .NET এ, নির্ভরশীল ইনজেকশন এবং আইওসি পাত্রে পরীক্ষামূলক কোড তৈরির জন্য কার্যত প্রয়োজনীয়তা। এটি রুবিতে প্রয়োজনীয় নয়।

সম্পাদনা:

এটি সম্পর্কে চিন্তাভাবনা করার পরে, সম্ভবত রেলের হত্যাকারী বৈশিষ্ট্য হ'ল ডাটাবেস স্থানান্তর। এএসপি.এনইটি এমভিসি ফ্রেমওয়ার্ক নিজেই কোনও ডাটাবেস সমর্থন সরবরাহ করে না। .NET ফ্রেমওয়ার্কটিতে কিছু ডেটা অ্যাক্সেস উপাদান / ওআরএম থাকে, উদাহরণস্বরূপ সত্তা ফ্রেমওয়ার্ক এবং লিনক থেকে এসকিএল পর্যন্ত। তবে এটিতে ডাটাবেস কাঠামো ডিজাইনের কোনও সরঞ্জাম নেই।

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

কেউ কেউ দাবি করেন যে ডাটাবেস স্থানান্তরের পক্ষে সমর্থন না থাকার কারণে এএসপি.নেট এমভিসি আসলেই একটি এমভিসি কাঠামো নয়, কেবল একটি ভিসি কাঠামো।

সম্পাদনা করুন (আবার):

ভিজ্যুয়াল স্টুডিও সরঞ্জামচেইন / ইএফ পরিবর্তনগুলি আমার সর্বশেষ সম্পাদনার পর থেকে কোড ভিত্তিক মাইগ্রেশন চালু করেছে। (তবে আপনি যদি সেই পথে নামাচ্ছেন তবে ফ্লুয়েন্টমিগ্রেটরটিও দেখুন)


2
সত্তা ফ্রেমওয়ার্ক 5.0 কোড প্রথম স্থানান্তর সমর্থন করে
hofnarwillie

প্রকৃতপক্ষে, কোড প্রথম মাইগ্রেশনগুলি ৪.১-এর পরে সমর্থন করা হয়েছে, এটি আফ্রিক আমার সম্পাদনার পরে খুব বেশিদিন পরে প্রকাশিত হয়েছিল।
পিট

-1

মাইক্রোসফ্টের এমভিসি 3 এবং সত্তা ফ্রেমওয়ার্কের সাথে আমার বড় সমস্যা হ'ল তাদের স্তম্ভিতভাবে বাজে নকশার নীতি।

অন্য শ্রেণিটিকে সম্পত্তি হিসাবে ব্যবহার করার সময় এবং সম্ভাব্য মানগুলির জন্য একটি ড্রপডাউন তালিকা তৈরি করার চেষ্টা করার সময় আমি প্রথম যে সমস্যার মধ্যে পড়েছিলাম তার মধ্যে একটি ছিল।

আমার বক্তব্যটি বর্ণনা করার জন্য বলুন যে আপনার কাছে দুটি মডেল শ্রেণি রয়েছে:

public class Color
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Thing
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual Color Color { get; set; }
}

রঙের সম্পত্তি তৈরি করা সত্যিকারের ওআরএমের জন্য যথেষ্ট তবে ইএফ নয়। থিং ক্লাসে রঙ সম্পত্তির জন্য আপনাকে একটি রিডানড্যান্ট আইডি যুক্ত করতে হবে:

public class Thing
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int ColorID { get; set; }
    public virtual Color Color { get; set; }
}

আপনি যদি কোনও বিদেশী অবজেক্টের রেফারেন্সের জন্য রিডানডান্ট আইডি ক্ষেত্রটি যোগ না করেন তবে আপনি সহজেই লিঙ্কযুক্ত শ্রেণি থেকে সম্ভাব্য সমস্ত বিকল্পের সাথে ড্রপডাউন তালিকা তৈরি করতে পারবেন না।

এটি সত্যিই ভয়ানক নকশা কারণ এটি দৃ one়ভাবে এক শ্রেণির অভ্যন্তরীণ কাজগুলিকে অন্য শ্রেণির সাথে সংযুক্ত করে। রঙিনআইডি সম্পর্কে কিছু জানা উচিত নয়, রঙ শ্রেণীর নিজের আইডি রয়েছে তা প্রকাশ না করেই নিজের সমতা পরীক্ষা করতে হবে।

এটি 101 টি স্টাফের সেরা অনুশীলন তবে স্পষ্টতই মাইক্রোসফ্ট কম্পিউটার বিজ্ঞানের বেসিক নীতিগুলি এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং সম্পর্কে সম্পূর্ণ অজানা [[/ রেন্ট]


8
আপনার সত্তা ফ্রেমওয়ার্ক অবজেক্টগুলিতে আপনার কোনও বিদেশী কী সম্পত্তি দরকার নেই। এছাড়াও, ইএফ সম্পূর্ণ পৃথক পণ্য এবং কোনওভাবেই এএসপি.নেট এমভিসির সাথে সংহত নয়। আপনার ব্যবহারকারীর ইন্টারফেসটি তৈরি করতে এবং কোনও ড্রপ ডাউন তালিকা বা অন্যান্য নিয়ন্ত্রণগুলি তৈরি করতে আপনার ভিউ মডেলগুলি ব্যবহার করা উচিত।
লুসিফার স্যাম

আমি রাজী. আপনার সত্তা ফ্রেমওয়ার্কগুলিতে আপনার কোনও আইডি কী থাকা উচিত নয়। একটি ওআরএমের উচিত বস্তুর পরিচয় হ্যান্ডেল করা। কিন্তু পয়েন্ট নেওয়া; আমি সত্যিই ভয়ঙ্কর EF ORM সম্পর্কে আরও অভিযোগ করছি। সেই উদাহরণটি একটি সরল সংস্করণ যা সরাসরি মাইক্রোসফ্ট থেকে আসে। তারা তাদের কনটোসো ইউনিভার্সিটির উদাহরণে ঠিক কীভাবে এটি করে। এটি আমার কথা বলতে পারে। মাইক্রোসফ্ট কীভাবে এমভিসি বা ওআরএম করবেন তা জানে না এবং তাদের উদাহরণগুলি এটি দেখায়।
মাইক

1
কালারআইডি বৈশিষ্ট্য যুক্ত করা আপনাকে অলস লোডিং প্যাটার্নগুলি প্রয়োগ করতে দেয় যা অনেক সময়ে দরকারী। উদাহরণস্বরূপ, যদি রেফারেন্সযুক্ত বস্তুটি খুব বড় হয় এবং আপনার যদি সত্যই অবজেক্টের সমস্ত সম্পত্তি মানের প্রয়োজন না হয়, তবে এটির সম্পর্কিত আইডি অংশটি খুঁজে পাওয়ার জন্য এটি সমস্ত কিছু আনা প্রক্রিয়াকরণের সময় নষ্ট হবে (কালারআইডি) । এটি আপনাকে নলেবল / নন-নুলযোগ্য বিদেশী কীগুলি বাস্তবায়িত করতে সহায়তা করে, অর্থাত্ যদি রঙের সবসময় প্রয়োজন হয় না তবে কী হবে? কালারআইডি-কে একটি নোলযোগ্য পূর্ণসংখ্যায় পরিবর্তন করুনint?
hofnarwillie
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.