swift - কোনও কারণে সুইফটে সিঙ্গলটন "ভেরিয়েবল" ব্যবহার করবেন না?




singleton swift2 (2)

2015 সালের সেপ্টেম্বরের জন্য, আপনি কীভাবে সুইফটে সিঙ্গলটন বানাবেন এটি এখানে:

public class Model
    {
    static let shared = Model()
    // ( for ocd friends ... private init() {} )

    func test()->Double
        {
        return 3.33
        }
    }

তারপরে অন্য কোথাও ...

// file ViewController.swift, say
import UIKit
class ViewController:UIViewController
    {
    override func viewDidLoad()
        {
        super.viewDidLoad()
        print("view controller loaded!")
        print("singleton test! \( Model.shared.test() )")
        }
    }

সমস্যা নেই.

যাহোক. আমি এই ছোট জিনিস যোগ করুন ...

public let model = Model.shared
public class Model
    {
    static let shared = Model()

    func test()->Double
        {
        return 3.33
        }
    }

তারপরে, আপনি কেবল নীচের প্রকল্প-বিস্তৃত করতে পারেন:

class ViewController:UIViewController
    {
    override func viewDidLoad()
        {
        super.viewDidLoad()
        print("view controller loaded!")
        print("singleton test! \( model.test() )")
        }
    }

প্রচলিত প্রথা:

Model.shared.blah () ... আপনি কোড বেজে সর্বত্র এটি দেখতে পাচ্ছেন

"আমার" প্রবাদ:

মডেল.ব্লাহ () ... আপনি কোডের বেসে এটি সর্বত্র দেখেন

সুতরাং, প্রতিটি কিছুর ফলাফল খুব সুন্দর দেখাচ্ছে:

(আপনার প্রকল্পে, এই "সিঙ্গলটন ভেরিয়েবলগুলি" scores. মতো জিনিস, networking. ,, heuristics. , বা আপনার প্রকল্পে কেস যাই হোক না কেন))

এটি তখন একটি "ম্যাক্রো-সদৃশ" আইডিয়াম।

যার একমাত্র উদ্দেশ্য কোডটির চেহারা।

ImportantSystem.SharedImportantSystem সিস্টেমটিতে নীচে ImportantSystem.SharedImportantSystem সিস্টেমের উপস্থিতি সরল করা হচ্ছে ha প্রকল্প জুড়ে

এই প্রতিমাটির সাথে কেউ কি কোনও সমস্যা দেখতে পাবে?

সমস্যাগুলি প্রযুক্তিগত, স্টাইলিস্টিক বা অন্য কোনও বিভাগ হতে পারে, যতক্ষণ তারা সত্যই গভীর হয়।


আমি এই পদ্ধতির কোনও ক্ষতি করতে পারছি না:

  • আপনি প্রোগ্রামের বিভিন্ন অংশের জন্য বিভিন্ন ভেরিয়েবল ব্যবহার করতে পারেন (-> আপনি যদি এটি পছন্দ করেন না তবে কোনও নেমস্পেস ক্র্যামিং নয়)
  • এটি সংক্ষিপ্ত, সুন্দর, ব্যবহার করা সহজ এবং আপনি যখন এটি পড়েন তখন তা বোধগম্য হয়। Model.shared.test() করে না যদি আপনি এটির বিষয়ে চিন্তা করেন, আপনি কেবল টেস্ট কল করতে চান, যখন আমাকে কেবল কোনও ফাংশন প্রয়োজন তখন কেন shared করে কল করতে হবে।
  • এটি সুইফ্টের অলস গ্লোবাল নেমস্পেস ব্যবহার করে: আপনি যখন প্রথমবার ব্যবহার করেন তখন ক্লাসটি বরাদ্দ এবং সূচনা হয়; আপনি যদি এটি কখনও ব্যবহার না করেন তবে এটি এলওসড / ইনটেডও হয় না।

সাধারণভাবে, সিঙ্গলেটনের ব্যবহার সম্পর্কিত আলোচনার অধীনে যথার্থ প্রবাদটি আলাদা করে রাখা:

  • মনে রাখবেন যে, অবশ্যই একা একা একা ম্যাট্রো হিসাবে static var shared = Model() ব্যবহার করার পরিবর্তে, এই প্রশ্নটিতে বলা হয়েছে, আপনি কেবলমাত্র let model = Model() সংজ্ঞায়িত করতে পারেন যা সাধারণ গ্লোবাল তৈরি করে (এর সাথে সম্পর্কিত নয়) singletons)।
  • সুইফট সিঙ্গলটনের সাথে, এমন আলোচনা হয়েছে যে আপনি তত যুক্তিযুক্ত আপনার ক্লাসে একটি private init() {} add যুক্ত করতে চান, যাতে এটি কেবল একবার আরম্ভ করা হয় (লক্ষ্য করা যায় যে সেই init এখনও একই ফাইলটিতে কল করা যেতে পারে)।
  • অবশ্যই সাধারণভাবে, যখন একটি সিঙ্গলটনের ব্যবহারের কথা বিবেচনা করা হয়, আপনার যদি সত্যই কোনও রাজ্য এবং শ্রেণীর উদাহরণের প্রয়োজন না হয়, আপনি কেবল স্থির ফাংশন / বৈশিষ্ট্যগুলি পরিবর্তে ব্যবহার করতে পারেন। একটি সিঙ্গলটন (যেমন "গণনার মতো" ফাংশন বলার জন্য) ব্যবহার করা একটি সাধারণ ভুল, যেখানে যা প্রয়োজন তা স্থির পদ্ধতি।

এই পদ্ধতির ব্যবহার করার সময় কয়েকটি বিষয় লক্ষ্য করা উচিত:

গ্লোবাল ভেরিয়েবল

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

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

গ্লোবাল ভেরিয়েবল ব্যবহার করা সাধারণত খারাপ অভ্যাস হিসাবে বিবেচিত হয়

একক প্যাটার্ন

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

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

আর একটি সম্ভাব্য সমস্যা থ্রেড নিরাপত্তা। লক না করে বিভিন্ন থ্রেড থেকে সিঙ্গলটন অ্যাক্সেস করার সময়, সমস্যাগুলি দেখা দিতে পারে যা ডিবাগ করা কঠিন।

সারাংশ

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





swift2