জাভাস্ক্রিপ্ট মডুলারিটি, সার্ভার ভিত্তিক এমভিসি এবং ব্যবসায়ের বাস্তবতা


32

আমি বুঝতে পারছি এই একটি হল খুব প্রশস্ত প্রশ্ন, কিন্তু আমি এই সমস্যা পৃথকভাবে বিভিন্ন দিক সঙ্গে কাজ করেছি এবং সব ধারণা এবং প্রযুক্তির একসঙ্গে আনতে সংগ্রাম করছি।

আমি উল্লেখ করতে চাই যে উত্তরে এই প্রযুক্তিগুলি অন্তর্ভুক্ত করা উচিত:

  • সি শার্প
  • এমভিসি 3 ডাব্লু / রেজার
  • জাভাস্ক্রিপ্ট ডাব্লু / জিকুয়েরি

এর উপরে এবং এর বাইরে যে কোনও কিছুই (যেমন ব্যাকবোন.জেএসস , সত্তা ফ্রেমওয়ার্ক ইত্যাদি) যদি তারা যে প্রশ্নের উত্তরটিতে সহায়তা করে তবে পরামর্শ হিসাবে স্বাগত জানানো হয়:

উপরের তালিকাভুক্ত প্রযুক্তি ব্যবহার করে, স্কেলাবিলিটি এবং একটি ধনী, দ্রুত, পরিষ্কার UI তৈরির ক্ষমতা বজায় রেখে কোড এবং লজিক সংগঠিত করার জন্য সর্বোত্তম কৌশল কী ?

আদর্শভাবে ব্যবসায় / কর্পোরেট পরিবেশে নিযুক্ত সমাধানের দিকে মনোনিবেশ করা উচিত। যে নোট অন, প্রযুক্তির উপরের তালিকায় পরিবর্তন করা যাবে না , যাতে দয়া করে "আপনি ব্যবহার করা উচিত সঙ্গে সমাধান প্রস্তাব না XXX পরিবর্তে yyy যে এখন আপনি ব্যবহার করছেন"।

পটভূমি

আমি প্রতিদিন jQuery নিয়ে কাজ করি, ASP.NET এর এমভিসি গ্রহণ করেছি এবং দীর্ঘদিন ধরে সি # এর সাথে কাজ করছি। সুতরাং আপনি সেই প্রযুক্তিগুলির মধ্যবর্তী থেকে উন্নত জ্ঞান ধরে সমাধানগুলি উপস্থাপন করতে পারেন।

আমি উত্তরটি আরও সহজ করে তুলতে প্রশ্নটি ছোট অংশে সংগঠিত করব :

1. প্রকল্প কাঠামো

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

2. ডেটা অ্যাক্সেস

আমি এপিআই-টাইপ স্ট্রাকচার সহ আমার ডেটা অ্যাক্সেসকে যতটা পারি মড্যুলারাইজ করতে চাই। আপনি Poco বস্তু (প্রচুর অনুমান করতে পারেন User, UserGroup, Customer, OrderHeader, OrderDetails, ইত্যাদি), কিন্তু কিছু জটিল যে রিপোর্ট ডেটা ইনটেনসিভ এসকিউএল এবং সতর্কতা অবলম্বন UI 'তে রেন্ডারিং প্রয়োজন হবে। EF + লিনকিউ পূর্বের জন্য দুর্দান্ত তবে পরবর্তীকালের জন্য এতটা নয়। অতিরিক্ত জটিল বা অত্যধিক সাধারণ না হয়ে উভয় দৃশ্যের সাথে মানানসই বলে মনে হচ্ছে এমন কিছু আমি পাই না।

৩. ক্লায়েন্ট-সাইড কোড সংস্থা এবং ইউআই রেন্ডারিং

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

উদাহরণ হিসাবে, আমি লিখতে পারি একটি সাধারণ কোডের টুকরো এরকম দেখতে পাওয়া যায়, আমি যে জিনিসগুলি আমাকে বিরক্ত করে তা মন্তব্য করেছি ( মনে রাখবেন যে আমি তখন থেকে পিছিয়ে যাওয়া এজেএক্স কলগুলি ব্যবহার করে পরিবর্তিত হয়েছি এবং ডিওএম ম্যানিপুলেশন থেকে প্রকৃত ডেটা অনুরোধগুলি পৃথক করেছি ):

$('#doSomethingDangerous').click(function () {
    // maybe confirm something first
    if (confirm('Are you sure you want to do this?')) {   

        // show a spinner?  something global would be preferred so I don't have to repeat this on every page 
        $('#loading').show();  

        // maybe the page should notify the user of what's going on in addition to the dialog?
        $('#results').show().html('<h2>Please wait, this may take a while...</h2>');  

        $.ajax({
            url: 'blah/DoDangerousThing',
            success: function (data) {                     
                // The results will be loaded to the DOM obviously, is there a better way to pull this type of specific code out of the data access calls?
                $('#results').empty();
                $('#results').append('<b>' + data.length + '</b> users were affected by this dangerous activity');
                $('#results').append('<ul>');

                // I've recently started to use jQuery templates for this sort of logic, is that the way to go?
                $(data).each(function (i, user) {
                    $('#results').append('<li>' + user.Username + '</li>');
                });                    
                $('#results').append('</ul>');

                // Need to hide the spinner, again would prefer to have this done elsewhere
                $('#loading').hide();
            }
        });
    }
});

সাধারণ প্রশ্ন

  • ক্লায়েন্ট এমভিসি বনাম সার্ভার এমভিসি? আমার প্রকল্পটি ইতিমধ্যে একটি সার্ভার-সাইড এমভিসি কাঠামো, সুতরাং কী এখনও ক্লায়েন্ট এমভিসি যেমন ব্যাকবোন.জেএস সরবরাহ করে তার প্রয়োজন আছে?
  • জাভাস্ক্রিপ্ট ফাইলগুলি প্রতিটি বস্তুর জন্য তৈরি করা উচিত (যেমন এর মতো OrderHeader.js) এবং তারপরে বিল্ড চলাকালীন সংক্ষিপ্ত / মার্জ করা উচিত? অথবা এর জন্য কি Order.jsযুক্তি আছে এমন কিছু থাকা উচিত OrderHeader, OrderDetails, Reports?
  • জটিল প্রশ্নগুলি কীভাবে পরিচালনা করা উচিত? এই মুহুর্তে আমার শীর্ষস্থানীয় তত্ত্বটি /Reports/Orders-By-Date/বা সেই লাইনগুলির পাশাপাশি কিছু এবং আমি একটি কাস্টম এসকিউএল কোয়েরি ব্যবহার করি ViewModelযা রেজার ভিউতে একটি কাস্টম ডেটাসেট (বা ) সরবরাহ করে। তবে পেজিং, বাছাই ইত্যাদি কী? এটি ক্লায়েন্ট বা সার্ভার পাশ করা ভাল? (ধরে নিন বৃহত্তর ডেটাসেট - 2 থেকে 3 সেকেন্ডের এসকিউএল কোয়েরি)
  • আমি মাইক্রোসফ্ট এর প্রকল্প সিল্ক মাধ্যমে পড়েছি । এটি কি ভাল উপায়? এটি কীভাবে ব্যাকবোন.জেএস বা অন্যদের সাথে তুলনা করে?
  • আমি একটি এন-টাইার্ড আর্কিটেকচারের খুব অভ্যস্ত, এই ধারণাগুলি কি কিছুটা উইন্ডোটির বাইরে ফেলে দেয়? মনে হয় এমভিসি হ'ল মিনি এন-টাইার্ড বিভাগগুলির একগুচ্ছ যা অতীতে সামনের দিকে বা শীর্ষ স্তরের হত।

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


2
আপনি এই প্রশ্নের জন্য অনেক প্রচেষ্টা করেছেন, তবে এটি আমার কাছে একটি স্ট্যাকওভারফ্লো প্রশ্নের মতো মনে হচ্ছে না। সম্ভবত প্রোগ্রামারদের স্ট্যাকেক্সচেঞ্জ আরও ভাল ফিট হতে পারে।
পয়েন্টটি

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

8
ভাবেনদের একটি শিবির রয়েছে যারা সর্বদা বৃহত্তম স্কেলের জন্য পরিকল্পনা করে আমি চুপচাপ তাদের ব্যবসাটি সরিয়ে নিই কারণ তারা কখনও ঘটেছিল না এমন জন্য খুব দীর্ঘ পরিকল্পনা নিয়েছিল।
জেসন সেব্রিং

1
আমি @ পন্টির সাথে একমত যে এটি প্রোগ্রামারদের স্ট্যাকের সাথে সম্পর্কিত। আপনার প্রশ্নটি খুব আকর্ষণীয়, এবং আমি এটি অনুসরণ করব কারণ আমি সর্বদা পরামর্শের সন্ধান করি। তবে এটি কোনও উদ্দেশ্যমূলক প্রশ্ন নয়, এবং এটি কেবল পছন্দসই বিতর্কের অবসান ঘটাচ্ছে। সর্বদা হিসাবে, আপনার পরিস্থিতির জন্য সবচেয়ে ভাল কাজ করে তা করুন ... আমরা কেউই আপনার নেটওয়ার্ক কাঠামো, ক্লায়েন্টের সংখ্যা বা ট্র্যাফিকের পরিসংখ্যান, বা বিল্ডিং প্রক্রিয়া সম্পর্কে কিছুই জানি না ... সুতরাং প্রশ্নটি খুব অস্পষ্ট ... আমি কেবল জানি সিল্ক এড়ানো। ;)
one.beat.consumer

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

উত্তর:


10

টেরি আমার বন্ধু, আপনি এবং আমার একটি পানীয় পান করা উচিত। আমাদের কিছু একই সমস্যা আছে।

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

Forbশ্বর আপনি অঞ্চলগুলি ব্যবহার করছেন না, যা প্রতিটি অঞ্চলের জন্য কন্ট্রোলার, মডেল এবং দর্শন ফোল্ডার কাঠামোর নকল করে।

/Areas
    /Area1Name
        /Controllers
            FirstController.cs
            SecondController.cs
            ThirdController.cs
        /Models
            (can organize all in here or in separate folders / namespaces)
        /Views
            /First
                /DisplayTemplates
                    WidgetAbc.cshtml <-- to be used by views in Views/First
                /EditorTemplates
                    WidgetAbc.cshtml <-- to be used by views in Views/First
                PartialViewAbc.cshtml <-- to be used by FirstController
            /Second
                PartialViewDef.cshtml <-- to be used by SecondController
            /Third
                PartialViewMno.cshtml <-- to be used by ThirdController
            /Shared
                /DisplayTemplates
                    WidgetXyz.cshtml <-- to be used by any view in Area1
                /EditorTemplates
                    WidgetXyz.cshtml <-- to be used by any view in Area1
                PartialViewXyz.cshtml <-- to be used anywhere in Area1
            _ViewStart.cshtml <-- area needs its own _ViewStart.cshtml
            Web.config <-- put custom HTML Helper namespaces in here
        Area1NameRegistration.cs <-- define routes for area1 here
    /Area2Name
        /Controllers
        /Models
        /Views
        Area2NameRegistration.cs <-- define routes for area2 here

/Controllers
    AccountController.cs
    HomeController.cs
/Models
/Views
    /Account
        /DisplayTemplates
            WidgetGhi.cshtml <-- to be used views in Views/Account
        /EditorTemplates
            WidgetGhi.cshtml <-- to be used views in Views/Account
        PartialViewGhi.cshtml <-- to be used by AccountController
    /Home
        (same pattern as Account, views & templates are controller-specific)
    /Shared
        /DisplayTemplates 
            EmailAddress.cshtml <-- to be used by any view in any area
            Time.cshtml <-- to be used by any view in any area
            Url.cshtml <-- to be used by any view in any area
        /EditorTemplates
            EmailAddress.cshtml <-- to be used by any view in any area
            Time.cshtml <-- to be used by any view in any area
            Url.cshtml <-- to be used by any view in any area
        _Layout.cshtml <-- master layout page with sections
        Error.cshtml <-- custom page to show if unhandled exception occurs
    _ViewStart.cshtml <-- won't be used automatically in an area
    Web.config <-- put custom HTML Helper namespaces in here

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

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

স্বর্ণের আরেকটি ছোট টুকরা যা রিফ্যাক্টরিংয়ে অনেক সহায়তা করে তা হ'ল টি 4 এমভিসি। এটি ব্যবহার করে, ক্ষেত্রের নাম, নিয়ামকের নাম, ক্রিয়া নাম, এমনকি সামগ্রী এবং স্ক্রিপ্টগুলিতে ফাইলের জন্য আমাদের স্ট্রিং পাথ টাইপ করতে হবে না। T4MVC আপনার জন্য জাদুর সমস্ত স্ট্রিং জোরালোভাবে টাইপ করে। আপনি যদি T4MVC ব্যবহার করেন তবে কীভাবে আপনার প্রকল্পের কাঠামো তত গুরুত্বপূর্ণ নয় তার একটি ছোট্ট নমুনা এখানে:

// no more magic strings in route definitions
context.MapRoutes(null,
    new[] { string.Empty, "features", "features/{version}" },
    new
    {
        area = MVC.PreviewArea.Name,
        controller = MVC.PreviewArea.Features.Name,
        action = MVC.PreviewArea.Features.ActionNames.ForPreview,
        version = "december-2011-preview-1",
    },
    new { httpMethod = new HttpMethodConstraint("GET") }
);

@* T4MVC renders .min.js script versions when project is targeted for release *@
<link href="@Url.Content(Links.content.Site_css)?r=201112B" rel="stylesheet" />
<script src="@Url.Content(Links.scripts.jquery_1_7_1_js)" type="text/javascript">
</script>

@* render a route URL as if you were calling an action method directly *@
<a href="@Url.Action(MVC.MyAreaName.MyControllerName.MyActionName
    (Model.SomeId))">@Html.DisplayFor(m => m.SomeText)</a>

// call action redirects as if you were executing an action method
return RedirectToAction(MVC.Area.MyController.DoSomething(obj1.Prop, null));

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

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

<img id="loading_spinner" src="/path/to/img" style="display:none;" />
<h2 id="loading_results" style="display:none;">
    Please wait, this may take a while...
</h2>
<div id="results">
</div>
<input id="doSomethingDangerous" class="u-std-ajax" 
    type="button" value="I'm feeling lucky" 
    data-myapp-confirm="Are you sure you want to do this?"
    data-myapp-show="loading_spinner,loading_results" 
    data-myapp-href="blah/DoDangerousThing" />

আপাতত এজাক্স সাফল্য ফাংশন উপেক্ষা করুন (আরও পরে এটি)। আপনার কিছু ক্রিয়াকলাপের জন্য আপনি একটি একক স্ক্রিপ্ট নিয়ে পালাতে পারেন:

$('.u-std-ajax').click(function () {
    // maybe confirm something first
    var clicked = this;
    var confirmMessage = $(clicked).data('myapp-confirm');
    if (confirmMessage && !confirm(confirmMessage )) { return; } 

    // show a spinner?  something global would be preferred so 
    // I dont have to repeat this on every page 
    // maybe the page should notify the user of what's going on 
    // in addition to the dialog?
    var show = $(clicked).data('myapp-show');
    if (show) {
        var i, showIds = show.split(',');
        for (i = 0; i < showIds.length; i++) {
            $('#' + showIds[i]).show();
        }
    }

    var url = $(clicked).data('myapp-href');
    if (url) {
        $.ajax({
            url: url,
            complete: function () {                     
                // Need to hide the spinner, again would prefer to 
                // have this done elsewhere
                if (show) {
                    for (i = 0; i < showIds.length; i++) {
                        $('#' + showIds[i]).hide();
                    }
                }
            }
        });
    }
});

উপরের কোডটি নিশ্চিতকরণের যত্ন নেবে, স্পিনার দেখানো, অপেক্ষার বার্তা প্রদর্শন করা এবং এজেনার কলটি শেষ হওয়ার পরে স্পিনার / অপেক্ষার বার্তাটি লুকিয়ে রাখা। আপনি ব্যবহারহীন গ্রন্থাগারগুলির মতো ডেটা * বৈশিষ্ট্যগুলি ব্যবহার করে আচরণগুলি কনফিগার করেন।

সাধারণ প্রশ্ন

- ক্লায়েন্ট এমভিসি বনাম সার্ভার এমভিসি? সাফল্য ফাংশনে আপনি যে পদক্ষেপ নিয়েছিলেন তা আমি গ্রন্থাগারিত করার চেষ্টা করিনি কারণ দেখে মনে হচ্ছে আপনার নিয়ামকটি JSON ফিরিয়ে দিচ্ছে। যদি আপনার কন্ট্রোলাররা JSON ফিরিয়ে দেয় তবে আপনি নকআউটজেএস-তে নজর রাখতে পারেন। নকআউট জেএস সংস্করণ ২.০ প্রকাশিত হয়েছে আজ । এটি সরাসরি আপনার JSON এ প্লাগ করতে পারে, যাতে পর্যবেক্ষণযোগ্য ক্লিকটি স্বয়ংক্রিয়ভাবে আপনার জাভাস্ক্রিপ্ট টেম্পলেটগুলিতে ডেটা বাঁধতে পারে। অন্যদিকে, আপনি যদি আপনার এজাক্স অ্যাকশন পদ্ধতিগুলি JSON এর পরিবর্তে এইচটিএমএল ফেরত নিতে আপত্তি করেন না, তবে তারা এলআই বাচ্চাদের সাথে ইতিমধ্যে নির্মিত ইউএল ফিরিয়ে দিতে পারে এবং আপনি ডেটা-ম্যাপ অ্যাপ্লিকেশন = ব্যবহার করে কোনও উপাদানটিতে এটি যুক্ত করতে পারেন = "ফলাফল"। আপনার সাফল্যের ক্রিয়াকলাপটি কেবল তখন এর মতো দেখাবে:

success: function(html) {
    var responseId = $(clicked).data('myapp-response');
    if (responseId) {
        $('#' + responseId).empty().html(html);
    }
}

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

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

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

- জটিল জিজ্ঞাসাগুলি আমি পৃষ্ঠাবদ্ধকরণ, বাছাই ইত্যাদির মতো বৈশিষ্ট্যটিকে জটিল বলে বিবেচনা করি না। আমার পছন্দটি হ'ল ইউআরএল এবং সার্ভার-সাইড যুক্তি দিয়ে এটি হ্যান্ডেল করা, ডিবি কোয়েরিগুলিকে প্রয়োজনীয় হিসাবে সীমাবদ্ধ করা। তবে আমরা আজুরেতে মোতায়েন, সুতরাং ক্যোয়ারী অপ্টিমাইজেশন আমাদের কাছে গুরুত্বপূর্ণ। উদাহরণস্বরূপ: /widgets/show-{pageSize}-per-page/page-{pageNumber}/sort-by-{sortColumn}-{sortDirection}/{keyword}। ইএফ এবং লিনকিউ থেকে সত্তা। আমি এখনও ক্লায়েন্টলিবের প্রয়োজনীয়তা খুঁজে পাইনি, তাই আমি সত্যই তাদের সম্পর্কে বেশি কিছু জানি না। এ সম্পর্কে আরও পরামর্শের জন্য অন্যান্য উত্তরের দিকে নজর দিন।

- প্রকল্পের রেশম এটি সম্পর্কে কখনও শুনেনি, এটি পরীক্ষা করে দেখতে হবে। আমি স্টিভ স্যান্ডারসন, তার বই, তার বিগন কালেকশন আইটেম এইচটিএমএল হেল্পার এবং তার ব্লগের একটি বড় অনুরাগী। তাই বলা হয়, আমি KnockoutJS সঙ্গে কোনো অভিজ্ঞতা নেই উৎপাদনে । আমি এর টিউটোরিয়ালগুলি পরীক্ষা করে দেখেছি, তবে এটির কমপক্ষে 2.0 সংস্করণ না হওয়া পর্যন্ত আমি কিছু করার প্রতিশ্রুতি না দেওয়ার চেষ্টা করছি। আমি যেমন উল্লেখ করেছি, নকআউটজেএস ২.০ সবেমাত্র প্রকাশিত হয়েছিল।

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

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

প্রেস / বাস / ডেটা মন্তব্যের পরে আপডেট করুন

ঠিক আছে, সুতরাং আপনি স্তর এবং স্তর আন্তঃব্যবহারযোগ্যভাবে ব্যবহার করছেন। আমি সাধারণত যৌক্তিক / প্রকল্প / সমাবেশ বিভাগগুলির জন্য "স্তর" শব্দটি এবং শারীরিক নেটওয়ার্ক পৃথককরণের জন্য স্তর ব্যবহার করি। বিভ্রান্তির জন্য দুঃখিত.

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

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

সুতরাং, উপস্থাপনা স্তর হিসাবে এমভিসি সহ আপনার এখনও একটি স্তরযুক্ত আর্কিটেকচার থাকতে পারে। আপনি কীভাবে এটি আর্কিটেক্ট করেন তার উপর নির্ভর করে এটি আপনার অ্যাপ্লিকেশন স্তর, পরিষেবা স্তর বা ডোমেন স্তরের ক্লায়েন্ট। তবে শেষ পর্যন্ত আপনার সত্তা মডেলটি এমভিসির মডেল নয়, ডোমেনের অংশ হওয়া উচিত।


আমি এই উত্তরটির সাথে পুরোপুরি একমত! বিশেষত: har রিশার্পার একটি এমভিসি প্রতিভা ... ত্রুটি পরীক্ষা থেকে আইডিই নেভিগেশন পর্যন্ত পরীক্ষা করে, এর উপযোগিতা আমাকে দূরে সরিয়ে দেয়! • সার্ভার-সাইড এমভিসি প্রায় সর্বদা সর্বোত্তম পন্থা • এমভিসি 3 টি পৃথক স্তর নয়, এটি একটি একক উপস্থাপনা স্তর - আমি সত্যিই এইভাবে এভাবে চিন্তা করি নি, তবে এটি একেবারেই সঠিক।
স্কট রিপ্পি

খুব সুন্দর উত্তর, অবশ্যই আমি আমার 300 প্রতিবেদনের জন্য কী খুঁজছিলাম। আপনি টরন্টো অঞ্চলে থাকলে পানীয়গুলি আমার কাছে রয়েছে :)

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

আমি ভিউমোডেল, প্রতি-ভিউ মডেল, পদ্ধতির বিরুদ্ধে সতর্ক করব। আমি সম্প্রতি এমন পরিস্থিতিতে ছুঁড়েছি যেখানে আমি পরে ইচ্ছে করেছিলাম যে ডিটিও থেকে ভিউমোডেল পর্যন্ত আমার এই বিমূর্ততাটি নেই। দেখুন: stackoverflow.com/q/7181980/109456

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

6

আমি একটি পূর্ণ উত্তর লিখতে যাচ্ছি না, তবে কিছু টিপস ভাগ করতে চাই।

আমার টিপস:

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

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

পেটাপোকো বৈশিষ্ট্য সহ প্রাথমিক পোকো ক্লাস তৈরি করার জন্য আমার কাছে একটি কোড জেনারেটর রয়েছে এবং তার পরে কিছু ক্ষেত্র যুক্ত বা সরানো হলে ক্লাস পরিবর্তন করুন change

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

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

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

উদাহরণস্বরূপ, মুছে ফেলার জন্য আমার কাছে এটি রয়েছে।

var deleteLinkObj;
// delete Link
$('.jbtn-borrar').click(function () {
    deleteLinkObj = $(this);  //for future use
    $('#delete-dialog').dialog('open');
    return false; // prevents the default behaviour
});
$('#delete-dialog').dialog({
    autoOpen: false, width: 400, resizable: false, modal: true, //Dialog options
    buttons: {
        "Borrar": function () {
            $.post(deleteLinkObj[0].href, function (data) {  //Post to action
                if (data == 'OK') {
                    deleteLinkObj.closest("tr").hide('fast'); //Hide Row
                }
                else {
                    alert(data);
                }
            });
            $(this).dialog("close");
        },
        "Cancelar": function () {
            $(this).dialog("close");
        }
    }
});

আমার কেবল jbtn-borrarহাইপারলিঙ্কে ক্লাস যুক্ত করা দরকার এবং এটি একটি ডায়ালগ দেখায়, রেকর্ডটি মুছুন এবং লুকিয়ে রাখুনtr

তবে এটিকে উড়িয়ে দেবেন না। আপনার অ্যাপ্লিকেশন প্রতিটি দৃশ্যে ছোট ছোঁয়ায় জ্বলজ্বল করবে।

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

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

মাইক্রোসফ্ট এর প্রকল্প সিল্ক
ওভারারচিটিযুক্ত ected বিপরীত দিক থেকে যতটা সম্ভব রান করুন।


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

3

1. প্রকল্প কাঠামো

আমার সমাধানটিতে আমার 2 টি ফাইল রয়েছে

1) পরিষেবা / ব্যবসায়ের স্তর আমি আমার পৃথক ব্যবসার যুক্তি এবং ডিবি অ্যাক্সেস কোড এবং পিওসিওগুলিকে এই পৃথক প্রকল্পে রাখি। আপনি যদি ওআরএম হিসাবে ORM হিসাবে ইতিমধ্যে ডিবি স্তরটিকে বিমূর্ত করে থাকেন তবে কোনও ডেটা অ্যাক্সেস লেয়ারের প্রয়োজন হবে না।

2) ইউআই স্তরটিতে আমার সমস্ত দর্শন, কন্ট্রোলার, মডেল, স্ক্রিপ্ট, সিএসএস রয়েছে

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

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

তারপরে আমি আমার সমস্ত স্ক্রিপ্টগুলি একই অঞ্চলে, আমার সি # ফাইলের কন্ট্রোলারগুলির সাথে মেলে কাঠামো তৈরি করি তাই আমার প্রতি পৃষ্ঠায় একটি জেএস ফাইল এবং প্রতিটি অঞ্চলের জন্য একটি কমন.জেএস ফাইল থাকতে হবে।

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

2. ডেটা অ্যাক্সেস

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

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

৩. ক্লায়েন্ট-সাইড কোড সংস্থা এবং ইউআই রেন্ডারিং

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

সাধারণ প্রশ্ন

জটিল প্রশ্নগুলি একটি সঞ্চিত প্রোকে থাকা উচিত। (পান্না কোডকোড.কমের মন্তব্য দেখুন)

আপনি এখনও এই এমভিসি ব্যবহার করে আপনার এন-টাইার্ড আর্কিটেকচারটি রাখেন।


1

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

স্কেলাবিলিটি এবং একটি ধনী, দ্রুত, পরিষ্কার UI তৈরির ক্ষমতা বজায় রেখে কোড এবং লজিক সংগঠিত করার জন্য সর্বোত্তম কৌশল কী?

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

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

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


0

আমি কীভাবে এই প্রশ্নটি মিস করেছি তা নিশ্চিত নয় তবে আমি দু'বছর পরে আমার দুটি সেন্ট যুক্ত করব।

ক্লায়েন্ট এমভিসি বনাম সার্ভার এমভিসি? আমার প্রকল্পটি ইতিমধ্যে একটি সার্ভার-সাইড এমভিসি কাঠামো, সুতরাং কী এখনও ক্লায়েন্ট এমভিসি যেমন ব্যাকবোন.জেএস সরবরাহ করে তার প্রয়োজন আছে?

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

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

জাভাস্ক্রিপ্ট ফাইলগুলি প্রতিটি বস্তুর জন্য (অর্ডারহাইডার.জেএস এর মতো) তৈরি করা উচিত এবং তারপরে বিল্ড করার সময় মাইনাইফ / মেশানো উচিত? বা অর্ডারহাইডার, অর্ডারডেটেলস, রিপোর্টস ইত্যাদির জন্য যুক্তিযুক্ত একটি অর্ডার.জেএস থাকা উচিত?

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

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

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

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

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

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

এটি কী এমভি সম্পর্কে কল্পনা করার ধারণার উপর নির্ভর করে? হয়। আইএমও, মাইক্রোকোজম জিনিসটি খুব ভালভাবে কাজ করে। অভ্যন্তরীণভাবে ডেটা, যোগাযোগ এবং দর্শন সম্পর্কিত স্টাফকে পৃথক করে এমন এক শ্রেণীর উইজেট great ক্লায়েন্ট-সাইড ওয়েবে, সমালোচনামূলক জিনিস, আইএমও, হ'ল অল্প অল্প চিন্তার মধ্যে অকারণে বিভক্ত না হয়ে উদ্বেগকে আলাদা করে রাখার একটি ভারসাম্য বজায় রাখা, যার পুনঃস্থাপন বিষয়গুলি বুঝতে এবং পুনরায় ব্যবহার এবং সংশোধন করতে সমস্যা করে। বেসিক "duh" ওওপি এখানে দুর্দান্ত কাজ করে। আপনি জটিল প্রক্রিয়া চান না। আপনি স্পষ্টত নাম দেওয়া জিনিসগুলি চান যা চারপাশে সরানো এবং স্টাফগুলি করতে বলা যেতে পারে। এই ফ্রন্টের কয়েকটি টিপস এখানে দেওয়া হয়েছে:

  • KISS যে (OOP) ইন্টারফেস আমি DOM বা jQuery বা অন্য কোনও কিছুই দেখতে চাই না একটি চিম্টি-হিটিং সার্ভার-সাইড দেব আমার বাস্তবায়ন কোডটিতে মোটামুটি দ্রুত বের করতে পারেনি। ডিভ কনটেইনারে কোন ক্লাস চাপতে হবে এবং প্রদত্ত পৃষ্ঠায় ইউআইয়ের মোটামুটি জেনেরিক সেটটি সক্রিয় করার জন্য কী ক্লাসে ফ্লিপ করতে হবে তা কী সেই সমস্ত ব্যক্তিরই জানা উচিত। ডকুমেন্ট.জেট <কোনও কিছুর> সন্ধান করা বা সিএসএসের বেস্ট বেসিকের বাইরে কিছু বুঝতে না পারার আগে কোনও থিমের বৈচিত্রগুলি ভাল-ডকুমেন্টেড / মন্তব্য বিকল্প বিকল্পগুলিতে পাস করার মাধ্যমে সম্পন্ন করা উচিত।

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

  • ডেটা বাইন্ডিংয়ের জন্য অর্থ প্রদান করবেন না এবং "অর্থ প্রদান" দ্বারা অবশ্যই আমি বোঝাতে চাইছি "আপনার কোডবেজে একটি লাইব্রেরি চড় মারুন যা আপনাকে জোর দিয়ে বলে যে কিছুক্ষণ অলৌকিক উপকার পাওয়ার জন্য যা সত্যই DIY এর পক্ষে কঠিন নয়।" জিকিউয়ের ইভেন্ট সিস্টেমটি এটি বেশ সহজ করে তোলে।

উদাহরণ সময়:

function PoliticianData(){ //a constructor

    var
        that = this, //I hate 'that' but example so convention

        flavorsOfLie = {

            lies: "Oh Prism? Psh... no we're all good. There's a guy keeping an eye on that.",

            damnedLies: "50% of the people chose to not give a damn when asked whether it was better to let the terrorists win or not give a damn."

        }
    ;//end instance vars

    this.updateLies = function( lieType, newData ){
        flavorsOfLie[lieType] = newData;
        $(that).trigger({type:'update', lieType:lieType, newData: newData });
    }

    //so everytime you use the updateLies method, we can have a listener respond
    //and pass the data
}

var filthyLies = new PoliticianData();

$(filthyLies).on('update', function(e){
    stickNewDataInHTMLWithSomeFuncDefinedElsewhere(e.lieType, e.newData);
} );

filthyLies.update('damnedLies','50% of the people said they didn\'t give a damn');
//oh look, WaPo's front page just changed!
  • ওয়েব গোপন করবেন না সার্ভার-সাইড এবং অ্যাপ্লিকেশন ডেভেলসগুলির পক্ষে ক্লায়েন্ট-সাইডকে সহজ করার জন্য প্রাথমিক পর্যায়ে সমস্ত প্রয়াসেই চুরির প্রধান উত্স এই জটিল পয়েন্টে জড়িত in এইচটিটিপি অনুরোধগুলি কখনই জটিল নয় complicated এটিকে বুঝতে সহজতর করার জন্য তাদের কোনও 18! @ # $ স্তর বিভ্রান্ত-ইভেন্ট-নাম-প্রতিটি-পর্যায়ে মনস্ট্রোসিটির প্রয়োজন হয়নি। তেমনিভাবে, ক্লায়েন্ট-সাইড সম্পর্কে অনেক কিছু জানার আছে তবে এইচটিএমএল এবং ডিওএম থেকে এটি লুকানোর কোনও কারণ নেই যার উপরে এটি একটি বড় দৈত্য মডেলকে চড় মারার মাধ্যমে এটির সাথে যোগাযোগ করে। এটি ইতিমধ্যে একটি বড় দৈত্য মডেল এবং এটি খুব ভাল কাজ করে। আমাদের এটিকে আরও কিছুটা পরিচালনাযোগ্য করে তোলার দরকার হ'ল কিছু বুদ্ধিমান ওওপি অনুশীলন এবং কিছু জেএস এবং ডিওএম জ্ঞান।

  • নমনীয়তা পছন্দ

EXTjs <==== নমনীয়তা স্কেল ====> jQuery (এর প্লাগ-ইনগুলির কোনও প্রয়োজন হয় না)

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

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