मैं वर्तमान में यूआई से एक एएसपी.Net ऐप लिख रहा हूं। मैं एक एमवीपी आर्किटेक्चर को कार्यान्वित कर रहा हूं क्योंकि मैं विनफॉर्म से बीमार हूं और कुछ ऐसी चीज चाहता था जिसमें चिंताओं का बेहतर अलगाव हो।एमवीपी का उपयोग कर उच्च परतों में सेवा परत संदेश/त्रुटियों को आप कैसे संचारित करते हैं?
तो एमवीपी के साथ, प्रेजेंटर दृश्य द्वारा उठाए गए कार्यक्रमों को संभालता है। यहाँ कुछ कोड मैं जगह में है कि उपयोगकर्ताओं का बनाया से निपटने के लिए है:
public class CreateMemberPresenter
{
private ICreateMemberView view;
private IMemberTasks tasks;
public CreateMemberPresenter(ICreateMemberView view)
: this(view, new StubMemberTasks())
{
}
public CreateMemberPresenter(ICreateMemberView view, IMemberTasks tasks)
{
this.view = view;
this.tasks = tasks;
HookupEventHandlersTo(view);
}
private void HookupEventHandlersTo(ICreateMemberView view)
{
view.CreateMember += delegate { CreateMember(); };
}
private void CreateMember()
{
if (!view.IsValid)
return;
try
{
int newUserId;
tasks.CreateMember(view.NewMember, out newUserId);
view.NewUserCode = newUserId;
view.Notify(new NotificationDTO() { Type = NotificationType.Success });
}
catch(Exception e)
{
this.LogA().Message(string.Format("Error Creating User: {0}", e.Message));
view.Notify(new NotificationDTO() { Type = NotificationType.Failure, Message = "There was an error creating a new member" });
}
}
}
मैं अपने मुख्य फ़ॉर्म सत्यापन बनाया नेट मान्यता नियंत्रण में उपयोग किया जाता है, लेकिन अब मैं सत्यापित करने की आवश्यकता है कि डेटा पर्याप्त रूप से संतुष्ट सेवा परत के लिए मानदंड।
मान लीजिए कि निम्नलिखित सेवा लेयर संदेशों दिखा सकते हैं करते हैं:
- ई-मेल खाता पहले से मौजूद (विफलता)
- चर्चा करते हुए उपयोगकर्ता द्वारा दर्ज (विफलता) मौजूद नहीं है
- पासवर्ड लंबाई डेटासंग्रह से अधिक की अनुमति दी लंबाई (विफलता)
- सदस्य सफलतापूर्वक बनाया गया (सफलता)
के भी कहना है कि मीटर चलो अयस्क नियम सेवा परत में होंगे जो यूआई अनुमान नहीं लगा सकता है।
वर्तमान में यदि सेवा योजनाबद्ध नहीं है तो सेवा स्तर में अपवाद फेंक रहा है। क्या यह एक पर्याप्त रणनीति है? क्या यह कोड आपके लिए गंध करता है? अगर मैंने इस तरह की एक सेवा परत लिखी है तो क्या आप प्रेजेंटर्स लिखने से नाराज होंगे जो इस तरह से इसका इस्तेमाल करते हैं? रिटर्न कोड बहुत पुराने स्कूल लगते हैं और एक बूल पर्याप्त जानकारीपूर्ण नहीं है।
ओपी द्वारा संपादित नहीं: अनुवर्ती टिप्पणियों में विलय कि ओपी
Cheekysoft द्वारा जवाब के रूप में तैनात किया गया है, मैं एक ServiceLayerException की अवधारणा की तरह। मेरे पास अपवादों के लिए पहले से ही एक वैश्विक अपवाद मॉड्यूल है जिसे मैं उम्मीद नहीं करता हूं। क्या आप इन सभी कस्टम अपवादों को थकाऊ बनाते हैं? मैं सोच रहा था कि बेस अपवाद वर्ग को पकड़ना थोड़ा गंध था लेकिन बिल्कुल यकीन नहीं था कि वहां से प्रगति कैसे हुई।
tgmdbm, मुझे लैम्ब्डा अभिव्यक्ति का चालाक उपयोग पसंद है!
फॉलो-अप के लिए धन्यवाद चेकेसॉफ्ट। इसलिए मैं अनुमान लगा रहा हूं कि अगर आप इस बात को ध्यान में रखते हैं कि उपयोगकर्ता को एक अलग पृष्ठ प्रदर्शित नहीं किया जाता है (मैं मुख्य रूप से एक वेब डेवलपर हूं) तो अपवाद संभाला नहीं जाता है।
हालांकि, अगर मैं उसी संदेश में त्रुटि संदेश वापस करना चाहता हूं जहां उपयोगकर्ता ने डेटा को सबमिट करने वाले डेटा को सबमिट किया है, तो मुझे प्रस्तुतकर्ता में अपवाद को पकड़ना होगा?
यहाँ CreateUserView जब प्रस्तुतकर्ता ServiceLayerException संभाला है की तरह दिखता है:
त्रुटि के इस प्रकार के लिए, यह एक ही दृश्य को उसकी रिपोर्ट करना अच्छा है।
वैसे भी, मुझे लगता है कि हम अब मेरे मूल प्रश्न के दायरे से आगे जा रहे हैं। मैं आपके द्वारा पोस्ट की गई चीज़ों के साथ खेलूँगा और यदि मुझे और जानकारी चाहिए तो मैं एक नया प्रश्न पोस्ट करूंगा।
क्या अच्छा जवाब है :) – Mik378