ডেলফি পাস্কেলে এমভিভিএম এবং এমভিসি বাস্তবায়নের সেরা অনুশীলন


10

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

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

আমি এখানে এই নিবন্ধ থেকে কোড মানিয়ে নেওয়ার চেষ্টা করছি

আমি যে সমস্যার মুখোমুখি হয়েছি তার তালিকা করব

  • অবিচ্ছিন্ন প্রকার

সি # এর মতো ন্যাসযোগ্য প্রকারগুলি প্যাসকের নেই তাই আমি নিজের তৈরি করেছি।

TNullable<T> = record
    strict private
      fHasValue : boolean;
      fValue : T;
      function GetValue:T;
      procedure SetValue(newValue : T);
    public
      property HasValue : boolean read fHasValue;
      property Value : T read GetValue write SetValue;
      procedure SetToNull;
    end;

বাস্তবায়ন বিভাগে

function TNullable<T>.GetValue:T;
begin
    if fHasValue then
    begin
        Result := fValue;
    end
    else raise Exception.Create('Value Not Set');
end;

procedure TNullable<T>.SetValue(newValue : T);
begin
    fValue := newValue;
    fHasValue := true;
end;

procedure TNullable<T>.SetToNull;
begin
    fHasValue := false;
end;
  • বৈশিষ্ট্যগুলির জন্য পান / সেট করুন

এখন যেহেতু আমার একটি প্রবণতাযুক্ত টাইপ আছে আমি অযোগ্য বৈশিষ্ট্য তৈরি করতে পারি তবে এটি কিছু কোডের গন্ধ নিয়ে আসে

উদাহরণস্বরূপ যদি আমি তৈরি করি

    TFoo = class
      private
        function GetBar:TNullable<Integer>;
        procedure SetBar(x:TNullable<Integer>);
      public 
        property Bar : TNullable<Integer> read GetBar write SetBar;

বাস্তবায়ন বিভাগে

function TFoo.GetBar:TNullable<Integer>;
begin
    if **valueExists** then
    begin
        Result.Value := **the value**
    end else
    begin
        Result.SetToNull;
    end;
end;

procedure TFoo.SetBar(x:TNullable<Integer>);
begin
    if X.hasValue then
    begin
        //Store/show value here
    end else
    begin
        //handle null assignment here
    end;
end;

এটি ঠিক আছে তবে যখন এই বৈশিষ্ট্যগুলি ব্যবহার করার কথা আসে তখন আমি কেবল ব্যবহার করতে পারি না

myFoo.Bar.Value: = 1;

আমি ব্যবহার করতে

var 
    myBar : TNullable<Integer>;
begin
    myBar.Value := 1;
    myFoo.Bar := myBar;
end;

যা কিছুটা মেসেঞ্জার। আমি মনে করি এটি সম্পর্কে আমি কিছুই করতে পারি না।

  • বিজ্ঞপ্তি রেফারেন্স

আমি ক্লাসটি বিভিন্ন ইউনিটে বিভক্ত করতে চাই।

অর্থাৎ, গঠন

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

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

উদাহরণ স্বরূপ

unit u_A;

interface

uses
  u_B
  ;

type 
  TA = class
    public
       Foo : TB;
  end;

implementation

end;

এবং অন্য ইউনিট

unit u_B;

interface

uses
  u_A
  ;

type 
  TB = class
    public
       Foo : TA;
  end;

implementation

end;

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

  • স্ট্যাটিক ক্লাস

ডেলফিতে কোনও স্ট্যাটিক ক্লাস নেই, এগুলি নিয়ন্ত্রণ শ্রেণীর জন্য দরকারী।

  • ডেলফিতে ব্যবহার করার জন্য সেরা কনটেইনার ক্লাস

আমি বর্তমানে জেনারিক্সে টিলিস্ট এবং টোবজেক্টলিস্ট ব্যবহার করছি Col সংগ্রহগুলি সেগুলি ডেল্ফি এক্সইয়েতে প্রবর্তিত হয়েছিল আমি আশা করি যে এইগুলি ব্যবহার করার জন্য সেরা since

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

কোন পরামর্শের জন্য ধন্যবাদ।


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

উত্তর:


9

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

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

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

PS আমার অনুমান যে আপনি XE6 ব্যবহার করছেন তাই এটি সর্বশেষতম সংস্করণ।

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