सेवा परत और भंडार के बीच क्या अंतर है? मैंने बहुत सारे डेमो एएसपी.नेट एमवीसी ऐप के माध्यम से काम किया है और उनमें से ज्यादातर में सिर्फ भंडार हैं। और कुछ दोनों का मिश्रण है। आप केवल रिपोजिटरी का उपयोग कब करते हैं और आप सेवाओं/या दोनों का उपयोग कब करते हैं? एएसपी.नेट वेब ऐप्स के लिए भी यही सच है।एएसपी.NET सेवा बनाम भंडार परत
उत्तर
डेटा संग्रह स्थान सिर्फ अपने डेटा भंडारण (एसक्यूएल डेटाबेस, xml फ़ाइल आदि) के लिए प्रवेश द्वार है, जबकि सेवाएं आम तौर पर तो लागू के रूप में कार्य डेटा को भंडार के माध्यम से डेटाबेस में सहेजने के लिए डेटा भेजने से पहले आपके डेटा पर व्यवसाय नियम।
इस उदाहरण पर विचार करें:
class UserRepository : IUserRepository
{
public void Create(User userToCreate)
{
//update tracking and save to repository
_userToCreate.DateCreated = DateTime.Now;
_dataContext.AddNew(userToCreate);
}
}
class UserService : IUserService
{
private IUserRepository _repository;
public UserService(IUserRepository repository)
{
_repository = repository;
}
public void Create(User createdByUser, User userToCreate)
{
//implement some business rules
if(!createdByUser.HasRights(UserRights.CanCreateNewUser))
throw new Exception("This user '"+createdByUser.Name+"' does not have the rights to create a new user");
//update rules auditing
_userToCreate.CreatedByUserId = createdByUser.Id;
//save entity to repository
_repository.Create(userToCreate);
}
}
फिर अपने नियंत्रक कार्रवाई में आप सीधे सेवा का उपयोग करेगा जहां अपने सभी व्यापार के नियम लागू किया जा सकता। इस तरह आप मॉनिटर का उपयोग करके अलग-अलग/स्वतंत्र रूप से नियंत्रकों, व्यवसाय नियमों (सेवाओं) और दृढ़ता (भंडार) का परीक्षण कर सकते हैं।
public ActionResult CreateUser(User newUser)
{
if(ModelState.IsValid)
{
_userService.Create(this.CurrentUser, newUser);
if(newUser.Id > 0)
return RedirectToAction("UserCreated");
}
return View(newUser);
}
एक संग्रह आमतौर पर केवल डेटा-पहुंच को संभालता है। एक सेवा परत एक भंडार का उपयोग करेगा, और कोई अतिरिक्त व्यापार तर्क लागू करें। रिपोजिटरी को फिर से उपयोग करने योग्य परत के रूप में सोचें, जो आपके डेटा तक पहुंचने के लिए कुछ भी इस्तेमाल किया जा सकता है। विभिन्न क्षुधा विभिन्न व्यापार के नियम (कि सेवा परत में जाना होगा) हो सकता है, लेकिन सभी एक ही भंडार परत implmentation इस्तेमाल कर सकते हैं
आप अपनी भंडार और सेवाएं कहां रखेंगे? आपकी परियोजना संरचना क्या है? मेरे पास MyProject.BusinessObjects और MyProject.DataObjects हैं। मेरे पास वर्तमान में मेरे MyProject.BusinessObjects में मेरी रिपॉजिटरीज़ हैं। –
मैं अपने डोमेन मॉडल (उदाहरण के लिए इकाई फ्रेमवर्क edmx) और रिपोजिटरी कक्षाओं को एक अलग प्रोजेक्ट MyProject.Data में रखना पसंद करता हूं। आम तौर पर मेरी सेवाएं एमवीसी वेब ऐप प्रोजेक्ट के अंदर एक/सेवा फ़ोल्डर में रहती हैं (लेकिन मैं जरूरी नहीं कि एक सर्वोत्तम अभ्यास - केवल एक व्यक्तिगत वरीयता) – kenwarner
@qntmfred: डेटा व्यवसाय तर्क उसी प्रोजेक्ट में होना चाहिए जैसा MyProject डाटा, अन्यथा आप MyProject.Data प्रोजेक्ट पर निर्भर वेब ऐप्स पर डुप्लिकेटिंग व्यवसाय तर्क समाप्त कर देंगे। – Alkaline
बस के रूप में qntmfred जवाब देने के लिए एक संग्रह कृपया निम्न संसाधन पर एक नजर है:
- 1. सेवा बनाम भंडार
- 2. सेवा परत
- 3. सेवा परत
- 4. सेवा परत
- 5. सेवा परत परीक्षण
- 6. नियंत्रक या सेवा परत
- 7. सेवा परत परस्पर निर्भरता
- 8. WPF एमवीवीएम सेवा परत
- 9. क्या एक भंडार एक और भंडार कॉल करना चाहिए? या एक भंडार एक सेवा परत कॉल करना चाहिए?
- 10. सेवा उन्मुख वास्तुकला - परिवहन परत (मैसेजिंग बनाम http)
- 11. क्या मुझे सेवा परत में या नियंत्रक परत में ई-मेल भेजना चाहिए?
- 12. किनेटिकजेएस: समूह बनाम परत
- 13. स्प्रिंग सेवा और डीएओ परत
- 14. एएसपी.NET एमवीसी बनाम एएसपी.Net फॉर्म
- 15. एन-लेयर व्यवसाय/सेवा परत डिजाइन
- 16. एएसपी.NET सत्र राज्य सेवा
- 17. एएसपी.NET वेब सेवा
- 18. एक सेवा परत और ASP.NET MVC 2
- 19. रिपोजिटरी बनाम डोमेन सेवा
- 20. स्प्रिंग सुरक्षा सेवा परत, वेब-सेवा परत या दोनों को सुरक्षित करती है?
- 21. एएसपी.Net: शाब्दिक बनाम लेबल
- 22. लोडकंट्रोल बनाम एएसपी.Net नियंत्रण
- 23. एमवीसी - सेवा परत संचार के लिए नियंत्रक
- 24. सेवा परत कक्षाएं सिंगलेट्स होनी चाहिए?
- 25. जावा स्विंग एप्लिकेशन में सेवा परत
- 26. सेवा परत का उपयोग क्यों करें?
- 27. Ninject.MVC3, पास निर्भरता रीसोलवर सेवा-परत के लिए?
- 28. डब्ल्यूसीएफ सेवा बनाम विंडोज सेवा
- 29. डब्ल्यूसीएफ सेवा बनाम विंडो सेवा
- 30. दूरस्थ सेवा बनाम। स्थानीय सेवा
सेवा परत हमेशा भंडार में एक संबंधित विधि नाम होगा? –
जरूरी नहीं है। प्रश्नोत्तरी के समूह के रूप में रिपोजिटरी पर विचार करें। उदाहरण के लिए, रिपोजिटरी परत में ** IQueryable GetUsers ** हो सकता है लेकिन सेवा परत में अधिक विधियां हो सकती हैं जो केवल वही क्वेरी का उपयोग करती हैं। जैसे ** IList GetUsers (int companyId, int pageNo) **, ** उपयोगकर्ता FindUser (int companyId, स्ट्रिंग नाम) **, ** बूल HasUsers (companyId) ** आदि –
Tawani
मुझे लगता है कि सेवा परत होगी व्यापार तर्क को संभालें इस प्रकार इसे क्रिया विधियों/नियंत्रकों से हटा दें। तवानी के सुझावों के लिए धन्यवाद। – beaudetious