স্কালার জন্য পুনরায় উদ্ভাবন সিস্টেম ডিজাইন


35

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

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

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

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

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

আমরা কীভাবে খাঁটি স্কেলা সমাধানগুলি ডিজাইন করব?

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

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

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

এই জাতীয় নকশা / প্রক্রিয়া / সমাধান কি বিদ্যমান , নাকি এটি আবিষ্কার করার সময় এসেছে?


"যোগ প্যান্টের জোড়া হিসাবে আপনার প্রয়োজনীয়তা মাপসই জন্য +1 বাড়ানো যেতে পারে।"
রাসেল

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

এটির মূল্য অনেক ;-) এটি আমাকে খনন করার দিকনির্দেশ দেয়। ধন্যবাদ ড্যানিয়েল
জ্যাক

মূল্য পরীক্ষা করা, স্কালার জন্য "সংশোধিত" ইউএমএল, github.com/mnn/Dia2Scala/blob/master/other/Notation.md
ওয়েইচিং লিন

উত্তর:


12

আমি সত্যিই এই প্রশ্নের উত্তর দিতে পারি না, তবে আমাকে কিছু চিন্তাভাবনা জানাতে দিন।

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

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

ইউএমএল শ্রেণীর চিত্রগুলি স্কালার জন্য আরও সুগঠিত; হ্যাঁ, মিক্সিনগুলি ভালভাবে আসে না তবে এটি এমন কিছু যা ওভারহ্যুলের পরিবর্তে "টুইট" করা যেতে পারে। তবে আমি মনে করি এটি পয়েন্টটি মিস করবে।

স্ক্যালায় কেন "বোবা বস্তু" রয়েছে তা আবার বিবেচনা করুন। আপনি যদি কোনও পদ্ধতি ছাড়াই কেস ক্লাস লিখেন:

case class NewInvite(user: User, league: League)

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

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


"প্রোগ্রামারের সাথে কি প্রতিশ্রুতি দেওয়া হয়েছে" - এটির একটি সুন্দর রিং রয়েছে ;-)
জ্যাক

12

ইউএমএল 80 এর দশকের শেষ এবং 90 এর দশকের গোড়ার দিকে "বুদ্বুদ যুদ্ধ" থেকে বেরিয়ে এসেছিল। এটা সবসময় একটি আপস ছিল স্বরলিপি , না একটি নকশা পদ্ধতি। ইউএমএলকে দায়ী করা অনেকগুলি ক্যালেনি গোপনে একটি নকশা পদ্ধতির ফলাফল যা বলে যে "পদক্ষেপ 1: একটি শ্রেণির মডেল আঁকুন।"

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

দায়িত্ব

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

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

বাস্তবায়ন বোঝা

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

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

প্রতিনিধিত্ব এবং স্বরলিপি

সুতরাং, এই নকশার কাঠামোর মধ্যে, আপনার এখনও চিন্তাগুলি আপনার মাথা থেকে বের করে নেওয়া এবং এগুলি অন্য কারও সাথে ভাগ করা দরকার।

আমি পরামর্শ দিচ্ছি যে ইউএমএল এখনও আপনার সিস্টেমের বৃহত আকারের কাঠামো বর্ণনা করতে কার্যকর হতে পারে। যদিও এটি নিম্ন স্তরের বিশদে সাহায্য করবে না।

বিশদ সূক্ষ্ম শস্য এ, শিক্ষিত প্রোগ্রামিং কৌশল চেষ্টা করুন।

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


9

আমরা কীভাবে খাঁটি স্কেলা সমাধানগুলি ডিজাইন করব?

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

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

স্ক্যালালা আপনার পথ থেকে দূরে সরে যাওয়ার পক্ষে আরও দুর্দান্ত কারণ হ'ল ডিএসএলগুলি তৈরি করার দক্ষতা যা আপনার প্রয়োজন অনুসারে হয় । আপনি আপনার নিজের সামান্য ভাষা তৈরি করতে পারেন যা একটি নির্দিষ্ট সমস্যাটিকে "সাধারণ" উপায়ে সমাধান করে এবং তারপরে এটিকে কেবল স্কেলে প্রয়োগ করে।

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


4

আপনি ঠিক বলেছেন যে OOD সীমাবদ্ধ এবং পুরানো। এর প্রধান সুবিধাটি হ'ল এটি প্রতিটি তুচ্ছ প্যাটার্ন এবং ডিজাইনের কৌশলগুলির জন্য অভিনব নাম সহ এটি এত ভালভাবে নির্দিষ্ট এবং অনুষ্ঠানযুক্ত। সিস্টেম ডিজাইনের আরও আধুনিক ও যৌক্তিক পদ্ধতির জন্য আপনি কোনও তুলনামূলক সিস্টেম খুঁজে পাবেন না।

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

আমি অন্যান্য কার্যকরী প্রোগ্রামিং সম্প্রদায়ের কাছ থেকে দু'একটি কৌশল শিখতে পরামর্শ দিয়েছি - যেমন হাস্কেল এবং স্কিম, তাদের নকশাটির সমস্ত জানা নেই যে ইতিমধ্যে স্কালায় স্থানান্তরিত হয়েছিল।


3

প্রশ্নটি ছিল: আমরা খাঁটি স্কাল সমাধান কীভাবে ডিজাইন করব?

উত্তরগুলি পছন্দ করে,

  1. আমরা এক্সওয়াইজেড ব্যবহার করি কারণ ....
  2. আমরা এবিসি ব্যবহার করি তবে এর মতো ....
  3. আমরা এক্সওয়াইজেড ব্যবহার শুরু করেছিলাম, তবে তারপরে এটিবিসি আরও ভাল বলে খুঁজে পেয়েছি কারণ ...

এমন কোনও সরঞ্জাম-সেট বা সমাধানের কিছু পরিপক্কতা বা সাধারণত স্বীকৃত অস্তিত্বের ইঙ্গিত দিত।

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

তখন কি বলা নিরাপদ যে আমরা ফ্যালব্যাক প্রশ্নের উত্তর জানি:

"... এটি কি আবিষ্কার করার সময় এসেছে?"

এটা হ্যাঁ হতে পারে ? (যেখানে ' হ্যাঁ ' সমাধানের উপায়গুলি নির্ধারণ করে না either এটি বিদ্যমান সমাধানকে প্রসারিত করে বা স্থলভাগ থেকে একটি তৈরি করেই অর্জন করা যেতে পারে existing বিদ্যমান নকশার বিকল্পগুলিতে উল্লেখযোগ্য ত্রুটি রয়েছে বলে স্বীকার করেও)

আপনি যদি মতানৈক্য করেন তবে আমার উত্তরটি ভোট দিতে আপনি স্বাগত। মানুষের মতো করে নেব।


বিপ্লবী? কেন? লিস্প কয়েক দশক ধরে অপরিহার্য এবং কার্যকরী পদ্ধতির একটি নিখুঁত সংমিশ্রণ ছিল। টাইপ সিস্টেমের কারণে স্কালা আকর্ষণীয়।
এসকে-যুক্তি

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

2

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

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

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

  3. এখন যখন আমরা আমাদের সমাধানটির যথার্থতা প্রমাণ করেছি, তখন আমাদের স্পষ্ট দৃষ্টি রয়েছে এবং সমস্ত সম্ভাব্য সমস্যা প্রকাশিত হয়েছে, তৃতীয় পক্ষের লাইব্রেরি বা পদ্ধতি কী ধরণের আনতে হবে তা ভেবে দেখার সময় এসেছে we আমাদের কী ফ্রেমওয়ার্ক বা কেবল কয়েকটি লিবসের প্রয়োজন? আমরা কি এই রাষ্ট্রীয় অভিনেতা তৈরি করতে যাচ্ছি, আসলেই কি আমাদের আক্কার স্থিতিস্থাপকতা দরকার, .., .. নাও হতে পারে? আমরা কি এই স্ট্রিমগুলির জন্য আরএক্স ব্যবহার করি? আমরা ইউআইয়ের জন্য কী ব্যবহার করব যাতে এটির 10 টি ইন্টারেক্টিভ বৈশিষ্ট্য থাকার পরে আমরা পাগল হয়ে যাব না?

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

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

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

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

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

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

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