আমাকে পোস্টটির দৈর্ঘ্যের জন্য প্রথমে ক্ষমা চেয়ে শুরু করা যাক, তবে আমি সত্যিই যতটা বিশদ আপ-ফ্রন্টটি জানাতে চাইছিলাম তাই মন্তব্যে আপনার সময়টি পিছনে পিছনে না নিয়ে আমি নিই।
আমি একটি ডিডিডি পদ্ধতির অনুসরণ করে একটি অ্যাপ্লিকেশন ডিজাইন করছি এবং ভাবছি যে একটি সমষ্টিগত রুটে আরও একটি এআর থাকতে হবে বা সেগুলি পৃথক, "মুক্ত-স্থিত" আরএস রাখা উচিত কিনা তা নির্ধারণ করার জন্য আমি কোন গাইডেন্স অনুসরণ করতে পারি।
একটি সাধারণ টাইম ক্লক অ্যাপ্লিকেশানের ক্ষেত্রে নিন যা কর্মচারীদেরকে দিনের জন্য বা তাদের বাইরে যাওয়ার জন্য অনুমতি দেয়। ইউআই তাদের তাদের কর্মচারী আইডি এবং পিন প্রবেশের অনুমতি দেয় যা তারপরে যাচাই করা হয় এবং কর্মচারীর বর্তমান অবস্থা পুনরুদ্ধার করা হয়। যদি কর্মচারী বর্তমানে ক্লক-ইন থাকে তবে ইউআই একটি "ক্লক আউট" বোতাম প্রদর্শন করে; এবং, বিপরীতে, যদি তারা ক্লক-ইন না হয় তবে বোতামটি "ক্লক ইন" পড়ে। বোতাম দ্বারা গৃহীত পদক্ষেপটিও কর্মচারীর অবস্থার সাথে মিলে যায়।
অ্যাপ্লিকেশনটি এমন একটি ওয়েব ক্লায়েন্ট যা একটি রিয়েলস্টুল সার্ভিস ইন্টারফেসের মাধ্যমে উন্মুক্ত ব্যাক-এন্ড সার্ভারকে কল করে। স্বজ্ঞাত, পঠনযোগ্য ইউআরএল তৈরি করার সময় আমার প্রথম পাসের ফলে নিম্নলিখিত দুটি সমাপ্তি হয়েছে:
http://myhost/employees/{id}/clockin
http://myhost/employees/{id}/clockout
দ্রষ্টব্য: কর্মচারী আইডি এবং পিন যাচাই করার পরে এবং "ব্যবহারকারী" প্রতিনিধিত্বকারী একটি "টোকেন" শিরোনামে পাস করার পরে এগুলি ব্যবহৃত হয়। এটি এমন কারণ একটি "ম্যানেজার-মোড" রয়েছে যা কোনও পরিচালক বা সুপারভাইজারকে অন্য কোনও কর্মচারীকে ঘড়ি-ইন বা আউট করার অনুমতি দেয়। তবে, এই আলোচনার খাতিরে, আমি এটিকে সহজ রাখার চেষ্টা করছি।
সার্ভারে, আমার কাছে একটি অ্যাপ্লিকেশন পরিষেবা রয়েছে যা এপিআই সরবরাহ করে। ক্লকআইন পদ্ধতির জন্য আমার প্রাথমিক ধারণাটি হ'ল:
public void ClockIn(String id)
{
var employee = EmployeeRepository.FindById(id);
if (employee == null) throw SomeException();
employee.ClockIn();
EmployeeRepository.Save();
}
কর্মচারীর টাইম কার্ডের তথ্যটি লেনদেনের তালিকার হিসাবে প্রকৃতপক্ষে রক্ষণাবেক্ষণ না করা অবধি এই বিষয়টি বেশ সোজা-এগিয়ে দেখায়। এর অর্থ প্রতিবার যখন আমি ক্লকইন বা ক্লকআউট কল করি তখন আমি সরাসরি কর্মচারীর অবস্থা পরিবর্তন করি না বরং পরিবর্তে আমি কর্মচারীর টাইমশিটে একটি নতুন এন্ট্রি যুক্ত করছি। কর্মচারীর বর্তমান অবস্থা (আটকানো হয়েছে কিনা) টাইমশিটে সাম্প্রতিকতম এন্ট্রি থেকে উদ্ভূত।
সুতরাং, আমি যদি উপরে বর্ণিত কোডটি দিয়ে যাই তবে আমার সংগ্রহস্থলটিকে স্বীকৃতি দিতে হবে যে কর্মচারীর অবিচলিত বৈশিষ্ট্যগুলি পরিবর্তিত হয়নি তবে কর্মচারীর টাইমশিটে একটি নতুন এন্ট্রি যুক্ত হয়েছিল এবং ডেটা স্টোরটিতে একটি সন্নিবেশ সম্পাদন করে।
অন্যদিকে (এবং এখানে পোস্টের চূড়ান্ত প্রশ্নটি রয়েছে), টাইমশিটটি মনে হয় এটি একটি সমষ্টিগত রুট এবং পাশাপাশি এটির পরিচয় (কর্মচারী আইডি এবং সময়কাল) রয়েছে এবং আমি টাইমশিট.ক্লকআইনের মতো একই যুক্তিটি সহজেই প্রয়োগ করতে পারি could (কর্মচারী আইডি).
আমি নিজেকে দুটি পদ্ধতির গুণাবলীর সাথে নিজেকে বিতর্ক করতে দেখছি এবং যেমন উদ্বোধনী অনুচ্ছেদে বর্ণিত হয়েছে, সমস্যার জন্য কোন পদ্ধতির আরও উপযুক্ত তা নির্ধারণ করার জন্য আমার কোন মানদণ্ডটি মূল্যায়ন করা উচিত তা অবাক করে দেখছি।