আমি কীভাবে কোনও পরিষেবা মোড়ানো করি তাই এটি সহজ


11

আমাদের তৃতীয় পক্ষের সেবার উপর নির্ভরতা রয়েছে যা একটি বিশাল ইন্টারফেস প্রকাশ করে যার মধ্যে আমাদের কেবল 3 টি পদ্ধতির মতো দরকার। অতিরিক্তভাবে, ইন্টারফেসটি ঘন ঘন পরিবর্তিত হয় ...

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

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

আপনি ম্যাপারে কী ফিরবেন: Storageবা StorageModel? আমাদের একটি ডেটা সার্ভিস রয়েছে StorageServiceযা ইনজেকশনের মোড়কের উপর নির্ভরতা পায়।

বর্তমানে আমি এটি মূলত এটি করছি:

public class StorageService 
{
    private readonly IExternalStorageWrapper externalStorageWrapper;

    public StorageService(IExternalStorageWrapper externalStorageWrapper)
    {
        this.externalStorageWrapper = externalStorageWrapper;
    }

    public StorageModel GetStorage(int storageId)
    {
        return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel();
    }
}

public class ExternalStorageWrapper : IExternalStorageWrapper
{
    public Storage GetStorage(int storageId)
    {
        using(var ext = new ExternalStorage())
        {
            return ext.GetStorage(storageId);
        }
    }
}

তুমি কি বলবে:

  • এটি কি উপরের মতো ভাল, যে মোড়কটি বাহ্যিক Storageবস্তুটি দেয় এবং অভ্যন্তরীণ অভ্যন্তরীণ StorageServiceফেরত দেয় StorageModel?
  • অথবা আপনি কি StorageModelইতিমধ্যে একটি মোড়ক ফেরত দেবেন ?

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


@ তোবিয়াসটোর কোনও মোড়কের কাছে মোড়ানো বস্তুর আচরণের সমস্ত প্রকাশের প্রয়োজন নেই, এই নিবন্ধটি "একটি সীমিত মোড়কে " দেখুন।
guillaume31

উত্তর:


11

আমার মতামতে, মোড়কের বাহ্যিক লাইব্রেরি সম্পর্কিত সমস্ত বিষয় নিয়ে কাজ করা উচিত। এর অর্থ হ'ল র‍্যাপারের সর্বজনীন ইন্টারফেসে কোনও বাহ্যিক প্রকারের নাম রাখা উচিত নয়।

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

এইভাবে, আপনার বাকী থাকা অ্যাপ্লিকেশন কেবল গ্রন্থাগারের পরিবর্তনের জন্যই নয়, গ্রন্থাগারের অন্য একটির জন্য প্রতিস্থাপনের ক্ষেত্রেও সম্পূর্ণরূপে অনাক্রম্য।


3

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

ঠিক আছে. এটি অ্যাডাপ্টার হিসাবেও পরিচিত ।

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

পূর্ববর্তী যুক্তি অনুসারে, অ্যাডাপ্টারের উচিত ফেরত দেওয়া StorageModel

পরিশেষে, আপনার ডোমেন "কথা বলে" একটি নির্দিষ্ট ভাষা রয়েছে, যেখানে Storageএকটি হল নবজাতক

তবে আমি নিশ্চিত নই যে আমার কীভাবে ফিরে আসার মানগুলি পরিচালনা করতে হবে ...

আপনি কী কারণে লাইব্রেরিটি মোড়ানো / মানিয়ে নিচ্ছেন তা এখানে মূল কীটি হ'ল ।

অ্যাডাপ্টার, ডেকোরেটর, মুখের ধরণগুলির মিল থাকতে পারে তবে সেগুলি বেশ আলাদা। তারা যত সমস্যার সমাধান করবে ততই আলাদা।

এটি বলেছিল, আপনিও এতে আগ্রহী হতে পারেন:


1

আপনি কার্যকরভাবে কোনও লাইব্রেরিকে সদৃশ করে এটি মোড়াতে পারবেন না।

আপনার যা আবদ্ধ করা উচিত তা হ'ল আপনি গ্রন্থাগারের ব্যবহার এবং এর অর্থ এটি এটিকে অবহেলা না করে, এক্ষেত্রে সঞ্চয়স্থান। সেগুলিও নকল করার চেষ্টা করবেন না।

লাইব্রেরিটি ব্যবহার করুন তবে এটি এতে রাখুন। সুতরাং আপনার ক্ষেত্রে, ধরে নেওয়া উচিত যে আপনার স্টোরেজ সার্ভিস ব্যবহার করে জিনিসগুলি সঞ্চয় করতে আপনার এটি স্টোরগুলিতে গুটিয়ে রাখা উচিত

MyPocoObjectRepo
    MyPocoObject GetObject(string id);

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


0

উত্তরটি হ'ল এটি কখনই আপনার Storageসরাসরি ক্লাস থেকে সরাসরি অ্যাক্সেস করতে হবে কিনা তা নির্ভর করে StorageModel

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

আমি আপনাকে দৃ strongly়ভাবে সুপারিশ করব যে আপনি যদি ইতিমধ্যে এটি না করে থাকেন তবে যদি আপনি ইতিমধ্যে StorageModelআপনার প্রোগ্রামের পুরোটা জুড়ে ব্যবহার করছেন এবং না করছেন তবে ইন্টারফেস এবং ফিরে আসা উভয় জিনিসই মুড়ে ফেলা উচিত Storage

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