අපේ එම්වීසී අයදුම්පත ගැන මම අද උණුසුම් සාකච්ඡාවක් පැවැත්වුවා. අපට MVC ( ASP.NET ) හි ලියා ඇති වෙබ් අඩවියක් ඇති අතර , එය සාමාන්යයෙන් දර්ශනයේ යමක් කිරීමේ රටාව අනුගමනය කරයි -> පාලකයට පහර දෙන්න -> පාලකය ආකෘතියක් සාදයි (දත්ත ලබා ගන්නා කළමනාකරුවෙකු අමතන්න, ආකෘතිය සාදයි පාලක ක්රමයම) -> ආකෘතිය බැලීමට යයි -> මෙයට පිළියමක් සහ නැවත කරන්න.
ඔහු කිව්වා අපේ කේතය ඕනෑවට වඩා තදින් බැඳී ඇති බව. උදාහරණයක් ලෙස, අපට ඩෙස්ක්ටොප් යෙදුමක් අවශ්ය නම්, අපගේ පවතින කේතය භාවිතා කිරීමට අපට නොහැකි වනු ඇත.
ඔහු පැවසූ විසඳුම සහ හොඳම පුහුණුව වන්නේ API එකක් තැනීමයි, ඉන්පසු ඔබේ වෙබ් අඩවිය ඔබේ API එකට ඉහළින් ගොඩනඟා ඩෙස්ක්ටොප් යෙදුමක්, ජංගම යෙදුමක් යනාදිය සෑදීම ඉතා සරල ය.
විවිධ හේතු නිසා මෙය මට නරක අදහසක් සේ පෙනේ.
කෙසේ වෙතත්, මෙම ක්රියාව ගැන සාකච්ඡා කළ හැකි ගොග්ලිං කිරීමෙන් මට කිසිවක් සොයාගත නොහැකි විය. වාසි, අවාසි, ඔබ එසේ කළ යුත්තේ ඇයි, ඔබ නොකියන්නේ ඇයි හෝ වැඩිදුර කියවීම ගැන යමෙකුට තොරතුරු තිබේද?
එය නරක අදහසක් යැයි මා සිතන හේතු කිහිපයක්:
ඔබගේ පසුබිම API එකකින් ධාවනය කිරීමට නොහැකි තරම් වියුක්තය. ඔබ එය ඕනෑවට වඩා නම්යශීලී කිරීමට උත්සාහ කරන අතර එය පාලනය කළ නොහැකි අවුලක් වනු ඇත.
එම්වීසී තුළ ගොඩනගා ඇති සියලුම දේ භූමිකාවන් සහ සත්යාපනය වැනි නිෂ් less ල බව පෙනේ. උදාහරණයක් ලෙස, [බලය පැවරීම] ගුණාංග සහ ආරක්ෂාව; ඔබට ඔබේම දෑ පෙරළීමට සිදුවේ.
ඔබගේ සියලු API ඇමතුම් සඳහා ආරක්ෂක තොරතුරු අමුණා ඇති අතර ඔබට ටෝකන පද්ධතියක් සහ වොට්නොට් සංවර්ධනය කිරීමට සිදුවේ.
ඔබේ වැඩසටහන මෙතෙක් කරන සෑම කාර්යයක් සඳහාම ඔබට සම්පූර්ණ API ඇමතුම් ලිවීමට සිදුවේ. ඔබට ක්රියාත්මක කිරීමට අවශ්ය සෑම ක්රමයක්ම API එකකින් ඉවත් කළ යුතුය. සෑම පරිශීලකයෙකුටම ලබා ගැනීම / යාවත්කාලීන කිරීම / මකා දැමීම, සහ එකිනෙකාගේ ක්රියාකාරිත්වය සඳහා ප්රභේදයක් උදා. පරිශීලක නාමය යාවත්කාලීන කිරීම, පරිශීලකයෙකු කණ්ඩායමකට එක් කිරීම යනාදිය. ඒ සෑම එකක්ම සුවිශේෂී API ඇමතුමක් වනු ඇත.
ඒපීඅයි වෙත පැමිණෙන විට අතුරුමුහුණත් සහ වියුක්ත පන්ති වැනි සියලු ආකාරයේ මෙවලම් ඔබට අහිමි වේ. WCF වැනි දෑ අතුරුමුහුණත් සඳහා ඉතා සුළු සහයෝගයක් ඇත.
ඔබට පරිශීලකයෙකු නිර්මාණය කරන ක්රමයක් ඇත, නැතහොත් යම් කාර්යයක් ඉටු කරයි. ඔබට පරිශීලකයින් 50 ක් නිර්මාණය කිරීමට අවශ්ය නම්, ඔබට එය 50 වතාවක් අමතන්න. ඔබ මෙම ක්රමය API එකක් ලෙස කිරීමට තීරණය කළ විට ඔබේ දේශීය වෙබ් සේවාදායකයාට නම් කළ හැකි පයිප්ප එයට සම්බන්ධ විය හැකි අතර කිසිදු ගැටළුවක් නැත - ඔබේ ඩෙස්ක්ටොප් සේවාදායකයාටද එය පහර දිය හැකිය, නමුත් හදිසියේම ඔබේ තොග පරිශීලක නිර්මාණයට අන්තර්ජාලය හරහා API එක 50 වතාවක් මිටියෙන් පහර දීම ඇතුළත් වේ. හොඳ නැහැ. එබැවින් ඔබ තොග ක්රමයක් නිර්මාණය කළ යුතුය, නමුත් ඇත්ත වශයෙන්ම ඔබ එය ඩෙස්ක්ටොප් සේවාදායකයින් සඳහා නිර්මාණය කරයි. මේ ආකාරයෙන්, ඔබ අවසන් වන්නේ අ) ඔබේ ඒපීඅයි සමඟ එය ඒකාබද්ධ කරන දේ මත පදනම්ව වෙනස් කිරීම සහ ඔබට එය සමඟ කෙලින්ම සම්බන්ධ විය නොහැක, ආ) අතිරේක ශ්රිතයක් නිර්මාණය කිරීම සඳහා තවත් බොහෝ දේ කරන්න.
යග්නි . සමාන ලෙස ක්රියාත්මක වන යෙදුම් දෙකක්, එක් වෙබ් සහ එක් වින්ඩෝස් යෙදුමක් ලිවීමට ඔබ විශේෂයෙන් සැලසුම් නොකරන්නේ නම්, එය විශාල සංවර්ධන කාර්යයන් විශාල ප්රමාණයක් වේ.
ඔබට අවසානය දක්වා පියවර තැබිය නොහැකි විට නිදොස් කිරීම වඩාත් අපහසු වේ.
බොහෝ ඉදිරියට සහ පසුපසට අවශ්ය වන ස්වාධීන මෙහෙයුම් රාශියක්, උදාහරණයක් ලෙස සමහර කේතයන් වත්මන් පරිශීලකයා ලබා ගත හැකිය, පරිශීලකයා පරිපාලක භූමිකාවේ සිටිනවාදැයි පරීක්ෂා කරන්න, පරිශීලකයා අයත් සමාගම ලබා ගන්න, වෙනත් සාමාජිකයින්ගේ ලැයිස්තුවක් ලබා ගන්න, ඒ සියල්ල යවන්න විද්යුත් තැපෑලක්. ඒ සඳහා බොහෝ API ඇමතුම් අවශ්ය වනු ඇත, නැතහොත් ඔබට අවශ්ය නිශ්චිත කාර්යය බෙස්පෝක් ක්රමයක් ලිවීම, එහිදී එම බෙස්පෝක් ක්රමයේ එකම වාසිය වේගවත් වන අතර අවාසිය නම් එය නම්යශීලී වීමයි.
බොහෝ විට තවත් හේතු කිහිපයක් මේවා මගේ හිස මුදුනේ සිට ඇත.
ඔබට සමාන යෙදුම් දෙකක් අවශ්ය නම් මිස එය මට සමාන යැයි පෙනේ, එය ඇත්තෙන්ම එය වටින්නේ නැත. මේ ආකාරයට ගොඩනගා ඇති ASP.NET යෙදුමක් මා දැක නැත, ඔබට වෙනම යෙදුම් දෙකක් (API සහ ඔබේ කේතය) ලිවිය යුතු අතර අනුවාදය ඒවා දෙකම පාලනය කරයි (ඔබේ පරිශීලක පිටුවට නව ක්ෂේත්රයක් ලැබුනේ නම්, ඔබ ' අහිතකර ප්රති effects ල නොමැති බව සහතික කිරීම සඳහා එකවර API සහ ඔබේ පරිභෝජන කේතය යාවත්කාලීන කළ යුතුය. නැතහොත් එය ශක්තිමත් ලෙස තබා ගැනීම සඳහා අමතර වැඩ ගොඩක් යොදවන්න).
සංස්කරණය කරන්න: සමහර හොඳ ප්රතිචාර, ඇත්තෙන්ම මේ සියල්ලෙන් අදහස් කරන්නේ කුමක්ද යන්න පිළිබඳ හොඳ අදහසක් ලබා ගැනීමට පටන් ගනී. එබැවින් මගේ ප්රශ්නය පුළුල් කිරීම සඳහා, මෙම API ව්යුහය අනුගමනය කිරීම සඳහා ඔබ MVC යෙදුමක් සකස් කරන්නේ කෙසේද?
උදාහරණයක් ලෙස, පරිශීලකයෙකු පිළිබඳ තොරතුරු පෙන්වන වෙබ් අඩවියක් ඔබ සතුව ඇත. MVC යටතේ, ඔබට ඇත්තේ:
View - (CS) HTML පිටුවක් UserViewModel පාලකය ප්රදර්ශනය කරයි - GetUser () අමතයි සහ GetUser ක්රමයක් ඇති දර්ශන කළමණාකරු පන්තියට (ඔබේ API වර්ග කිරීම) වෙත යොමු වන UserViewModel නිර්මාණය කරයි.
පාලකය GetUser () කරන නමුත් ඔබට ඩෙස්ක්ටොප් යෙදුමක් ද අවශ්ය වේ. මෙයින් අදහස් කරන්නේ ඔබේ GetUser යම් ආකාරයක API හරහා නිරාවරණය කළ යුතු බවයි. ඔබට TCP සම්බන්ධතාවයක් අවශ්ය විය හැකිය, WCF හෝ දුරස්ථ කිරීම. නිරන්තර සම්බන්ධතා දුර්වල බැවින් ඔබට RESTful වන ජංගම යෙදුමක් ද අවශ්ය වේ.
ඉතින් ඔබ එක් එක් සඳහා API එකක් ලියනවාද, WCF වෙබ් සේවාවක් GetUser () ක්රමයක් ඇති අතර කේතය දැන්ම කරයිද return new UserManager().GetUser()
? එකම දේ කරන mvc 4 වෙබ් api ක්රමයක්? ඔබේ MVC පාලක ක්රමයට කෙලින්ම GetUser අමතන්න?
නැතහොත් ඔබ තිදෙනාටම (වෙබ් api REST සේවාව) ක්රියාත්මක වන විසඳුම තෝරාගෙන ඒ මත සියල්ල ගොඩනඟයි, එබැවින් යෙදුම් තුනම API ඇමතුම් (mvc ඒවා දේශීය යන්ත්රයට) කරයි.
මෙය න්යායාත්මක පරිපූර්ණ අවස්ථාවක් පමණක්ද? මේ ආකාරයෙන් සංවර්ධනය කිරීමේදී මට විශාල පොදු කාර්යයන් දැකිය හැකිය, විශේෂයෙන් ඔබට RESTful ආකාරයෙන් මෙහෙයුම් කිරීමට ඉඩ සලසන ආකාරයකින් සංවර්ධනය කළ යුතු නම්. මම හිතන්නේ මෙයින් සමහරක් පිළිතුරු වලින් ආවරණය වී ඇත.
2 වන සංස්කරණය: තවත් දේවල් කියවීමෙන් පසු, මම පහතින් සටහනක් තැබුවෙමි. ප්රශ්නය මා සිතන සුළු උපක්රමයකි. ඒපීඅයි එකක් ලෙස ඔබ ඔබේ පසුපස අන්තය ලිවුවහොත්, සෑම දෙයක්ම (එම්වීසී ඇප්, ඩෙස්ක්ටොප් ඇප්, මොබයිල් ඇප්) දේවල් කිරීමට කැඳවන තනි වෙබ් සේවාවක් තිබිය යුතු යැයි සිතීම ව්යාකූල විය.
මා නිගමනය කර ඇත්තේ ඔබ සැබවින්ම කළ යුත්තේ ඔබේ ව්යාපාර තර්කන ස්ථරය නිවැරදිව විසන්ධි වී ඇති බවට වග බලා ගැනීමයි. මගේ කේතය දෙස බලන විට, මම මෙය දැනටමත් කරමි - පාලකය GetUser()
කළමනාකරුවෙකු අමතනු ඇත, ඉන්පසු දර්ශනයක් සමඟ විදහා දැක්වීමට දර්ශන ආකෘතියක් සාදන්න. ඉතින් ඇත්ත වශයෙන්ම, ව්යාපාර තාර්කික ස්තරය API එකකි . ඔබට එය ඩෙස්ක්ටොප් යෙදුමකින් ඇමතීමට අවශ්ය නම්, එය ඇමතීමට පහසුකම් සැලසීම සඳහා ඔබට WCF සේවාවක් වැනි යමක් ලිවිය යුතුය. GetUser()
කේතය අඩංගු WCF ක්රමයක් තිබීම පමණක් return MyBusinessLayer.GetUser()
ප්රමාණවත් වේ. එබැවින් API යනු ව්යාපාරික තර්කනය වන අතර WCF / web api යනාදිය බාහිර යෙදුම් වලට ඇමතීමට ඉඩ දීම සඳහා කේතයේ මාතෘකාවකි.
එබැවින් ඔබට අවශ්ය දේ මත පදනම්ව ඔබේ ව්යාපාර තාර්කික ස්තරය විවිධ ඒපීඅයි වල ඔතා තැබිය යුතු අතර, ඔබේ අනෙක් යෙදුම් කිරීමට අවශ්ය සෑම මෙහෙයුමක් සඳහාම ඔබට API ක්රමයක් ලිවීමට සිදුවේ, තවද ඔබට අවශ්ය වනු ඇත සත්යාපනය කිරීමට ක්රමයක් සකසන්න, නමුත් බොහෝ දුරට එය එසේමය. ඔබේ ව්යාපාර තර්කනය වෙනම ව්යාපෘතියක (පන්ති පුස්තකාලය) තබා ගන්න, එවිට ඔබට කිසිදු ගැටළුවක් ඇති නොවනු ඇත!
මෙම අර්ථ නිරූපණය නිවැරදි යැයි බලාපොරොත්තු වෙමු. එය ජනනය කළ සියලු සාකච්ඡා / අදහස් වලට ස්තූතියි.