ආයතන රාමුව සමඟ නිධිය රටාව භාවිතා නොකළ යුත්තේ ඇයි?


214

රැකියා සම්මුඛ සාකච්ඡාවකදී, ආයතන රාමුව වැනි ORM සමඟ වැඩ කිරීමට නිධිය රටාව හොඳ රටාවක් නොවන්නේ මන්දැයි පැහැදිලි කිරීමට මාගෙන් විමසන ලදි. මෙය එසේ වන්නේ ඇයි?


63
එය උපක්‍රමශීලී ප්‍රශ්නයකි
ඔමූ

2
මයික්‍රොසොෆ්ට් විසින් බොහෝ විට නිධිය රටාව භාවිතා කරන බවට සම්මුඛ පරීක්‍ෂකවරයාට මා පිළිතුරු දෙනු ඇත .
ලෝරන්ට් බෝර්ගෝල්ට්-රෝයි

1
එය හොඳ අදහසක් නොවීමට සම්මුඛ පරීක්ෂකගේ හේතුව කුමක්ද?
බොබ් හෝන්

3
හාස්‍යජනක කාරණය නම් ගූගල් හි "නිධිය රටාව" සෙවීම බොහෝ දුරට ආයතන රාමුවට සම්බන්ධ ප්‍රති results ල ලබා දෙන අතර EF සමඟ රටාව භාවිතා කරන්නේ කෙසේද යන්නයි.
අර්සෙනී මෝර්සෙන්කෝ

2
ayende ගේ බ්ලොගය ayende.com/blog බලන්න . මා දන්නා දේ පදනම් කරගෙන ඔහු නිධිය රටාව භාවිතා කළ නමුත් අවසානයේ එය විමසුම් වස්තු රටාවට පක්ෂව එය අත්හැරියේය
ජයිම් සැන්ග්කැප්

Answers:


107

ආයතන රාමුව සමඟ වැඩ නොකිරීමට නිධිය රටාවට කිසිදු හේතුවක් මා දකින්නේ නැත. නිධිය රටාව යනු ඔබේ දත්ත ප්‍රවේශ ස්තරය මත ඔබ තැබූ වියුක්ත ස්ථරයකි. ඔබේ දත්ත ප්‍රවේශ ස්ථරය පිරිසිදු ADO.NET ගබඩා කර ඇති ක්‍රියා පටිපාටිවල සිට ආයතන රාමුව හෝ XML ගොනුවක් විය හැකිය.

විවිධ පද්ධති වලින් (දත්ත සමුදාය / එක්ස්එම්එල් / වෙබ් සේවාව) දත්ත ඔබ සතුව ඇති විශාල පද්ධතිවල, වියුක්ත ස්ථරයක් තිබීම හොඳය. මෙම තත්වය තුළ නිධිය රටාව හොඳින් ක්‍රියාත්මක වේ. තිරය ​​පිටුපස සිදුවන දේ සැඟවීමට ආයතන රාමුව ප්‍රමාණවත් වියුක්තයක් යැයි මම විශ්වාස නොකරමි.

මගේ දත්ත ප්‍රවේශ ප්‍රවේශ ස්ථර ක්‍රමය ලෙස මම ආයතන රාමුව සමඟ නිධිය රටාව භාවිතා කර ඇති අතර තවමත් ගැටලුවකට මුහුණ දී නොමැත.

DbContextනිධිය සමඟ වියුක්ත කිරීමේ තවත් වාසියක් වන්නේ ඒකක-පරීක්ෂණ හැකියාවයි . ඔබේ IRepositoryඅතුරුමුහුණත ක්‍රියාත්මක කිරීම් 2 ක් ඇති අතර, එකක් (සැබෑ නිධිය) DbContextදත්ත සමුදාය සමඟ කතා කිරීමට භාවිතා කරන අතර දෙවැන්න FakeRepositoryමතක මතක වස්තු / සමච්චල් කළ දත්ත ආපසු ලබා දිය හැකිය. මෙය ඔබගේ IRepositoryඒකකය පරීක්ෂා කළ හැකි වන අතර එමඟින් කේතයේ වෙනත් කොටස් භාවිතා කරයි IRepository.

public interface IRepository
{
  IEnumerable<CustomerDto> GetCustomers();
}
public EFRepository : IRepository
{
  private YourDbContext db;
  private EFRepository()
  {
    db = new YourDbContext();
  }
  public IEnumerable<CustomerDto> GetCustomers()
  {
    return db.Customers.Select(f=>new CustomerDto { Id=f.Id, Name =f.Name}).ToList();
  }
}
public MockRepository : IRepository
{
  public IEnumerable<CustomerDto> GetCustomers()
  {
    // to do : return a mock list of Customers
    // Or you may even use a mocking framework like Moq
  }
}

දැන් DI භාවිතා කරමින්, ඔබට ක්‍රියාත්මක කිරීම ලැබේ

public class SomeService
{
  IRepository repo;
  public SomeService(IRepository repo)
  {
     this.repo = repo;
  }  
  public void SomeMethod()
  {
    //use this.repo as needed
  }    
}

3
එය ක්‍රියා නොකරනු ඇතැයි මම

2
හරි, මෙය වඩාත්ම ජනප්‍රිය පිළිතුර බැවින් මම එය නිවැරදි පිළිතුර ලෙස තෝරා

70
අවසන් වරට වඩාත්ම ජනප්‍රිය == නිවැරදි වූයේ කවදාද?
HDave

16
DbContext දැනටමත් නිධියකි, නිධිය යනු පහත් මට්ටමේ සාරාංශයකි. ඔබට විවිධ දත්ත ප්‍රභවයන් සාරාංශ කිරීමට අවශ්‍ය නම් ඒවා නියෝජනය කිරීමට වස්තු සාදන්න.
ඩැනියෙල් ලිට්ල්

7
කොලැක්ස්. අපි එය උත්සාහ කළෙමු - පාලක ස්තරයේම DBcontext - අපි repo රටාවට ආපසු යමු. රෙපෝ රටාව සමඟ, ඒකක පරීක්ෂණ නිරන්තරයෙන් අසාර්ථක වූ දැවැන්ත DbContext සමච්චලයට ලක් විය. EF භාවිතා කිරීම අසීරු වූ අතර EF සූක්ෂමතාවයන් සඳහා අස්ථාවර හා පර්යේෂණ පැය ගණනක් වැය විය. අපට දැන් කුඩා සරල විහිළු ඇත. කේතය පිරිසිදුයි. වැඩ වෙන් කිරීම වඩාත් පැහැදිලිය. ඊඑෆ් දැනටමත් රෙපෝ රටාවක් බවත් දැනටමත් ඒකකය පරීක්ෂා කළ හැකි බවත් මම සමූහයා සමඟ එකඟ නොවෙමි.
රියාස්

463

ආයතන රාමුව සමඟ නිධිය රටාව භාවිතා නොකිරීමට ඇති හොඳම හේතුව කුමක්ද? ආයතන රාමුව දැනටමත් නිධිය රටාවක් ක්‍රියාත්මක කරයි. DbContextඔබේ UoW (වැඩ ඒකකය) වන අතර සෑම එකක්ම DbSetනිධිය වේ. මේ මත තවත් තට්ටුවක් ක්‍රියාත්මක කිරීම අතිරික්තයක් පමණක් නොව නඩත්තු කිරීම දුෂ්කර කරයි.

රටාවේ අරමුණ අවබෝධ කර නොගෙන මිනිසුන් රටා අනුගමනය කරයි. නිධිය රටාව සම්බන්ධයෙන් ගත් කල, අරමුණ වන්නේ පහත් මට්ටමේ දත්ත සමුදා විමසීමේ තර්කනය වියුක්ත කිරීමයි. ඔබේ කේතයේ ඇත්ත වශයෙන්ම SQL ප්‍රකාශ ලිවීමේ පැරණි දිනවල, නිධිය රටාව යනු ඔබේ කේත පදනම පුරා විසිරී ඇති තනි ක්‍රම වලින් එම SQL ගෙනයාමට සහ එය එක තැනක ස්ථානගත කිරීමටය. Entity Framework, NHibernate, වැනි ORM එකක් තිබීම මෙම කේත වියුක්ත කිරීම සඳහා ආදේශකයක් වන අතර එමඟින් රටාවේ අවශ්‍යතාවය ප්‍රතික්ෂේප කරයි.

කෙසේ වෙතත්, ඔබේ ORM මුදුනේ සාරාංශයක් නිර්මාණය කිරීම නරක අදහසක් නොවේ, UoW / repostitory තරම් සංකීර්ණ කිසිවක් නොවේ. මම සේවා රටාවක් සමඟ යන්නෙමි, එහිදී ඔබ ඔබේ යෙදුමට ආයතන රාමුව, එන්එච්බර්නේට් හෝ වෙබ් ඒපීඅයි වෙතින් දත්ත පැමිණෙන්නේ දැයි නොදැන හෝ සැලකිලිමත් නොවී භාවිතා කළ හැකි API එකක් සාදයි. ඔබේ යෙදුමට අවශ්‍ය දත්ත ආපසු ලබා දීම සඳහා ඔබ ඔබේ සේවා පන්තියට ක්‍රම එකතු කරන බැවින් මෙය වඩාත් සරල ය. ඔබ කළ යුතු යෙදුමක් ලියන්නේ නම්, උදාහරණයක් ලෙස, මේ සතියේ ලැබීමට නියමිත අයිතම නැවත ලබා දීම සඳහා ඔබට සේවා ඇමතුමක් තිබිය හැකි අතර තවමත් සම්පූර්ණ කර නොමැත. ඔබගේ සියලු යෙදුම දන්නා දෙය නම් එයට මෙම තොරතුරු අවශ්‍ය නම් එය එම ක්‍රමය ලෙස හඳුන්වන බවයි. එම ක්‍රමවේදය තුළ සහ පොදුවේ ඔබේ සේවාවේදී, ඔබ ආයතන රාමුව හෝ ඔබ භාවිතා කරන වෙනත් ඕනෑම දෙයක් සමඟ අන්තර් ක්‍රියා කරයි. පසුව, ඔබ ORM මාරු කිරීමට හෝ වෙබ් API එකකින් තොරතුරු අදින්නට තීරණය කරන්නේ නම්,

එය නිධිය රටාව භාවිතා කිරීම සඳහා විභව තර්කයක් සේ පෙනෙන්නට පුළුවන, නමුත් මෙහි ඇති ප්‍රධාන වෙනස වන්නේ සේවාවක් තුනී ස්ථරයක් වන අතර ඔබ දිගින් දිගටම විමසන දෙයකට වඩා සම්පූර්ණයෙන්ම පිළිස්සූ දත්ත ආපසු ලබා දීමට යොමු වීමයි. නිධිය.


76
එකම නිවැරදි පිළිතුර මෙය බව පෙනේ.
මයික් චේම්බර්ලින්

10
ඔබට EF6 + හි සමච්චල් කළ හැකියDbContext (බලන්න: msdn.microsoft.com/en-us/data/dn314429.aspx ). පවා අඩු සංස්කරණ, ඔබ ව්යාජ භාවිතා කළ හැකි DbContextපන්තිය -like සමච්චල් කරමින් සමග DbSets, සිට DbSetආම්පන්න සඳහා iterface, IDbSet.
ක්‍රිස් ප්‍රට්

14
Z සෙන්කර්, ඔබ හරියටම නිධිය රටාව අනුගමනය නොකරන්නට ඇත. දැඩි වෙනස වන්නේ ප්‍රතිලාභ අගයයි. ගබඩාවලින් විමසීම් නැවත ලබා දෙන අතර සේවාවන් ගණන් කළ හැකි දේ ආපසු ලබා දිය යුතුය. එය එතරම් කළු හා සුදු නොවේ, එහි අතිච්ඡාදනය ඇති බැවින්. එය ඔබ භාවිතා කරන ආකාරය පිළිබඳ වැඩි ය. ගබඩාවක් මඟින් සියලු වස්තු සමූහය නැවත ලබා දිය යුතු අතර, පසුව ඔබ තවදුරටත් විමසනු ඇත, සේවාව අවසාන දත්ත කට්ටලය ආපසු ලබා දිය යුතු අතර වැඩිදුර විමසීමට සහාය නොවිය යුතුය.
ක්‍රිස් ප්‍රට්

11
ආඩම්බරයෙන් කතා කිරීමේ අවදානමක: ඒවා වැරදියි. දැන්, නිල නිබන්ධන වලට අනුව, මයික්‍රොසොෆ්ට් ඊඑෆ් 6 සිට මා දුටු දෙයින් නිධිය භාවිතා කිරීම ප්‍රතික්ෂේප කර ඇත. පොත සම්බන්ධයෙන්, කතුවරයා ගබඩාවන් භාවිතා කිරීමට තෝරාගත්තේ මන්දැයි මට කතා කළ නොහැක. මහා පරිමාණ යෙදුම් ගොඩනඟන අගල්වල සිටින අයෙකු ලෙස මට කථා කළ හැකි දෙය නම්, ආයතන රාමුව සමඟ නිධිය රටාව භාවිතා කිරීම නඩත්තු බියකරු සිහිනයකි. ඔබ අතළොස්සක් වූ ගබඩාවලට වඩා සංකීර්ණ දෙයකට ගිය පසු, ඔබ ඔබේ ගබඩාවන් / වැඩ ඒකකය කළමනාකරණය කිරීම සඳහා අධික කාලයක් වැය කරයි.
ක්‍රිස් ප්‍රට්

7
මට සාමාන්‍යයෙන් ඇත්තේ එක් දත්ත සමුදායකට හෝ ප්‍රවේශ ක්‍රමයකට එක් සේවාවක් පමණි. එකම ක්‍රම සමූහයකින් විවිධ වස්තු වර්ග විමසීමට මම සාමාන්‍ය ක්‍රම භාවිතා කරමි. මගේ සන්දර්භය මගේ සේවාවට එන්නත් කිරීමටත් පසුව මගේ සේවය මගේ පාලකයන්ට ඇතුළත් කිරීමටත් මම නින්ජෙක්ට් භාවිතා කරමි, එවිට සියල්ල පිළිවෙලට හා පිළිවෙලට තිබේ.
ක්‍රිස් ප්‍රට්

46

අයින්ඩේ රහියන්ගෙන් ලබාගත් එක් කරුණක් මෙන්න: ගෘහ නිර්මාණ ශිල්පය විනාශයේ වළේ: නිධිය වියුක්ත ස්ථරයේ නපුර

ඔහුගේ නිගමනයට මා එකඟ දැයි මට තවමත් විශ්වාස නැත. එය අල්ලා ගැනීම -22 - එක් අතකින්, විමසුම්-විශේෂිත දත්ත ලබා ගැනීමේ ක්‍රම සමඟ මගේ ඊඑෆ් සන්දර්භය ටයිප්-විශේෂිත ගබඩාවල ඔතා තිබේ නම්, ඇත්ත වශයෙන්ම මට මගේ කේතය (වර්ග කිරීම) පරීක්ෂා කිරීමට හැකියාවක් ඇත, එය එන්ටිටි සමඟ පාහේ කළ නොහැකි ය රාමුව පමණක්. අනෙක් අතට, සබඳතා පොහොසත් විමසීම් සහ අර්ථකථන නඩත්තු කිරීමේ හැකියාව මට අහිමි වේ (නමුත් මට එම අංගයන් වෙත පූර්ණ ප්‍රවේශයක් ඇති විට පවා මට දැනෙන්නේ මම EF හෝ වෙනත් වෙනත් ORM වටා බිත්තර කටු මත ඇවිදිමින් සිටින බවයි. , එය කිසිසේත් ක්‍රියාත්මක කළ නොහැකි හෝ ක්‍රියාත්මක නොවිය හැකි ක්‍රමවේදයන් මා නොදන්නා හෙයින්, එය සංචාලන දේපල එකතුවකට මා එකතු කිරීම නිර්මාණයක් හෝ හුදෙක් සංගමයක් ලෙස අර්ථ දක්වනු ඇත්ද, එය කම්මැලි හෝ උනන්දුවෙන් පැටවීමට යන්නේද නැතහොත් කිසිසේත් පටවන්නේ නැත. පෙරනිමි, ආදිය. ඉතින් සමහර විට මෙය වඩා හොඳ විය හැකිය. ශුන්‍ය-සම්බාධනය වස්තු-සම්බන්ධතා "සිතියම්ගත කිරීම" යනු මිථ්‍යා ජීවීන්ගේ දෙයක් විය හැකිය - සමහර විට නවතම රාමු නිකුතුව "මැජික් යුනිකෝන්" ලෙස සංකේතවත් කරන ලද්දේ ඒ නිසා විය හැකිය).

කෙසේ වෙතත්, විමසුම්-විශේෂිත දත්ත ලබා ගැනීමේ ක්‍රම මගින් ඔබේ ආයතන ලබා ගැනීම යන්නෙන් අදහස් වන්නේ ඔබේ ඒකක පරීක්ෂණ දැන් අත්‍යවශ්‍යයෙන්ම සුදු පෙට්ටි පරීක්ෂණ වන අතර මේ සම්බන්ධයෙන් ඔබට වෙනත් විකල්පයක් නොමැති හෙයිනි, පරීක්ෂණයට භාජනය වන ඒකකය යන්නේ කුමන නිධිය ක්‍රමයටද යන්න ඔබ කල්තියා දැන සිටිය යුතුය. එය සමච්චල් කිරීම සඳහා අමතන්න. ඔබ තවමත් ඒකාබද්ධ පරීක්ෂණ ලියන්නේ නැත්නම්, ඔබ තවමත් සත්‍ය වශයෙන්ම විමසීම් පරීක්‍ෂා නොකරයි.

මේවා සංකීර්ණ විසඳුමක් අවශ්‍ය සංකීර්ණ ගැටළු ය. ඔබේ සියලු ආයතන ඒවා අතර කිසිදු සම්බන්ධයක් නොමැති වෙනම වර්ගයක් යැයි මවා පාමින් ඒවා නිවැරදි කළ නොහැක. හොඳයි ඔබට පුළුවන් , නමුත් එය උරා බොනවා.

යාවත්කාලීන කිරීම: මම භාවිතා යම් සාර්ථකත්වයක් ඇති මහත් වෑයමක් සලක් රාමුව සැපයුම්කරු අමතන්න. උත්සාහය යනු මතකයේ ඇති සැපයුම්කරුවෙකි (විවෘත මූලාශ්‍රය) එය සත්‍ය දත්ත ගබඩාවකට එරෙහිව ඔබ භාවිතා කරන ආකාරයටම පරීක්ෂණ වලදී EF භාවිතා කිරීමට ඉඩ සලසයි. මෙම ව්‍යාපෘතියේ ඇති සියලුම පරීක්ෂණ මාරුවීම ගැන මම සලකා බලමි. මෙම සැපයුම්කරු භාවිතා කිරීමට මම කටයුතු කරමි. මා මෙතෙක් සොයාගෙන ඇති එකම විසඳුම වන්නේ මා කලින් කතා කළ සියලු ගැටලු විසඳීමයි. මතකයේ ඇති දත්ත සමුදාය නිර්මාණය කරන විට මගේ පරීක්ෂණ ආරම්භ කිරීමේදී සුළු ප්‍රමාදයක් ඇති එකම දෙය (එය මෙය කිරීමට NMemory නම් තවත් පැකේජයක් භාවිතා කරයි), නමුත් මෙය සැබෑ ගැටළුවක් ලෙස මා දකින්නේ නැත. පරීක්ෂා කිරීම සඳහා උත්සාහය (SQL CE හා එදිරිව) භාවිතා කිරීම ගැන කතා කරන කේත ව්‍යාපෘති ලිපියක් ඇත.


3
ඒකක පරීක්ෂණය ගැන සඳහන් නොකර ඕනෑම ගෘහ නිර්මාණ ලිපියක් ස්වයංක්‍රීයව මා සඳහා කුණු කූඩයට යවනු ලැබේ. නිධිය රටාවේ එක් කරුණක් වන්නේ යම් පරීක්ෂණ හැකියාවක් ලබා ගැනීමයි.
නිදි ස්මිත්

3
ඊඑෆ් සන්දර්භය ඔතා නොගෙන ඔබට තවමත් ඒකක පරීක්ෂණ කළ හැකිය (එය දැනටමත් නිධියකි). ඔබ දත්ත ගබඩාවේ විමසීම් නොව ඔබේ වසම / සේවාවන් පරීක්ෂා කළ යුතුය (ඒවා ඒකාබද්ධ කිරීමේ පරීක්ෂණ).
ඩැනියෙල් ලිට්ල්

2
6 වන අනුවාදයේ EF හි පරීක්ෂණ හැකියාව බෙහෙවින් දියුණු වී ඇත. ඔබට දැන් සමච්චල් කළ හැකිය DbContext. කෙසේ වෙතත්, ඔබට සැමවිටම සමච්චල් කළ හැකිය, එය කෙසේ වෙතත්, ආයතන DbSetරාමුවේ මස් වේ. DbContextඔබේ DbSetදේපල (ගබඩාවන්) එක ස්ථානයක (වැඩ ඒකකය) තැබීමට පන්තියකට වඩා ටිකක් වැඩිය , විශේෂයෙන් ඒකක පරීක්ෂණ සන්දර්භයක් තුළ, සියලු දත්ත සමුදායන් ආරම්භ කිරීම සහ සම්බන්ධතා දේවල් අවශ්‍ය හෝ අවශ්‍ය නොවන විට.
ක්‍රිස් ප්‍රට්

අදාළ ආයතන සංචලනය නැතිවීම නරක වන අතර එය OOP වලට ප්‍රතිවිරුද්ධ දෙයකි, නමුත් විමසනු ලබන දේ පිළිබඳව ඔබට වැඩි පාලනයක් ඇත.
අලිරේසා

පරීක්‍ෂා කිරීමේ අවස්ථාව වන විට, ඒකක පරීක්‍ෂණය සක්‍රීය කිරීම සඳහා ස්ක්ලයිට් සපයන්නන් සමඟ ඉන්-මෙමරි සහ ඉන්-මෙමරි යන කොටුවෙන් පිටත ඊඑෆ් කෝර් බොහෝ දුරක් පැමිණ ඇත. බහාලුම්ගත දත්ත ගබඩාවක පරීක්ෂණ ක්‍රියාත්මක කිරීම සඳහා ඔබට ඒකාබද්ධ පරීක්ෂණ අවශ්‍ය වූ විට ඩොකර් තුළට ගෙන එන්න.
සුදාන්ෂු මිශ්‍ර

17

ඔබ බොහෝ විට එසේ කිරීමට හේතුව එය ටිකක් අතිරික්ත වීමයි. ආයතන රාමුව මඟින් ඔබට කේතීකරණ හා ක්‍රියාකාරී වාසි රාශියක් ලබා දෙයි, ඒ නිසා ඔබ එය භාවිතා කරයි, ඔබ එය රැගෙන නිධිය රටාවකට ඔතා එම වාසි ඉවතට විසි කරන්නේ නම්, ඔබ වෙනත් දත්ත ප්‍රවේශ ප්‍රවේශයක් භාවිතා කරයි.


"ආයතන රාමුව මඟින් ඔබට කේතීකරණ සහ ක්‍රියාකාරී වාසි රැසක් ලබා දෙයි" සඳහා ඇති වාසි කිහිපයක් ඔබට පැවසිය හැකිද?
මනිරාජ් එස්එස්

2
ඔහු අදහස් කළේ මෙයයි. var id = ආයතන. හැඳුනුම්පත ලබා ගැනීම සඳහා නිධිය සහ අතුරු මුහුණත. B මඟින් විමසුම් තර්කනය ලිවීමට හැකි වන පරිදි නිධිය වෙතින්
ආයතනික

14

න්‍යාය අනුව, දත්ත සමුදා සම්බන්ධතා තර්කනය වඩාත් පහසුවෙන් නැවත භාවිතා කළ හැකි වන පරිදි සංයුක්ත කිරීම අර්ථවත් යැයි මම සිතමි, නමුත් පහත සබැඳිය තර්ක කරන පරිදි, අපගේ නූතන රාමු මූලිකවම මේ ගැන සැලකිලිමත් වේ.

නිධිය රටාව නැවත සලකා බැලීම


මම ලිපියට කැමතියි, නමුත් ව්‍යවසාය යෙදුම් සඳහා IMHO, DAL සහ Bl අතර වියුක්ත ස්තරය තිබිය යුතුය, හෙට කුමක් භාවිතා වේදැයි ඔබට හරියටම දැනගත නොහැකි විය. නමුත් සබැඳිය බෙදා ගැනීම ගැන ස්තූතියි

1
පෞද්ගලිකව මම එය උදා NHibernate (සත්ය හිතන්නේ අතර ISessionFactoryහා ISessionපහසුවෙන් mockable වේ), එය සමඟ ලේසි නැහැ DbContext, අවාසනාවකට මෙන් ...
Patryk Ćwiek

6

නිධිය රටාව භාවිතා කිරීමට ඉතා හොඳ හේතුවක් වන්නේ ඔබේ ව්‍යාපාර තර්කනය සහ / හෝ ඔබේ UI System.Data.Entity වෙතින් වෙන් කිරීමට ඉඩ දීමයි. ව්‍යාජ හෝ විහිළු භාවිතා කිරීමට ඉඩ දීමෙන් ඒකක පරීක්ෂණයේ සැබෑ ප්‍රතිලාභ ඇතුළුව මෙයට බොහෝ වාසි ඇත.


මම මෙම පිළිතුර සමඟ එකඟ වෙමි. මගේ ගබඩාවන් මූලික වශයෙන් හුදෙක් ව්‍යාප්ති ක්‍රම වන අතර ඒවා ප්‍රකාශන ගස් සෑදීම හැර වෙන කිසිවක් නොකරයි. ඉතා සරල වියුක්තයක් හරහා dbcontext හි මුදුනට සෘජුවම සාමාන්‍ය ක්‍රියාකාරිත්වය සපයයි. වියුක්ත කිරීමේ එකම සැබෑ අරමුණ වන්නේ IoC ටිකක් පහසු කිරීමයි. මම හිතන්නේ මිනිසුන් තම ගබඩාවල නොකළ යුතු දේ කිරීමට උත්සාහ කරයි. ඔවුන් එක් ආයතනයකට රෙපෝ එකක් සාදයි, නැතහොත් සේවා ස්ථරයේ තිබිය යුතු ව්‍යාපාර තර්කනය එහි තබයි. ඔබට අවශ්‍ය වන්නේ එක් සරල ජනක නිධියක් පමණි. එය අවශ්‍ය නොවේ, ස්ථාවර අතුරු මුහුණතක් සපයයි.
බ්‍රැන්ඩන්

මට එකතු කිරීමට අවශ්‍ය තවත් දෙයක්. ඔව්, CQRS යනු බොහෝ අවස්ථාවන්හීදී වඩා උසස් ක්‍රමවේදයකි. සමහර සේවාදායකයින් සඳහා, දත්ත සමුදායන් සංවර්ධකයින් සමඟ හොඳින් වැඩ නොකරන විට (විශේෂයෙන් බැංකුවල සිතනවාට වඩා බොහෝ විට සිදු වේ), SQL හරහා EF හොඳම විකල්පය වේ. එම විශේෂිත අවස්ථාවෙහිදී, ඔබේ දත්ත සමුදාය පාලනය කිරීමට ඔබට කිසිදු පාලනයක් නොමැති විට, නිධිය රටාව අර්ථවත් කරයි. මන්ද දත්ත ව්‍යුහයට සමීපව සමාන වන අතර දත්ත සමුදායට සිදුවන දේ පරිවර්තනය කිරීම පහසුය. එය ඇත්ත වශයෙන්ම මගේ මතය අනුව දේශපාලන හා සැපයුම් තීරණයක්. ඩීබී දෙවිවරුන් සතුටු කිරීම සඳහා.
බ්‍රැන්ඩන්

1
මම ඇත්ත වශයෙන්ම මේ පිළිබඳව මගේ කලින් අදහස් ප්‍රශ්න කිරීමට පටන් ගෙන ඇත්තෙමි. EF යනු ඒකාබද්ධ වැඩ ඒකකය සහ නිධිය රටාවකි. ක්‍රිස් ප්‍රට් ඊඑෆ් 6 සමඟ ඉහත සඳහන් කළ පරිදි ඔබට පහසුවෙන් සන්දර්භය සහ ඩීබීසෙට් වස්තු සමච්චලයට ලක් කළ හැකිය. ව්‍යාපාර තාර්කික පංති තථ්‍ය දත්ත ප්‍රවේශ යාන්ත්‍රණයෙන් ආරක්ෂා කර ගැනීම සඳහා දත්ත ප්‍රවේශය පංතිවලට ඔතා තිබිය යුතු යැයි මම තවමත් විශ්වාස කරමි, නමුත් සමස්ත හොග් වෙත ගොස් ඊඑෆ් වෙනත් ගබඩාවක් සමඟ එතීම සහ වැඩ කිරීමේ සාරාංශය අතිරික්තයක් ලෙස පෙනේ.
ජේම්ස් කුල්ෂෝ

මෙය හොඳ පිළිතුරක් යැයි මම නොසිතමි, මන්ද ඔබේ සහායක ප්‍රකාශය ලැයිස්තුගත කිරීමේදී පමණක් වාසි රාශියක් ඇති බැවිනි. ඔබ ලැයිස්තුගත කරන එක හොඳ හේතුවක් නොවේ, මන්ද ඔබට මතක තබා ගැනීමට දත්ත ගබඩාවක් භාවිතා කළ හැකි බැවිනි. ඒකක පරීක්ෂණ.
ජොයෙල් මැක්බෙත්

cjcmcbeth ඔබ මගේ අදහස කෙලින්ම ඔබේ ඉහළින් බැලුවහොත් ඔබට පෙනෙනු ඇත මම නිධිය රටාව සහ ඊඑෆ් සම්බන්ධයෙන් මගේ මුල් මතය වෙනස් කර ඇති බව.
ජේම්ස් කුල්ෂෝ

0

අයි.ඕ.සී බහාලුමක් එක් වර්ගයකට නව () ඉහළ නිධි (උදාහරණයක් ලෙස පරිශීලක ගබඩාවක් සහ ඩී.බී.සී.කොන්ටෙක්ස්ට් වෙතින් තමන්ගේම අයිඩීබීසෙට් යනුවෙන් හඳුන්වන කණ්ඩායම් නිධිය නිදසුනක්), සමහර විට ඉල්ලීමකට විවිධ සන්දර්භයන් ඇති කළ හැකි විට, අනුපිටපත් නමුත් වෙනස් ආයතන රාමුවක් සමඟ අපට ගැටලු තිබේ. (MVC / වෙබ් සන්දර්භය තුළ).

බොහෝ විට එය තවමත් ක්‍රියාත්මක වේ, නමුත් ඔබ ඊට ඉහළින් සේවා තට්ටුවක් එක් කළ විට සහ එම සේවාවන් එක් සන්දර්භයක් සමඟ නිර්මාණය කරන ලද වස්තූන් වෙනත් සන්දර්භයක නව වස්තුවකට ළමා එකතු කිරීමක් ලෙස නිවැරදිව සම්බන්ධ වනු ඇතැයි උපකල්පනය කළ විට, එය සමහර විට අසමත් වන අතර සමහර විට එසේ නොවේ. t වල වේගය අනුව.


විවිධ ව්‍යාපෘති කිහිපයකදීම මට මෙම ගැටලුව ඇතිවිය.
කොලැක්ස්

0

කුඩා ව්‍යාපෘතියක් සඳහා නිධිය රටාවක් අත්හදා බැලීමෙන් පසු එය භාවිතා නොකරන ලෙස මම තරයේ අවවාද කරමි. එය ඔබේ පද්ධතිය අවුල් කරන නිසා නොව, දත්ත සමච්චල් කිරීම නපුරු සිහිනයක් නිසා නොව, ඔබේ පරීක්ෂණය නිෂ් less ල වන නිසා නොවේ !!

දත්ත සමච්චලයට ලක් කිරීම මඟින් ඔබට ශීර්ෂයන් නොමැතිව විස්තර එක් කිරීමට, දත්ත සමුදායේ සීමාවන් උල්ලං that නය කරන වාර්තා එකතු කිරීමට සහ දත්ත සමුදාය ඉවත් කිරීම ප්‍රතික්ෂේප කරන ආයතන ඉවත් කිරීමට ඉඩ ලබා දේ. තථ්‍ය ලෝකයේ තනි යාවත්කාලීනයක් බහු වගු, ල logs ු-සටහන්, ඉතිහාසය, සාරාංශ යනාදිය මෙන්ම අවසාන වරට වෙනස් කරන ලද දින ක්ෂේත්‍රය, ස්වයංක්‍රීයව ජනනය කරන ලද යතුරු, ගණනය කළ ක්ෂේත්‍ර වැනි තීරු වලට බලපායි.

කෙටියෙන් ඔබේ දත්ත තාත්වික දත්ත ගබඩාවේ ධාවනය කිරීමෙන් ඔබට සැබෑ ප්‍රති results ල ලබා ගත හැකි අතර ඔබේ සේවාවන් සහ අතුරුමුහුණත් පමණක් නොව දත්ත සමුදායේ හැසිරීමද පරීක්ෂා කළ හැකිය. ඔබගේ ගබඩා කර ඇති ක්‍රියා පටිපාටීන් දත්ත සමඟ නිවැරදි දේ කරයිද, අපේක්ෂිත ප්‍රති result ලය ලබා දෙයිද, නැතහොත් මකා දැමීමට ඔබ එවූ වාර්තාව සැබවින්ම මකා දමා ඇත්දැයි ඔබට පරීක්ෂා කළ හැකිය! ගබඩා කරන ලද ක්‍රියාපටිපාටියෙන් දෝෂ මතු කිරීමට අමතක වීම සහ එවැනි අවස්ථා දහස් ගණනක් වැනි ගැටළු ද එවැනි පරීක්ෂණ මගින් හෙළි කළ හැකිය.

මා සිතන්නේ, මෙතෙක් මා කියවා ඇති ඕනෑම ලිපියකට වඩා ආයතන රාමුව නිධිය රටාව ක්‍රියාත්මක කරන අතර එය ඔවුන් ඉටු කිරීමට උත්සාහ කරන දෙයට වඩා බොහෝ සෙයින් වැඩි ය.

අප එක්ස්බේස්, ඇඩෝඑක්ස් සහ ඇඩෝ.නෙට් භාවිතා කළ දිනවල නිධිය වඩාත් හොඳ පුරුද්දක් විය. (නිධිය හරහා නිධිය)

අවසාන වශයෙන් මම සිතන්නේ බොහෝ අය නිධිය රටාව ඉගෙන ගැනීමට සහ ක්‍රියාත්මක කිරීමට බොහෝ කාලයක් ආයෝජනය කරන අතර ඔවුන් එයට ඉඩ දීම ප්‍රතික්ෂේප කරති. බොහෝ විට තමන් කාලය නාස්ති නොකළ බව තමන්ටම ඔප්පු කර ගැනීමට.


1
ඔබේ දත්ත ගබඩාවේ හැසිරීම ඒකක පරීක්ෂණ වලදී පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නොවන බව හැර, එය සම්පූර්ණයෙන්ම එම මට්ටමේ පරීක්ෂණ නොවේ.
මාරියස් ජම්රෝ

ඔව්, ඔබ මෙහි කතා කරන්නේ අනුකලනය පරීක්ෂා කිරීම වන අතර එය සැබවින්ම වටිනා ය, නමුත් ඒකක පරීක්ෂණ සම්පූර්ණයෙන්ම වෙනස් ය. ඔබේ ඒකක පරීක්ෂණ කිසි විටෙක සත්‍ය දත්ත ගබඩාවකට නොපැමිණිය යුතුය, නමුත් එය සිදු කරන ඒකාබද්ධතා පරීක්ෂණ එකතු කිරීමට ඔබව දිරිමත් කරනු ලැබේ.
ක්‍රිස් ප්‍රට්

-3

සංක්‍රමණ හේතුවෙන් එය සිදුවී ඇත: සම්බන්ධක නූල web.config හි පිහිටා ඇති බැවින්, සංක්‍රමණ වැඩට ගැනීමට නොහැකි ය. නමුත්, DbContext නිධිය ස්ථරයේ වාසය කරයි. IDbContextFactory හට දත්ත සමුදායට වින්‍යාස කිරීමේ නූලක් තිබිය යුතුය .නමුත් සංක්‍රමණිකයින්ට web.config වෙතින් සම්බන්ධතා නූල ලබා ගත හැකි ක්‍රමයක් නොමැත.

අවට වැඩ ඇතත් මේ සඳහා පිරිසිදු විසඳුමක් මට තවම හමු වී නැත!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.