টাইপস্ক্রিপ্ট / অ্যাঙ্গুলার 2 এ ইন্টারফেস এবং মডেলটি কখন ব্যবহার করবেন


197

আমি সম্প্রতি টাইপস্ক্রিপ্ট সহ কৌনিক 2 এ একটি টিউটোরিয়াল দেখেছি, তবে কখন ইন্টারফেস ব্যবহার করব এবং কখন ডেটা স্ট্রাকচার ধরে রাখতে কোনও মডেল ব্যবহার করব তা নিশ্চিত নই।

ইন্টারফেসের উদাহরণ:

export interface IProduct {
    ProductNumber: number;
    ProductName: string;
    ProductDescription: string;
}

মডেলের উদাহরণ:

export class Product {
    constructor(
        public ProductNumber: number,
        public ProductName: string,
        public ProductDescription: string
    ){}
}

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

আমার কোনটি ব্যবহার করা উচিত এবং কেন?


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

6
মনে রাখবেন যে ইন্টারফেসগুলি কৌনিক 2 তে নির্ভরতা ইনজেকশনটির সাথে কাজ করবে না Here এখানে আপনাকে ক্লাস ব্যবহার করতে হবে।
জালং

উত্তর:


137

ইন্টারফেসগুলি কেবল সংকলনের সময় হয়। এটি কেবলমাত্র আপনাকে প্রত্যাশিত ডেটা একটি নির্দিষ্ট কাঠামো অনুসরণ করে তা পরীক্ষা করতে সহায়তা করে। এর জন্য আপনি আপনার সামগ্রীটি এই ইন্টারফেসে কাস্ট করতে পারেন:

this.http.get('...')
    .map(res => <Product[]>res.json());

এই প্রশ্নগুলি দেখুন:

আপনি ক্লাসের সাথে অনুরূপ কিছু করতে পারেন তবে শ্রেণীর সাথে প্রধান পার্থক্যগুলি হ'ল তারা রানটাইম (কনস্ট্রাক্টর ফাংশন) এ উপস্থিত থাকে এবং প্রসেসিং সহ আপনি তাদের পদ্ধতি নির্ধারণ করতে পারেন। তবে, এক্ষেত্রে আপনাকে অবজেক্টগুলিকে ব্যবহার করতে সক্ষম করার জন্য তা ইনস্ট্যান্ট করা দরকার:

this.http.get('...')
    .map(res => {
      var data = res.json();
      return data.map(d => {
        return new Product(d.productNumber,
          d.productName, d.productDescription);
      });
    });

27
আপনার বিস্তারিত উত্তরের জন্য ধন্যবাদ। যদি ইন্টারফেসটি কেবল সংকলনের সময় ব্যবহার করা হয়, তবে সংকলকটি কীভাবে জেসন ফাইলের কাঠামোগুলি সঠিকভাবে http পরীক্ষা না করে পরীক্ষা করতে পারে? যদি এটি না পারে, তবে একটি ইন্টারফেসের সাথে এমনকি বিরক্ত করারও কী দরকার?
I_LIKE_FOO

7
@I_LIKE_FOO সংকলকটির কল কল পরীক্ষা করার প্রয়োজন নেই। এটি কেবল যে ধরণের সম্পর্কে জানে এবং সেগুলি সঠিকভাবে প্রান্তিক করা আছে তা পরীক্ষা করার বিষয়ে যত্নশীল। var data = res.json();সত্যিই var data: any = res.json();সংকলকের কাছে তাই আমরা সমস্ত ধরণের চেকিং হারাতে পারি data। কি এখানে আরো উপযোগী হবে ভালো কিছু হবে var data: ProductDto[] = res.json();সঙ্গে ProductDtoএকটি ইন্টারফেস হচ্ছে যে মডেল ফিরে JSON ডাটা গঠন।
GFoley83

3
আরও: Angular style guide says not to use interfaces.Always use classes.দেখুন কৌণিক.আই.ও.
সম্পথ

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

11
@ সাম্পাথ সম্ভবত অ্যাঙ্গুলার স্টাইল গাইড আপডেট করা হয়েছে কারণ আমি এখন এই "ডেটা মডেলগুলির জন্য একটি ইন্টারফেস ব্যবহার বিবেচনা করুন"। ডেটা মডেলগুলির জন্য ক্লাসের চেয়ে বেশি ইন্টারফেস পছন্দ করে prefer
মাইকেজএক্স

40

ইন্টারফেস হয় একটি জন্য একটি চুক্তি বর্ণনা বর্গ অথবা একটি নতুন ধরনের । এটি একটি খাঁটি টাইপস্ক্রিপ্ট উপাদান, সুতরাং এটি জাভাস্ক্রিপ্টকে প্রভাবিত করে না।

একটি মডেল, এবং একটি ক্লাস , একটি আসল জেএস ফাংশন যা নতুন অবজেক্ট তৈরি করতে ব্যবহৃত হয়।

আমি একটি ইউআরএল থেকে জেএসএন ডেটা লোড করতে এবং ইন্টারফেস / মডেলটিতে আবদ্ধ করতে চাই।

একটি মডেলের জন্য যান, অন্যথায় এটি আপনার জাভাস্ক্রিপ্টে এখনও JSON থাকবে।


4

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


-22

ইন্টারফেসের পরিবর্তে ক্লাস ব্যবহার করুন যা আমি আমার সমস্ত গবেষণার পরে আবিষ্কার করেছি।

কেন? ক্লাস-প্লাস-ইন্টারফেসের চেয়ে একা একটি ক্লাস কম কোড is (যাইহোক আপনাকে ডেটা মডেলের জন্য ক্লাসের প্রয়োজন হতে পারে)

কেন? একটি শ্রেণি ইন্টারফেস হিসাবে কাজ করতে পারে (প্রসারিতের পরিবর্তে প্রয়োগগুলি ব্যবহার করে)।

কেন? একটি ইন্টারফেস-শ্রেণি কৌণিক নির্ভরতা ইনজেকশনটিতে সরবরাহকারী লুক টোকেন হতে পারে।

কৌণিক স্টাইল গাইড থেকে

মূলত একটি শ্রেণি সমস্ত কিছু করতে পারে, একটি ইন্টারফেস কী করবে। সুতরাং কখনও কখনও কোনও ইন্টারফেস ব্যবহার করার প্রয়োজন পড়বে না


10
কৌণিক স্টাইল গাইড বর্তমানে বলেছে, " ডেটা মডেলগুলির জন্য একটি ইন্টারফেস ব্যবহার করার বিষয়টি বিবেচনা করুন ।
অ্যালেক্স পিটারস

@ অ্যালেক্সপিটারগুলি দয়া করে কোনও খাঁটি লিঙ্ক সরবরাহ করুন। অগ্রিম ধন্যবাদ
আনন্দ ফাদকে

@ অ্যান্ডফডকে নিশ্চিত, উপরের আমার মন্তব্যের সময় থেকে অ্যাংুলার স্টাইল গাইডের সাথে এখানে একটি ওয়েব্যাক মেশিনের লিঙ্ক রয়েছে' s
অ্যালেক্স পিটারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.