বিরোধী ফাংশন পরামিতিগুলি পরিচালনা করার জন্য কি কোনও প্যাটার্ন রয়েছে?


38

আমাদের একটি এপিআই ফাংশন রয়েছে যা প্রদত্ত শুরু এবং শেষের তারিখের ভিত্তিতে মোট পরিমাণকে মাসিক পরিমাণে বিভক্ত করে।

// JavaScript

function convertToMonths(timePeriod) {
  // ... returns the given time period converted to months
}

function getPaymentBreakdown(total, startDate, endDate) {
  const numMonths = convertToMonths(endDate - startDate);

  return {
    numMonths,
    monthlyPayment: total / numMonths,
  };
}

সম্প্রতি, এই এপিআইর জন্য কোনও গ্রাহক অন্যান্য উপায়ে তারিখের সীমাটি নির্দিষ্ট করতে চেয়েছিলেন: 1) মাসের শেষে প্রদানের তারিখের পরিবর্তে মাসের সংখ্যা প্রদান করে বা 2) মাসিক অর্থ প্রদানের এবং শেষ তারিখ গণনা করে। এর প্রতিক্রিয়া হিসাবে, API টিমটি নিম্নলিখিতটিতে ফাংশনটি পরিবর্তন করেছে:

// JavaScript

function addMonths(date, numMonths) {
  // ... returns a new date numMonths after date
}

function getPaymentBreakdown(
  total,
  startDate,
  endDate /* optional */,
  numMonths /* optional */,
  monthlyPayment /* optional */,
) {
  let innerNumMonths;

  if (monthlyPayment) {
    innerNumMonths = total / monthlyPayment;
  } else if (numMonths) {
    innerNumMonths = numMonths;
  } else {
    innerNumMonths = convertToMonths(endDate - startDate);
  }

  return {
    numMonths: innerNumMonths,
    monthlyPayment: total / innerNumMonths,
    endDate: addMonths(startDate, innerNumMonths),
  };
}

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

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

আমার পছন্দটি হ'ল ফাংশনটি যেমন ছিল তেমন রাখা এবং পরিবর্তে কলারকে তাদের গণনা করা দরকার endDate। তবে আমি ভুল হতে পারি এবং ভাবছিলাম যে তাদের করা পরিবর্তনগুলি কোনও এপিআই ফাংশন ডিজাইনের গ্রহণযোগ্য উপায় কিনা were

বিকল্পভাবে, এর মতো পরিস্থিতি পরিচালনার জন্য কি সাধারণ প্যাটার্ন রয়েছে? আমরা আমাদের এপিআই-তে অতিরিক্ত উচ্চ-আদেশ ক্রিয়াকলাপ সরবরাহ করতে পারি যা মূল ফাংশনটি আবৃত করে, তবে এটি এপিআইকে ব্লাস্ট করে। ফাংশনের অভ্যন্তরে কোন পদ্ধতির ব্যবহার করা হবে তা নির্দিষ্ট করে আমরা একটি অতিরিক্ত পতাকা প্যারামিটার যুক্ত করতে পারি।


79
"সম্প্রতি, এই এপিআই-এর একজন গ্রাহক শেষ তারিখের পরিবর্তে মাসের সংখ্যা [সরবরাহ করতে] চেয়েছিলেন" - এটি একটি নিরর্থক অনুরোধ। তারা মাসের # টি শেষের তারিখে তাদের শেষের লাইন বা দুটি কোডের একটি সঠিক শেষের তারিখে রূপান্তর করতে পারে।
গ্রাহাম

12
এটি ফ্ল্যাগ আর্গুমেন্ট অ্যান্টি-প্যাটার্নের মতো দেখায় এবং আমি বেশ কয়েকটি ফাংশনে বিভক্ত
হওয়ারও

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

সামান্য স্পর্শকাতর অবস্থায়, আপনি কীভাবে কেসটি monthlyPaymentদেওয়া হবে তা কীভাবে পরিচালনা করবেন সে সম্পর্কে ভাবতে চাইতে পারেন তবে totalএটির পূর্ণসংখ্যার একাধিক নয়। এবং এছাড়াও কিভাবে সম্ভব ফ্লোটিং পয়েন্ট roundoff ত্রুটিযুক্ত মোকাবেলা করতে যদি মান ইন্টিজার হতে নিশ্চিত করা হয় না (যেমন সঙ্গে এটি চেষ্টা total = 0.3এবং monthlyPayment = 0.1)।
ইলমারি করোনেন

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

উত্তর:


99

বাস্তবায়নটি দেখে, আমার কাছে এটি প্রকাশিত হয়েছে যা আপনার এখানে সত্যিকারের প্রয়োজন তা হল একটি পরিবর্তে 3 টি আলাদা ফাংশন:

আসলটি:

function getPaymentBreakdown(total, startDate, endDate) 

যেটি শেষের তারিখের পরিবর্তে মাসের সংখ্যা সরবরাহ করে:

function getPaymentBreakdownByNoOfMonths(total, startDate, noOfMonths) 

এবং এক যা মাসিক প্রদান প্রদান করে এবং শেষের তারিখ গণনা করে:

function getPaymentBreakdownByMonthlyPayment(total, startDate, monthlyPayment) 

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

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

এর মতো পরিস্থিতি পরিচালনা করার জন্য কি সাধারণ প্যাটার্ন রয়েছে?

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


24
প্রকৃতপক্ষে কোডটির "সাধারণ" বাস্তবায়ন কেবলমাত্র getPaymentBreakdown(বা 3 টির মধ্যে সত্যই যে কোনও একটি) হতে পারে এবং অন্যান্য দুটি ফাংশন কেবল আর্গুমেন্টকে রূপান্তর করে কল করে। এই 3 টির মধ্যে একটির নিখুঁত অনুলিপি একটি ব্যক্তিগত ফাংশন কেন যুক্ত করবেন?
গিয়াকোমো আলজেটা

@ গিয়াকোমো আলজিটা: এটি সম্ভব। কিন্তু আমি নিশ্চিত বাস্তবায়ন একটি সাধারণ ফাংশন যা Ops ফাংশনের কেবল "আয়" কিছুটা অংশ অন্তর্ভুক্ত প্রদানের মাধ্যমে সহজ হয়ে যাবে, এবং পাবলিক 3 ফাংশন পরামিতি সঙ্গে এই ফাংশন কল দিন innerNumMonths, totalএবং startDate। 5 পরামিতি সহ একটি অতি-জটিল জটিল ফাংশন কেন রাখুন, যেখানে 3 প্রায় alচ্ছিক (একটি সেট করতে হবে তা বাদে), যখন 3-পরামিতি ফাংশনটিও কাজটি করবে?
ডক ব্রাউন

3
আমি "5 টি আর্গুমেন্ট ফাংশন রাখুন" বলতে চাইনি। আমি কেবল বলছি যে আপনার যখন কিছু সাধারণ যুক্তি থাকে তখন এই যুক্তিটি ব্যক্তিগত হওয়ার দরকার নেই । এই ক্ষেত্রে সমস্ত 3 ফাংশন কেবলমাত্র প্রারম্ভিক-শেষের তারিখগুলির প্যারামিটারগুলি ট্রান্সফর্ম করার জন্য রিফ্যাক্টর করা যেতে পারে, যাতে আপনি পাবলিক getPaymentBreakdown(total, startDate, endDate)ফাংশনটিকে সাধারণ প্রয়োগ হিসাবে ব্যবহার করতে পারেন , অন্য সরঞ্জামটি কেবল উপযুক্ত মোট / শুরু / শেষ তারিখগুলি গণনা করবে এবং কল করবে।
গিয়াকোমো আলজেটা

@ জিয়াকোমো অলজিটা: ঠিক আছে, একটি ভুল বোঝাবুঝি হয়েছিল, আমি ভেবেছিলাম আপনি getPaymentBreakdownপ্রশ্নের দ্বিতীয় প্রয়োগের কথা বলছেন ।
ডক ব্রাউন

আমি যদি এই সমস্ত সরবরাহ করতে চান তবে মূল পদ্ধতির একটি নতুন সংস্করণ যুক্ত করে যাচ্ছি যা স্পষ্টভাবে 'getPaymentBreakdownByStartAndEnd' নামে পরিচিত এবং মূল পদ্ধতিটি অবজ্ঞা করা।
এরিক

20

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

আপনি ঠিক সঠিক।

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

এটিও আদর্শ নয়, কারণ কলার কোডটি সম্পর্কযুক্ত বয়লার প্লেটের সাথে দূষিত হবে be

বিকল্পভাবে, এর মতো পরিস্থিতি পরিচালনার জন্য কি সাধারণ প্যাটার্ন রয়েছে?

নতুন ধরণের পরিচয় করিয়ে দিন DateInterval। নির্মাতারা যে কোনও ধারণা তৈরি করুন (সূচনা তারিখ + সমাপ্তির তারিখ, শুরুর তারিখ + num মাস, যাই হোক না কেন) যুক্ত করুন। আপনার সিস্টেম জুড়ে তারিখের / সময়গুলির বিরতি প্রকাশ করার জন্য এটিকে সাধারণ-মুদ্রার ধরণের হিসাবে গ্রহণ করুন।


3
@ ডকব্রাউন ইয়েপ এই জাতীয় ক্ষেত্রে (রুবি, পাইথন, জেএস) কেবল স্ট্যাটিক / ক্লাস পদ্ধতি ব্যবহার করার প্রচলিত। তবে এটি একটি বাস্তবায়ন বিশদ, যা আমি মনে করি না যে আমার উত্তরের পয়েন্টটির সাথে ("একটি টাইপ ব্যবহার করুন") বিশেষভাবে প্রাসঙ্গিক।
আলেকজান্ডার

2
এবং এই ধারণাটি দুঃখের সাথে তৃতীয় প্রয়োজনীয়তার সাথে তার সীমাতে পৌঁছেছে: শুরুর তারিখ, মোট অর্থ প্রদান এবং একটি মাসিক অর্থ প্রদান - এবং ফাংশনটি অর্থের পরামিতিগুলি থেকে ডেট ইন্টেরওয়াল গণনা করবে - এবং আপনার আর্থিক পরিমাণগুলি আপনার তারিখের সীমাতে রাখা উচিত নয় ...
ফালকো

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

@ ফ্যালকো আমার কাছে এটি একটি নতুন পদ্ধতির মতো বলে মনে হচ্ছে (এই পেমেন্ট ক্যালকুলেটর শ্রেণিতে নয় DateInterval):calculatePayPeriod(startData, totalPayment, monthlyPayment)
আলেকজান্ডার

7

কখনও কখনও সাবলীল অভিব্যক্তি এটিতে সহায়তা করে:

let payment1 = forTotalAmount(1234)
                  .breakIntoPayments()
                  .byPeriod(months(2));

let payment2 = forTotalAmount(1234)
                  .breakIntoPayments()
                  .byDateRange(saleStart, saleEnd);

let monthsDue = forTotalAmount(1234)
                  .calculatePeriod()
                  .withPaymentsOf(12.34)
                  .monthly();

ডিজাইনের জন্য পর্যাপ্ত সময় দেওয়া, আপনি একটি কঠিন এপিআই নিয়ে আসতে পারেন যা কোনও ডোমেন-নির্দিষ্ট-ভাষার মতো কাজ করে।

অন্য বড় সুবিধাটি হ'ল স্বতঃসম্পূর্ণ আইডিইগুলি স্বতঃ-আবিষ্কারযোগ্য ক্ষমতার কারণে স্বজ্ঞাত হিসাবে এপিআই ডকুমেন্টেশন পড়ার জন্য প্রায় অপ্রয়োজনীয় করে তোলে।

এই বিষয়ে https://nikas.praninskas.com/javascript/2015/04/26/fluent-javascript/ বা https://github.com/nikaspran/fluent.js এর মতো সংস্থান আছে ।

উদাহরণ (প্রথম সংস্থান লিঙ্ক থেকে নেওয়া):

let insert = (value) => ({into: (array) => ({after: (afterValue) => {
  array.splice(array.indexOf(afterValue) + 1, 0, value);
  return array;
}})});

insert(2).into([1, 3]).after(1); //[1, 2, 3]

8
নিজেই সাবলীল ইন্টারফেস কোনও নির্দিষ্ট কাজকে সহজ বা শক্ত করে তোলে না। এটি বিল্ডার প্যাটার্নের মতো মনে হয়।
VLAZ

8
আপনি যদি ভুল কলগুলি যেমনforTotalAmount(1234).breakIntoPayments().byPeriod(2).monthly().withPaymentsOf(12.34).byDateRange(saleStart, saleEnd);
বার্গি

4
যদি বিকাশকারীরা সত্যই তাদের পায়ে গুলি করতে চান, তবে সহজ উপায়গুলি রয়েছে বেরগি। তবুও, আপনি যে উদাহরণটি দিয়েছেন তার চেয়ে অনেক বেশি পঠনযোগ্যforTotalAmountAndBreakIntoPaymentsByPeriodThenMonthlyWithPaymentsOfButByDateRange(1234, 2, 12.34, saleStart, saleEnd);
ড্যানিয়েলকুয়াদ্রা

5
@ ড্যানিয়েলকুড্রা আমি যে বিষয়টিটি তৈরির চেষ্টা করছিলাম তা হ'ল আপনার উত্তরটি 3 টি পারস্পরিক একচেটিয়া পরামিতি থাকার ওপিস সমস্যাটি সত্যিই সমাধান করে না। বিল্ডার প্যাটার্নটি ব্যবহার করা কলটি আরও পঠনযোগ্য করে তুলতে পারে (এবং ব্যবহারকারীর বোধ হয় যে এটির কোনও অর্থ হয় না) তবে কেবলমাত্র বিল্ডার প্যাটার্নটি ব্যবহার করা তাদের একবারে 3 টি মান পাস করতে বাধা দেয় না।
বার্গি

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

2

ঠিক আছে, অন্যান্য ভাষায়, আপনি নামযুক্ত প্যারামিটার ব্যবহার করবেন । এটি জাভস্ক্রিপ্টে অনুকরণ করা যায়:

function getPaymentBreakdown(total, startDate, durationSpec) { ... }

getPaymentBreakdown(100, today, {endDate: whatever});
getPaymentBreakdown(100, today, {noOfMonths: 4});
getPaymentBreakdown(100, today, {monthlyPayment: 20});

6
নীচের বিল্ডার প্যাটার্নের মতো, এটি কলটি আরও পঠনযোগ্য করে তোলে (এবং ব্যবহারকারীর বিবেচনা করে যে এটি বোধ হয় তা বোঝায় না) তবে পরামিতিগুলির নামকরণ ব্যবহারকারীকে একবারে 3 টি মান পাস করতে বাধা দেয় না - যেমন getPaymentBreakdown(100, today, {endDate: whatever, noOfMonths: 4, monthlyPayment: 20})
25-30

1
এর :পরিবর্তে হওয়া উচিত নয় =?
বার্মার

আমি অনুমান করি আপনি পরীক্ষা করতে পারেন যে কেবলমাত্র প্যারামিটারগুলির একটিই নন-নাল (বা অভিধানে নেই)।
মতিন উলহাক

1
@ বার্গি - সিনট্যাক্সটি নিজেই ব্যবহারকারীদেরকে অযৌক্তিক পরামিতিগুলি পাস করতে বাধা দেয় না তবে আপনি কিছুটা বৈধতা যাচাই করতে পারেন এবং ত্রুটি ছুঁড়ে ফেলতে পারেন
slebetman

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

1

বিকল্প হিসাবে আপনি মাসের সংখ্যা নির্দিষ্ট করার দায়িত্বও ভঙ্গ করতে পারেন এবং এটিকে আপনার কার্যক্রমে ছেড়ে দিতে পারেন:

getPaymentBreakdown(420, numberOfMonths(3))
getPaymentBreakdown(420, dateRage(a, b))
getPaymentBreakdown(420, paymentAmount(350))

এবং get paymentBreakdown একটি অবজেক্ট পাবেন যা মাসের বেস নম্বর সরবরাহ করবে

যারা উচ্চ অর্ডার ফাংশন উদাহরণস্বরূপ একটি ফাংশন ফিরে আসবে।

function numberOfMonths(months) {
  return {months: (total) => months};
}

function dateRange(startDate, endDate) {
  return {months: (total) => convertToMonths(endDate - startDate)}
}

function monthlyPayment(amount) {
  return {months: (total) => total / amount}
}


function getPaymentBreakdown(total, {months}) {
  const numMonths= months(total);
  return {
    numMonths, 
    monthlyPayment: total / numMonths,
    endDate: addMonths(startDate, numMonths)
  };
}

কী হল totalএবং startDateপরামিতি?
বার্গি

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

@ বেরগি আমার পোস্টটি সম্পাদনা করেছেন
Vinz243

0

এবং যদি আপনি বৈষম্যমূলক ইউনিয়ন / বীজগণিত উপাত্তের ধরণের একটি সিস্টেমের সাথে কাজ করছেন তবে আপনি এটিকে এটি হিসাবে বলতে পারেন, ক TimePeriodSpecification

type TimePeriodSpecification =
    | DateRange of startDate : DateTime * endDate : DateTime
    | MonthCount of startDate : DateTime * monthCount : int
    | MonthlyPayment of startDate : DateTime * monthlyAmount : float

এবং তারপরেই কোনও সমস্যা হবেনা যেখানে আপনি বাস্তবে কোনও একটি বাস্তবায়ন করতে ব্যর্থ হতে পারেন।


এটি স্পষ্টতই আমি এই ভাষায় এই পদ্ধতির কাছে যাব যেগুলি এর মতো ধরণের উপলব্ধ ছিল। আমি আমার প্রশ্ন ভাষা-অজ্ঞাব্যত রাখার চেষ্টা করেছি তবে সম্ভবত এটি ব্যবহৃত ভাষাটি বিবেচনায় নেওয়া উচিত কারণ কিছু ক্ষেত্রে এই জাতীয় পদ্ধতিগুলি সম্ভব হয়।
CalMlynarczyk
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.