मेरे पास एक बहुत अच्छी तरह से डिज़ाइन किया गया आर्किटेक्चर है जहां नियंत्रक उन सेवाओं पर जाते हैं जो डेटाबेस के साथ संवाद करने वाले भंडारों तक पहुंचते हैं।एएसपी.नेट एमवीसी में नियंत्रकों को छोटा कैसे रखें?
जैसे, नियंत्रकों में तर्क कम से कम रखा जाता है, लेकिन मैं अभी भी कोड का बहुत ही सूक्ष्म टुकड़े ऐसे ही
- मान्य मॉडल
- की व्यवस्था कार्रवाई विधि तर्क कुछ कार्य करने के लिए है
- इन तर्कों के साथ कुछ सेवा का आह्वान करें, शायद परिणाम सत्यापित करें और मॉडल को अब अमान्य
- अंत में सेवा के परिणाम से एक मॉडल तैयार करें, और उसे वापस करें।
कुछ लंबे मामले सेवा द्वारा लौटाई गई "स्थिति" के आधार पर अलग-अलग चीजें करते हैं।
यहाँ कुछ उदाहरणों की है:
[HttpPost]
[AjaxOnly]
[Authorize]
public JsonResult Preview(string input)
{
LinkResult parsed = linkService.ParseUserInput(input);
if (parsed.Result == LinkParseResult.Used)
{
long? postId = parsed.Link.PostId;
if (postId.HasValue)
{
Post post = postService.GetById(postId.Value, false);
return Json(new
{
faulted = "used",
link = DetailsRoute(post),
id = postId
});
}
else
{
return Json(new { faulted = "invalid" });
}
}
else if (parsed.Result == LinkParseResult.Invalid)
{
return Json(new { faulted = "invalid" });
}
else
{
Link link = parsed.Link;
if (link.Description != null && link.Description.Length > 200)
{
link.Description = link.Description.Substring(0, 200);
}
return AjaxView(link);
}
}
और (Post
, PostModel
डोमेन से आता दृश्य मॉडल है)
private PostModel PostModelConverter(Post post)
{
Link link = post.Link;
if (link == null)
{
throw new ArgumentException("post.Link can't be null");
}
if (link.Type == LinkType.Html)
{
return new PostedLinkModel
{
Description = link.Description,
PictureUrl = link.Picture,
PostId = post.Id,
PostSlug = postService.GetTitleSlug(post),
Timestamp = post.Created,
Title = link.Title,
UserMessage = post.UserMessage,
UserDisplayName = post.User.DisplayName
};
}
else if (link.Type == LinkType.Image)
{
return new PostedImageModel
{
PictureUrl = link.Picture,
PostId = post.Id,
PostSlug = postService.GetTitleSlug(post),
Timestamp = post.Created,
UserMessage = post.UserMessage,
UserDisplayName = post.User.DisplayName
};
}
return null;
}
इस बारे में अगर दृश्य मॉडल वास्तव में होना चाहिए प्रश्न उठाता है वेब प्रोजेक्ट एक नियम के रूप में, या वे वास्तव में डोमेन, या कुछ अन्य परियोजना का हिस्सा हो सकते हैं।
मुझे यकीन नहीं है कि मैं पूर्वावलोकन कार्रवाई के बारे में बहुत कुछ कर सकता हूं, शायद लिंक प्राप्त करने वाले पूर्वावलोकन मॉडल का उपयोग करने के अलावा, और वर्णन को छोटा कर देता है, लेकिन यह दो पंक्तियों की तरह सहेजता है।
मॉडल कनवर्टर शायद कहीं और होना चाहिए, लेकिन मैं कहाँ है कि होना चाहिए के रूप में पता कर रहा हूँ।
एक और बिंदु जो दिमाग में आता है, अगर मुझे partial
कीवर्ड का उपयोग करके इस नियंत्रक को विभाजित करना चाहिए (क्या यह स्वत: उत्पन्न वर्गों की तुलना में किसी अन्य चीज़ के लिए इसका उपयोग करने का एक बुरा अभ्यास है?), या विभिन्न नियंत्रकों का उपयोग करने वाले मार्ग जोड़ना किस कार्रवाई का अनुरोध किया गया है या किस http विधि का उपयोग किया जा रहा है, इसे संभालने का सामान्य तरीका क्या है?
बस एक व्यक्तिगत वरीयता है, लेकिन आप इसके बदले स्विच स्टेटमेंट का उपयोग कर सकते हैं .. अन्यथा अगर ... आदि –