اضافه کردن عکس های محصول
سلام
استاد من میخوام تو پنل ادمین وقتی یه محصول میخواد ثبت شه، همون اول هم بتونه تمام عکس های محصول رو ثبت کنه، حالا عکس های این محصول ProductImage هست که توی خودش یه ProductId داره، بعد لحظه ساخت محصول، آیدیه اون محصول هنوز Null هست، من چجوری باید این عکس هاش رو بسازم و آیدی هاشونو ست کنم؟
پاسخ ها
محمد اشرافی
سلام
۲ راه دارید ، یا id رو توی برنامه بسازید که مطمعا ترین روش ساخت توی برنامه استفاده از guid ه
یا اینکه از روش های وابسته به دیتابیس استفاده کنید که بهترین راه برای این روش استفاده از الگوی hi/lo ه
Guid که مشخصه چطور باید ازش استفاده کنید
برای استفاده از Hi Lo ام باید یه چن خط کد توی context قرار بدین
رفتم پشت سیستم نمونه کد مربوط به hi lo رو براتون ارسال میکنم
محمد اشرافی
برای هر تیبلی که می خواید id ایش به این شکل ساخته بشه باید این کد رو توی context قرار بدین :
modelBuilder.HasSequence<long>("CourseHiLoSequence")
.IncrementsBy(1).StartsAt(1);
و بعد اینو هم به تنظیمات Aggregateroot بدین :
builder.Property(b => b.Id).UseHiLo("CourseHiLoSequence");
در این صورت هر موقع متد Add رو صدا بزنید id ساخته میشه و به entity اختصاصا داده میشه
var product=new product(...);
await _repository.addAsync(product);
product.addImages(...);
await _repository.save();
فقط توجه کنید حتما متد addAsync رو صدا بزنید
bzmind
خیلی ممنون استاد، بعد چرا حتما async باید باشه؟
محمد اشرافی
چون قراره بره id بعدی رو از دیتابیس بگیره و قرار بده توی entity - گفتیم که کارای دیتابیسی یا کارهای io ای یا کارهایی که قراره با شبکه ارتباط داشته باشن و … رو باید از async استفاده کنیم که thread اشغال نشه و اینکه توی این حالت برای addAsync مطمعا میشیم که id رو بهمون برمیگردونه
bzmind
استاد ببخشید، یه توضیحی هم از خود الگوریتم HiLo میدید لطفا؟ من سرچ زدم ولی منبع هم زیاد نیست انگار، چنتا سایت بود همشونو خوندم، چیز زیادی نگرفتم ازشون 😶 ویدئو تو یوتیوب چیزی پیدا نکردم، یه توضیح بدید اصلا الگوریتمش چطوریه، چجوری کار میکنه، خیلی ممنون.
محمد اشرافی
https://www.aparat.com/v/1nef5
توی این ویدئو کامل درموردش توضیح داده
bzmind
ممنون استاد، اپارات رو چک نکرده بودم 😂
بعد یه چیزی، که زیادم مربوط نیست به این سوال ولی میخواستم دلیلشو بدونم، دیگه همینجا میپرسمش، ببخشید 😬
من چند روز پیش یه سوال دیگه پرسیده بودم، این سوال:
https://codeyad.com/questions/show/4015/%D9%85%DA%A9%D8%A7%D9%86-%D8%B3%D8%A7%D8%AE%D8%AA%D9%86-%D8%A2%D8%A8%D8%AC%DA%A9%D8%AA-%D9%87%D8%A7%DB%8C-%D9%84%D8%A7%DB%8C%D9%87-domain-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-cqrs
و شما گفتید که باید آبجکت های Domain رو داخل خود اگریگیت روت بسازیم، ن داخل CommandHandler ها، ولی من یادم رفت دلیلشو بپرسم، چرا بهتره که توی خود Domain اینها ساخته بشن؟
محمد اشرافی
خواهش میکنم
نه بایدی وجود نداره شما میتونید از همون روش استفاده کنید ، یه جور discipline ه که من ازش پیروی میکنم ، ممکنه شما تمام مقادیر اون Entity رو لازم نداشته باشید بگیرید و یکسری از اونا توی خود Aggregate root باید پر بشن ،
و دلیل بعدیم اینه که برام خیلی جالب نیست که از entity هام توی جاهای مختلف نمونه سازی کنم
bzmind
خیلی ممنون استاد.