এমভিসি যদি "উদ্বেগের বিচ্ছেদ" হয় তবে কেন রেজার সিনট্যাক্স চালু করা হয়েছিল?


22

আমার প্রশ্নটি এমভিসি ডিজাইনের ধরণ এবং মাইক্রোসফ্ট দ্বারা প্রবর্তিত রেজার সিনট্যাক্স সম্পর্কিত।

এমভিসি ডিজাইনের প্যাটার্ন শিখার সময় আমাকে বলা হয়েছিল যে ধারণাটি মূলত আলাদা আলাদা কনসার্নস নামে পরিচিত একটি মূলনীতির উপর ভিত্তি করে ।

কিন্তু রাজো সিনট্যাক্স আমাদের মধ্যে সি # ব্যবহার করার অনুমতি দেয় দেখেছে সরাসরি।

উদ্বেগের এই ছেদটি কি নয়?


7
এটি উল্লেখ করার মতো বিষয় যে এএসপি.এনইটি এমভিসি আসলে এমভিসি ডিজাইনের ধরণটি কার্যকর করে না। এমভিসি নির্দেশ দেয় যে মডেলগুলি এমন পরিবর্তনগুলির জন্য দৃষ্টিভঙ্গি দ্বারা পর্যবেক্ষণ করা হয় যা স্পষ্টতই এএসপি.নেট এমভিসির ক্ষেত্রে হয় না।
বেনিয়ামিন গ্রুইনবাউম

11
আপনি ভিউ সম্পর্কে আপনার চিন্তাভাবনা পরিবর্তন করার ক্ষেত্রেও এটি সহায়তা করতে পারে। দেখেছে নয় ক্লায়েন্ট-সাইড কোড। এগুলি হ'ল সার্ভার-সাইড টেম্পলেটগুলি যা প্রক্রিয়া করার পরে ক্লায়েন্ট-সাইড এইচটিএমএল তৈরি করে। এবং সার্ভার-সাইড কোড হিসাবে এটি পুরোপুরি গ্রহণযোগ্য যে সেখানে সি # কোড রয়েছে।
এরিক কিং

6
@ এরিকিং যে অংশটি স্বেচ্ছাসেবী কোডগুলি সর্বদা বাজে নকশা, ভয়াবহ লেয়ারিং লঙ্ঘন এবং অনিবার্যতার দিকে পরিচালিত করে স্বেচ্ছাচারিত কোডকে সর্বদা নেতৃত্ব দেয় এমন অংশ ব্যতীত @ এরিকিং। দুর্ভাগ্যক্রমে, এটি এমন একটি পাঠ বলে মনে হচ্ছে যা প্রতিটি সম্প্রদায়কে নিজস্বভাবে শিখতে হবে।
hobbs

12
@ হোবস বাহ, ঠিক আছে আমার অভিজ্ঞতা না। অবশ্যই সবসময় না, এবং (অবশ্যই) প্রোগ্রামারের অংশে কিছু পেশাদার দায়বদ্ধতার প্রয়োজন রয়েছে। আমি হাতিয়ারটিকে দোষ দিই না।
এরিক কিং

7
@ বেঞ্জামিনগ্রুয়েনবাউম এখনকার প্রতিটি "এমভিসি" -ফ্রেমওয়ার্কের মতো নয় কীভাবে তারা আন্তঃনির্ভরতা পরিচালনা করে? দ্য ওয়ান ও ওনল ট্রু এমভিসি-স্টাইল সম্পর্কে কথা বলা এখন আর ফলপ্রসূ নয়, তবে মডেল , ভিউ এবং কন্ট্রোলারগুলিতে যুক্তিসঙ্গতভাবে পার্টিশনের দায়িত্বে থাকা যে কোনও সিস্টেমের জন্য এই শব্দটি ব্যবহার করা আরও বাস্তববাদী হবে তবে এগুলি পরস্পর নির্ভরশীল?
অ্যালেক্স

উত্তর:


66

উদ্বেগগুলি পৃথক করে আপনি রেজার সিনট্যাক্সকে বিভ্রান্ত করছেন।

আপনি কীভাবে আপনার কোডটি গঠন করেন তা নিয়ে উদ্বেগের বিভাজন।

ভিউতে সি # ব্যবহার করতে সক্ষম হওয়া এটি প্রতিরোধ করে না। এটি উদ্বেগের পৃথকীকরণের সাথে কিছুই করার নেই

অবশ্যই, আপনি উদ্বেগের বিচ্ছেদকে মেনে চলার জন্য আপনার দৃষ্টিতে কোডটি গঠন করতে পারেন, তবে কেবল # প্রদর্শনের উদ্দেশ্যে ব্যবহৃত সি # কোড সম্পর্কে কী বলা যায়? কোথায় থাকত?


1
তবে সি # সার্ভার-সাইডের ভাষা?
জন স্ট্রোস্কি

6
@ জন - তাই? আপনার যদি প্রদর্শনের জন্য তারিখগুলি বিন্যাস করতে হয় (এবং প্রদর্শনের অর্থ ক্লায়েন্টের পাশে, সর্বদা), আপনি সেগুলি কোথায় বিন্যাস করবেন? মডেলটি? কন্ট্রোলার? আমরাও। আপনি দৃষ্টিতে এটি করতে হবে।
ওডে

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

25
@ এনপিএসএফ 3000 - কোনও ভাষা "সার্ভার সাইড" বা "ক্লায়েন্ট সাইড" নয়। এটি একটি স্থাপত্য বিভাজন - এবং সম্ভবত ভাষা প্রয়োগের মধ্যে একটি (জাভাস্ক্রিপ্ট একটি সার্ভার পাশ বা ক্লায়েন্টের পাশের ভাষা - নোড.জেএস মনে রাখবেন)।
ওবেদ

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

35

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

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

কেবল পরে দলটি (যার মধ্যে আমি অন্তর্ভুক্ত) সিদ্ধান্ত নিয়েছে যে এমভিসি-র জন্য একটি ভিউ ইঞ্জিনের প্রয়োজনে রেজার সিনট্যাক্সটি প্রচুর অর্থবোধ করবে, যা একই দলটি লিখেছিল।

রেজার এএসপি.নেট এমভিসি-তে উদ্বেগের বিচ্ছিন্নতার ধারণাকে সক্ষম করে, বাধা দেয়, উন্নতি করে বা পরিবর্তন করে কিনা, ওড্ডের উত্তর স্পষ্ট।


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

কৌতূহলের বাইরে, এএসপি এমভিসির জন্য অন্য কোনও টেম্প্লেটিং ইঞ্জিন বিবেচনা করা হয়েছিল?
এনওয়ার্ড

2
@ এনওয়ার্ড এ সময় এএসপি.নেট এমভিসির জন্য বেশ কয়েকটি তৃতীয় পক্ষের ভিউ ইঞ্জিন ছিল, তবে আমরা সেগুলি খুব জোরালোভাবে বিবেচনা করি নি। আমরা অনুভব করেছি যে রেজারটি বোঝা সহজ ছিল (এইচটিএমএলটি এইচটিএমএল, সি # হ'ল সি #) এবং এএসপি.নেট ওয়েব পৃষ্ঠাগুলি প্রকল্পের সাথে আরও ভাল জেলযুক্ত।
আইলন

1
@ অ্যালেক্স ওহ, আমি অবশ্যই রেজার সমস্তটির জন্য ক্রেডিট নিতে পারি না, তবে আমি আপনার মন্তব্যের প্রশংসা করি!
আইলন

1
@ ইটারি অল্পক্ষণের পরে এটি উত্তরের বাম দিকে বৃহত সংখ্যা।
মার্ক হার্ট

9

আপনি "উদ্বেগের বিচ্ছেদ" দিয়ে "প্রযুক্তির পৃথকীকরণ" বিভ্রান্ত করছেন। এমভিসির "ভিউ" অংশের পিছনের মূল ধারণাটি "ভিউ" তে কোডটি কোনও ডেটা অ্যাক্সেস বা ভারী যুক্তি সরাসরি সম্পাদন করছে না, বরং এটি যথাক্রমে "মডেল" এবং "নিয়ন্ত্রক" অংশে রেখে গেছে। "কন্ট্রোলার" ডেটাটি রূপান্তর করে, প্রয়োজনীয় যুক্তি সম্পাদন করে এবং সঠিক "দেখুন" এ নিয়ে যায়। দৃশ্যটি ডেটা ট্রান্সফর্মেশনগুলিও করতে পারে, তবে আমি তাদের উপর নিখুঁতভাবে প্রসাধনী রাখার ঝোঁক রাখছি যেমন উপরে বর্ণিত তারিখের রূপান্তর।


এই অফারটি কোন কিছুরই সৃষ্টি পয়েন্ট উপর সারগর্ভ বলে মনে হচ্ছে না এবং বিশেষ করে পূর্বে উত্তর ব্যাখ্যা এই এক
মশা

4
+1 একটি সংক্ষিপ্ত এবং সুস্পষ্ট উপায়ে এবং পূর্ববর্তী উত্তরের তুলনায় ব্যাখ্যার আলাদা ফোকাস সহ সূচিত।
অ্যালেক্স

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

0

আমি একটি নিখুঁত Don't do itউদাহরণ সম্পর্কে চিন্তা করতে পারেন ।

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

public class ProductController()
{
    public ViewResult Discontinued()
    {
        var db = new ProductsDb();
        var products = db.Products.Where(x => x.Discontinued).ToList();
        return new ViewResult(products);
    }
}

রেজারের সাথে আমাদের একটি বিকল্প আছে

public class ProductController()
{
    public ViewResult Discontinued()
    {
        var db = new ProductsDb();
        var products = db.Products.ToList();
        return new ViewResult(products);
    }
}

এবং আমাদের দৃষ্টিতে:

@model IEnumerable<Product> 

@foreach (var item in Model.Where(x => x.Discontinued)) {
    ....
}

আমি মনে করি এটি বেশ সুস্পষ্ট যে দ্বিতীয় সমাধানটি কেবল এতটা ভুল অনুভব করছে। আপনি যদি এমন কিছু করেন তবে রেজারকে দোষ দেবেন না - নিজেকে দোষ দিন।

এবং ভুলে যাবেন না: ভিউতে সি # ব্যবহার করতে সক্ষম হওয়া একটি রেজার বৈশিষ্ট্য নয়, এটিএসপি.এনইটি ভিউ দ্বারাও এটি সম্ভব হয়েছিল। রেজার দিয়ে এটি কিছুটা সহজ।

আপনি যদি এমন কোনও টেম্পলেট ইঞ্জিন অনুসন্ধান করছেন যা আরও বেশি রেল আপনার মতো করে সুপার সিম্পল ভিউ ইঞ্জিন সহ ন্যান্সি.এফএক্স একবার দেখে নেওয়া উচিত।

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