none
מה הגישה הטובה ביותר ליצירת CRUD-ים? RRS feed

  • שאלה

  • שלום,

    אנחנו עובדים עם .net framework, הצורה שהDATABASE כתוב הוא EF CODE FIRST.

    השרת שלנו הוא ASP.NET WEB API וצד הקליינט שלנו הוא אנגולר.

    במהלך הפיתוח השתמשנו בCRUD עם אוביקטי עזר-כל הזמן היתה לנו המרה ל2 הכיוונים והקוד לא ממש היה ברור וגם קשה לתחזוקה.

    אנחנו רוצים להשתפר בזה ולכן החלטנו לבדוק מה הBEST PRACTICE לשמירה לDB-

    ראינו שיש דרך להשתמש בENTITIES עצמם ויש אפשרות דרך DTO-אבל עדיין לא ברור לנו מה הכי טוב לשימוש.

    נודה אם תוכלו לעזור ולתת לנו כיוון כללי איך צריך לכתוב את הCRUD-ים.

    כמו כן האוביקטים שלנו גדולים ודי מסורבלים ולכן כשניסינו לעבוד עם הENTITIES ושלפנו אוביקטים לצורך תצוגה בשמירה הוא ניסה לשמור את את האוביקטים האלו והיינו צריכים לעבור על האוביקטים אחד אחד ולשנות להם את הSTATE, ולכן הקוד נהיה גם כן קשה לתחזוקה,נשמח אם תוכלו להבהיר גם במקרים כאלו מה הגישה הנכונה

    תודה רבה

    יום רביעי 30 דצמבר 2020 08:07

תשובות

  • היי,

    על מנת שנוכל לעזור בצורה הטובה ביותר, אשמח אם תוכלו להראות חלק מהטיפוסים שאתם שומרים ואיך הם שמורים, כמו כן, אולי גם את הסכמה של מסד הנתונים.

    בכל מקרה, ה- best practice הוא להפריד בין הטיפוסים שמשתמשים בהם בפועל לאחסון הנתונים, במילים אחרות ה- models או ה- entities של Entity Framework (למשל) לבין האוביקטים שהם חלק מה- Contract שלכם ב- WebApi.

    המטרה היא לעשות הפרדה בין המימוש שלכם (סוג ה- DB, השימוש ב- EF וכו) לבין "החוזה" שלכם מול אחרים ב- Web API.

    נשמע שהגישה הראשונית שלכם הייתה טובה אך אולי ניתן לשפר את המימוש כדי למנוע את הבעיות שדיברת עליהם. בלי לראות את הקוד יהיה קשה לעשות את זה :)

    יום רביעי 30 דצמבר 2020 19:26

כל התגובות

  • היי,

    על מנת שנוכל לעזור בצורה הטובה ביותר, אשמח אם תוכלו להראות חלק מהטיפוסים שאתם שומרים ואיך הם שמורים, כמו כן, אולי גם את הסכמה של מסד הנתונים.

    בכל מקרה, ה- best practice הוא להפריד בין הטיפוסים שמשתמשים בהם בפועל לאחסון הנתונים, במילים אחרות ה- models או ה- entities של Entity Framework (למשל) לבין האוביקטים שהם חלק מה- Contract שלכם ב- WebApi.

    המטרה היא לעשות הפרדה בין המימוש שלכם (סוג ה- DB, השימוש ב- EF וכו) לבין "החוזה" שלכם מול אחרים ב- Web API.

    נשמע שהגישה הראשונית שלכם הייתה טובה אך אולי ניתן לשפר את המימוש כדי למנוע את הבעיות שדיברת עליהם. בלי לראות את הקוד יהיה קשה לעשות את זה :)

    יום רביעי 30 דצמבר 2020 19:26
  • לגבי הDB-אני אצטרך לבדוק אם יש אופציה להעלות את זה.

    לגבי הbest practice- במקרה שלנו אנחנו באמת משתמשים באוביקטים אחרים בwebapi אבל מה שמציק לנו זה שאנחנו לכל אוביקט צריכים לעשות CRUD- אין CRUD גנרי לכולם למרות שברוב המקרים המבנה של האוביקט הוא די תואם למבנה של הרשומה במסד הנתונים.

    במקרה כזה ברגע שמוסיפים רשומות בטבלאות צריך גם לתחזק אותם בצד של השרת וזה מרגיש לנו די מסורבל,

    בנוסף אנחנו לא משתמשים 100% במנגנון של הtrack של ef-אם היינו משתמשים בEntity עצמו זה בוודאות היה משתמש ביכולת של הEF כדי לזהות את השינוי ולחסוך לנו את כל הקוד הכפול.

     האם זו הדרך האידאלית או שיש דרך לשפר את זה?

    נשמח אם תוכל להסביר את העיקרון של איך הCRUD-ים אמורים להיות בנויים או לשלוח קישור המבהיר זאת כדי שנוכל לדעת אם בדרך של השימוש שלנו קצת סטינו מהbest practice

    בעיקרון ככה כרגע אנחנו עובדים-הCRUD עצמו עובד רק עם הרשומות של הDB, רמה מעליו אנחנו שמים MODULE שהוא אחראי לטפל באוביקטים היותר מורכבים ולשלוח לCRUD. בו (בMODULE) מתבצעת ההמרה או הפניה להמרה של האוביקטים המורכבים יותר, הוא מחזיר תשובה לCONTROLLER של הWEBAPI וככה זה מגיע לסרבר, יש לנו המון MODULE-ים וגם המון CRUD-ים (אחד עבור כל טבלה), אתה רואה דרך ליעל את זה?


    • נערך על-ידי 1234ctk יום רביעי 30 דצמבר 2020 21:45
    יום רביעי 30 דצמבר 2020 21:42