मुझे पहले पोस्ट की लंबाई के लिए माफी माँगने से शुरू करें, लेकिन मैं वास्तव में बहुत विस्तार से सामने बताना चाहता था ताकि मैं आपका समय टिप्पणियों में आगे और पीछे न जाऊं।
मैं एक डीडीडी दृष्टिकोण के बाद एक एप्लिकेशन डिजाइन कर रहा हूं और सोच रहा हूं कि मैं यह निर्धारित करने के लिए क्या मार्गदर्शन का पालन कर सकता हूं कि क्या एक अलग रूट में एक और एआर होना चाहिए या यदि उन्हें अलग, "फ्री-स्टैंडिंग" एआर के रूप में छोड़ा जाना चाहिए।
एक साधारण टाइम क्लॉक एप्लिकेशन का मामला लें, जो कर्मचारियों को दिन के लिए खुद को अंदर या बाहर देखने की अनुमति देता है। यूआई उन्हें अपनी कर्मचारी आईडी और पिन दर्ज करने की अनुमति देता है जिसे तब मान्य किया जाता है और कर्मचारी की वर्तमान स्थिति को पुनर्प्राप्त किया जाता है। यदि कर्मचारी वर्तमान में क्लॉक-इन है, तो UI "क्लॉक आउट" बटन प्रदर्शित करता है; और, इसके विपरीत, यदि वे क्लॉक-इन नहीं हैं, तो बटन "क्लॉक इन" पढ़ता है। बटन द्वारा की गई कार्रवाई कर्मचारी की स्थिति से भी मेल खाती है।
एप्लिकेशन एक वेब क्लाइंट है जो एक RESTful सेवा इंटरफ़ेस के माध्यम से उजागर बैक-एंड सर्वर को कॉल करता है। सहज ज्ञान युक्त, पठनीय URL बनाने में मेरा पहला पास निम्नलिखित दो समापन बिंदुओं में हुआ:
http://myhost/employees/{id}/clockin
http://myhost/employees/{id}/clockout
नोट: इनका उपयोग कर्मचारी आईडी और पिन के सत्यापन के बाद किया जाता है और हेडर में "उपयोगकर्ता" का प्रतिनिधित्व करने वाला "टोकन" दिया जाता है। ऐसा इसलिए है क्योंकि एक "प्रबंधक-मोड" है जो एक प्रबंधक या पर्यवेक्षक को दूसरे कर्मचारी को घड़ी में या बाहर करने की अनुमति देता है। लेकिन, इस चर्चा के लिए, मैं इसे सरल रखने की कोशिश कर रहा हूं।
सर्वर पर, मेरे पास एक एप्लिकेशन सेवा है जो एपीआई प्रदान करती है। ClockIn विधि के लिए मेरा प्रारंभिक विचार कुछ इस प्रकार है:
public void ClockIn(String id)
{
var employee = EmployeeRepository.FindById(id);
if (employee == null) throw SomeException();
employee.ClockIn();
EmployeeRepository.Save();
}
जब तक हमें यह पता नहीं चलता है कि कर्मचारी के समय कार्ड की जानकारी वास्तव में लेनदेन की सूची के रूप में बनी हुई है। इसका मतलब है कि हर बार जब मैं क्लॉकइन या क्लॉकओट कहलाता हूं, तो मैं सीधे कर्मचारी की स्थिति को नहीं बदल रहा हूं, लेकिन इसके बजाय, मैं कर्मचारी के टाइमशीट में एक नई प्रविष्टि जोड़ रहा हूं। कर्मचारी की वर्तमान स्थिति (घड़ी में देखी गई या नहीं) टाइमशीट में सबसे हाल की प्रविष्टि से ली गई है।
इसलिए, यदि मैं ऊपर दिखाए गए कोड के साथ जाता हूं, तो मेरी रिपॉजिटरी को यह पहचानना होगा कि एम्प्लॉई की स्थायी संपत्तियों में बदलाव नहीं हुआ है, लेकिन यह कि कर्मचारी के टाइमशीट में एक नई प्रविष्टि जोड़ी गई और डेटा स्टोर में एक इंसर्ट किया गया।
दूसरी ओर (और यहां पोस्ट का अंतिम प्रश्न), TimeSheet ऐसा लगता है जैसे यह एक एग्लिग्रेट रूट है और साथ ही इसकी पहचान (कर्मचारी आईडी और अवधि) है और मैं सिर्फ उसी तर्क को लागू कर सकता हूं जैसे TimeSheet.ClockIn (कर्मचारी कामतत्व)।
मैं खुद को दो दृष्टिकोणों के गुणों पर बहस करते हुए पाता हूं और जैसा कि शुरुआती पैराग्राफ में कहा गया है, आश्चर्य है कि समस्या के लिए कौन सा दृष्टिकोण अधिक अनुकूल है यह निर्धारित करने के लिए मुझे किन मानदंडों का मूल्यांकन करना चाहिए।