Pure Coder
هاه.. اومدم یه سوال ساده الگوریتمی در حوزه ارایهها حل کنم ولی راستش رو بخواین اگر خودم با خودم مصاحبه میکردم، نمره قبولی نمی دادم ((: https://youtu.be/Xne03-Owc84
جادی شروع کرده توی یوتیوبش مسائل الگوریتمی حل میکنه و هر چند وقت یه بار یه قسمت جدید میذاره
حتمن دنبال کنید
خودم فرصت و حوصله کنم حتمن پیگیری میکنم ...
حتمن دنبال کنید
خودم فرصت و حوصله کنم حتمن پیگیری میکنم ...
🔥implicit cast
یکی از امکاناتی که توی سی شارپ هست و خیلی جاها کاربردیه و اگه دارت هم چنین چیزی اضافه کنه خیلی خوب میشه implicit cast هست:
یکی از امکاناتی که توی سی شارپ هست و خیلی جاها کاربردیه و اگه دارت هم چنین چیزی اضافه کنه خیلی خوب میشه implicit cast هست:
public static implicit operator Result<T, E>(T value)
{
return Result.Success<T, E>(value);
}
public static implicit operator Result<T, E>(E error)
{
return Result.Failure<T, E>(error);
}
// Usage
public static Result<Money, Error> Create(long amount)
{
if (amount < 0)
return new MoneyAmountIsNegative();
return new Money(amount);
}
Forwarded from OOD Part 1
سوال
اگه معماری کلین رو به یاد داشته باشی یه دونه کلاس abstract یا اینترفیس برای یوزکیس ها میساختیم که جنریک هم بود
بعد هر کلاسی این رو impl میکرد تایپ. Tinput رو مشخص میکرد.
فرض کن بجای این اینترفیس این مدلی عمل کینم:
ینی برای input جنریک در نظر نگیریم و اونو از جنس object بگیریم
حالا کلاسی که پیاده سازیش میکنه اینجوری عمل میکنه
ینی وروی جنس ابجکت رو به جنس دلخواه خودش cast میکنه تا بتونه باهاش کار کنه..
❓اینجا کدوم اصل سالید نقض شده ؟
😁به نام گذاری ها و ...گیر ندید..کد رو توی تلکرام نوشتم
فقط سوال رو جواب بدید😁
اگه معماری کلین رو به یاد داشته باشی یه دونه کلاس abstract یا اینترفیس برای یوزکیس ها میساختیم که جنریک هم بود
interface class Usecaee<TInput, TResult>{
Future<TResult> execute(TInput input);
}
بعد هر کلاسی این رو impl میکرد تایپ. Tinput رو مشخص میکرد.
فرض کن بجای این اینترفیس این مدلی عمل کینم:
interface class Usecaee< TResult>{
Future<TResult> execute(object input);
}
ینی برای input جنریک در نظر نگیریم و اونو از جنس object بگیریم
حالا کلاسی که پیاده سازیش میکنه اینجوری عمل میکنه
class AddNewProductCategory implements Usecase<void> {
Futue<void> execute(object input) {
var params = input as AddNewCategoryParams;
}
}
ینی وروی جنس ابجکت رو به جنس دلخواه خودش cast میکنه تا بتونه باهاش کار کنه..
❓اینجا کدوم اصل سالید نقض شده ؟
😁به نام گذاری ها و ...گیر ندید..کد رو توی تلکرام نوشتم
فقط سوال رو جواب بدید😁
Pure Coder
سوال اگه معماری کلین رو به یاد داشته باشی یه دونه کلاس abstract یا اینترفیس برای یوزکیس ها میساختیم که جنریک هم بود interface class Usecaee<TInput, TResult>{ Future<TResult> execute(TInput input); } بعد هر کلاسی این رو impl میکرد تایپ. Tinput رو…
جواب اصل سوم بود
Liskov Substitution
هیچکس جدیش نمیگیره این بچه رو 😂😂
Liskov Substitution
هیچکس جدیش نمیگیره این بچه رو 😂😂
مهمترین اصلی که هر برنامه نویسی باید همه جا جلوی چشمش باشه YAGNI هست
You Aren't gonna need it.
خیلی خیلی میبینیم که طرف به بهونه رعایت DIP (اص 5 سالید) توی پروژش برای هر کلاسی یه اینترفیس هم میزنه:
One interace
One implementation
یه دونه اینترفیس و فقط یه دونه implementation.
مثلن
ProductRepositpryInterface
ProductRepositpryimpl
ProductDatasourceInterface
ProductDatasourceImpl
😱😱😱😱😱😱😱
یا مثلن میبینیم که یه Repository میخواد بنویسه و مثلن چندین متد داخلش بگذاره:
getById
getAll
getWhere
save
...
و برای هر کدوم این متد ها یه اینترفیس جدا میزنه و میگه میخوام ISP (اصل 4 سالید) رو رعایت کنم!!
خب با رعایت کردنش میخوای چه چیزی رو بدست بیاری؟😅
این اصول رو که برای قشنگی ابداع نکردن که مثل نقل و نبات بریزیم توی کدمون😅
باید نیاز بشه تا استفاده کنیم و هر کدوم جایگاه خودشون رو دارن و استفاده ی بی مورد بدتر complexity پروژه رو بیشتر میکنه.
نکنید آقا نکنید 😅😅
@purecoder_ir
You Aren't gonna need it.
خیلی خیلی میبینیم که طرف به بهونه رعایت DIP (اص 5 سالید) توی پروژش برای هر کلاسی یه اینترفیس هم میزنه:
One interace
One implementation
یه دونه اینترفیس و فقط یه دونه implementation.
مثلن
ProductRepositpryInterface
ProductRepositpryimpl
ProductDatasourceInterface
ProductDatasourceImpl
😱😱😱😱😱😱😱
یا مثلن میبینیم که یه Repository میخواد بنویسه و مثلن چندین متد داخلش بگذاره:
getById
getAll
getWhere
save
...
و برای هر کدوم این متد ها یه اینترفیس جدا میزنه و میگه میخوام ISP (اصل 4 سالید) رو رعایت کنم!!
خب با رعایت کردنش میخوای چه چیزی رو بدست بیاری؟😅
این اصول رو که برای قشنگی ابداع نکردن که مثل نقل و نبات بریزیم توی کدمون😅
باید نیاز بشه تا استفاده کنیم و هر کدوم جایگاه خودشون رو دارن و استفاده ی بی مورد بدتر complexity پروژه رو بیشتر میکنه.
نکنید آقا نکنید 😅😅
@purecoder_ir
Forwarded from Fluttery's Journey
ویجت تری و المنت تری و رندر تری نمادینی که توی فصل 4 دوره میسازیم و از راس درخت تا پایین دونه دونه المنت ها رو میسازیم و پایین میایم و لایف سایکلشون رو بررسی میکنیم.
این یه دیاگرام نمادین برای درک بهتر و کم کردن پیچیدگی هست.
توی فصل های بعدی یه مثال واقعی از یه ویجت تری واقعی هم میزنیم.
@Fluttery_journey
این یه دیاگرام نمادین برای درک بهتر و کم کردن پیچیدگی هست.
توی فصل های بعدی یه مثال واقعی از یه ویجت تری واقعی هم میزنیم.
@Fluttery_journey
۲۰ و چند سال پیش که هنوز جاوا و سی شارپ Generic Type نداشتن، چقد برنامه نویس ها بدبخت بودن 😂😂😂
Forwarded from Fluttery's Journey
یه issue ای که قبلن توی فلاتر باز کرده بودم مربوط به این بود که MultiChildRenderObjectWidget ها const constructor نداشتن و خیلی سرسختی میکردن که اینو برطرفش کنن ولی خب دیگه برطرفش کردن:
https://github.com/flutter/flutter/issues/95179
برطرف کردنش خیلی راحت بود ولی موضوع این بود که خیلی از پروژه ها break میشد.
@Fluttery_journey
https://github.com/flutter/flutter/issues/95179
برطرف کردنش خیلی راحت بود ولی موضوع این بود که خیلی از پروژه ها break میشد.
@Fluttery_journey
GitHub
we can't use the `const` keyword for `MultiChildRenderObjectWidget`s · Issue #95179 · flutter/flutter
in Flutter widgets are immutable and they often have const constructor.but for MultiChildRenderObjectWidgets we can't use const keyword because its constructor has a body and it can't have ...
Forwarded from Fluttery's Journey
یه issue دیگه مربوط به Column و row هست که 3 سالع اینو باز کردم و هنوز close نشده
مشکل مربوط به render object اشون هست و خودم میتونم درستش کنم و pull request بزنم ولی حوصلشو ندارم😂😂
https://github.com/flutter/flutter/issues/95398
@Fluttery_journey
مشکل مربوط به render object اشون هست و خودم میتونم درستش کنم و pull request بزنم ولی حوصلشو ندارم😂😂
https://github.com/flutter/flutter/issues/95398
@Fluttery_journey
GitHub
`RenderFlex` computes `intrinsic sizing` and `dryLayout` incorrectly in some cases. · Issue #95398 · flutter/flutter
As we know,RenderBox objects must implement intrinsic sizing and computeDryLayout.In some cases a RenderBox can't calculate computeDryLayout or intrinsic sizing without doing a full layout.For ...
🔥چالش
اگه یه معماری سه لایه ای داشته باشیم
✅Domain
✅Data souce
✅Presentation
فرض کنید محصولات رو با قیمت دلاری شون توی دیتابیس ثبت کردید ولی موقع نمایش به کاربر باید اونو به واحد پولی کشور محل زندگی کاربر تبدیل کنید
حالا توی یه یوزکیس میخوایم لیستی از پروداکت ها رو از دیتابیس بگیریم و به کاربر نشون بدیم
فرایند تبدیل currency از USD (که توی دیتابیس ثبت شده) به currency مورد نظر جزو کدوم یک از لاجیک های زیر بحساب میاد ؟
❓Domain logic
❓Data source logic
❓presentation logic
@purecoder_ir
اگه یه معماری سه لایه ای داشته باشیم
✅Domain
✅Data souce
✅Presentation
فرض کنید محصولات رو با قیمت دلاری شون توی دیتابیس ثبت کردید ولی موقع نمایش به کاربر باید اونو به واحد پولی کشور محل زندگی کاربر تبدیل کنید
حالا توی یه یوزکیس میخوایم لیستی از پروداکت ها رو از دیتابیس بگیریم و به کاربر نشون بدیم
فرایند تبدیل currency از USD (که توی دیتابیس ثبت شده) به currency مورد نظر جزو کدوم یک از لاجیک های زیر بحساب میاد ؟
❓Domain logic
❓Data source logic
❓presentation logic
@purecoder_ir
🔥چالش
اگه بخوایم قبل از همه ی سرویس هایی که توی اپمون اجرا میشن, Network connectivity رو چک کنیم و در صورت نداشتن connection یه کار خاص انجام بدیم و درصورت برقرار بودنش هم سرویس مورد نظر به کارش ادامه بده...
این یکی جزو کدوم یک از لاجیک های زیر بحساب میاد؟
❓Domain logic
❓Data source logic
❓presentation logic
@purecoder_ir
اگه بخوایم قبل از همه ی سرویس هایی که توی اپمون اجرا میشن, Network connectivity رو چک کنیم و در صورت نداشتن connection یه کار خاص انجام بدیم و درصورت برقرار بودنش هم سرویس مورد نظر به کارش ادامه بده...
این یکی جزو کدوم یک از لاجیک های زیر بحساب میاد؟
❓Domain logic
❓Data source logic
❓presentation logic
@purecoder_ir
اگه دعوا نمیکنید ( مهم هم نیست البته برام 😂) آپ های موبایل که بیزینس چندانی ندارن و همه چیزشون سمت سرور هندل میشه میتونن کلن کلاس هایی با اسم Entity و model رو هیچ کدوم رو نداشته باشن و فقط یه view model داشته باشن و تمام ...و view model هم اختصاص داره به UI و اصلن شبیه جیسونی که از API میاد نیست
@purecoder_ir
@purecoder_ir
Forwarded from آموزش فلاتر و دارت
خب بعد از وقفه حدودا یک ماهه میخوایم دوباره سه شنبه هفته آینده دورهمی برگذار کنیم
موضوعش هم خیلی جالبه درمورد انواع معماری ها توی موبایل و فرانت و بکند هستش و بببینیم چطوری میتونیم یک معماری خوب رو برای پروژه خودمون انتخاب کنیم
برای شرکت توی دورهم میتونید از فرم زیر اقدام کنید (کاملا رایگان)
https://forms.gle/g24gHfpGegs1vvAr5
موضوعش هم خیلی جالبه درمورد انواع معماری ها توی موبایل و فرانت و بکند هستش و بببینیم چطوری میتونیم یک معماری خوب رو برای پروژه خودمون انتخاب کنیم
برای شرکت توی دورهم میتونید از فرم زیر اقدام کنید (کاملا رایگان)
https://forms.gle/g24gHfpGegs1vvAr5
Google Docs
دومی سه شنبه ها دورهمی آزاد برنامه نویسی
انواع معماری ها در موبایل و بکند نحویه انتخاب بهترین معماری برای پروژه خودمون (میزبانان جواد زبیدی ، محمد طاهری)
MVC
توسط ایشون ابداع شده توی دهه ی 70 میلادی😅😅 (بیشتر ار 40 سال پیش)
همین چند وقت پیش توی سن 93 سالگی مرد...
برای UI Framework طراحی شده... اگه فکر میکردید که MVC برای بکند ابداع شده, اشتباه فکر میکردید..اولش برای UI فریمورک بوده
البته اون MVC با این MVC که امروزه به اسم MVC جا افتاده فرق داره
@purecoder_ir
توسط ایشون ابداع شده توی دهه ی 70 میلادی😅😅 (بیشتر ار 40 سال پیش)
همین چند وقت پیش توی سن 93 سالگی مرد...
برای UI Framework طراحی شده... اگه فکر میکردید که MVC برای بکند ابداع شده, اشتباه فکر میکردید..اولش برای UI فریمورک بوده
البته اون MVC با این MVC که امروزه به اسم MVC جا افتاده فرق داره
@purecoder_ir
دیزاین پترن ها فقط اون ۲۳-۲۴ نیستن
بهتره به اون ها بگیم gof patterns ...
به خیلی چیز ها میشه گفت دیزاین پترن...هر چند که gof pattern ها معروفن به دیزاین پترن ...خیلی پترن ها توی دسته بندی gof patterns نیومدن ...
و هر چند gof pattern ها object oriented pattern ها هستن ولی باز هم هستن OO pattern هایی که توی این دسته بندی ذکر نشدن.
اسم gof pattern اسمی بهتر و توی منابع رسمی پر کاربردتره
@purecoder_ir
بهتره به اون ها بگیم gof patterns ...
به خیلی چیز ها میشه گفت دیزاین پترن...هر چند که gof pattern ها معروفن به دیزاین پترن ...خیلی پترن ها توی دسته بندی gof patterns نیومدن ...
و هر چند gof pattern ها object oriented pattern ها هستن ولی باز هم هستن OO pattern هایی که توی این دسته بندی ذکر نشدن.
اسم gof pattern اسمی بهتر و توی منابع رسمی پر کاربردتره
@purecoder_ir
Pure Coder
🔥چالش اگه یه معماری سه لایه ای داشته باشیم ✅Domain ✅Data souce ✅Presentation فرض کنید محصولات رو با قیمت دلاری شون توی دیتابیس ثبت کردید ولی موقع نمایش به کاربر باید اونو به واحد پولی کشور محل زندگی کاربر تبدیل کنید حالا توی یه یوزکیس میخوایم لیستی…
🔥چالش تبدیل پول ها بهم
برای تبدیل واحد های پولی به هم نیاز به دیتا داریم
برای مثال قیمت محصول به دلار توی دیتابیس ثبت شده و کاربر میخواد اون رو به ریال ببینه
دیتاهایی که اینجا لازمه یکی واحد پولی مورد نظر یا ثبت شده برای کاربر هست و یکی نرخ تبدیل دلار به ریال
برای فراهم کردن دیتا به دیتاسورس نیاز داریم
ولی به محض فراهم شدن دیتا, پروسه ی تبدیل توی Domain انجام میشه
پ.ن: منظورم از Domain سرویس ها(یوزکیس ها) نیستن.
توی این پروسه عناصر مختلفی درگیر میشن.
سرویس (یوزکیس) کار coordination بین دیتاسورس و Domain object ها رو انجام میده و دیتای مورد نیاز domain object ها رو از دیتاسورس میگیره و بهشون میده تا domain object ها کار تبدیل رو انجام بدن
این که اپ ما multi currency هست یه بحث بیزینسی هست و باید توی domain ساپورت بشه.
پرزنتیشن به هیچ عنوان وارد این پروسه نمیشه جز اینکه اطلاعات اماده و پردازش شده رو بگیره و نمایش بده.
پ.ن: از نظر تست, تبدیل باید توی دومین باشه تا راحتر بشه تستش کرد.
پرزنتیشن و دیتاسورس پروسه ی تست رو سختر و هزینه بر تر میکنن.
پ.ن: هر جای دیگه به جز دومین احتمال duplication رو بالا میبره (احتمالن تنها جایی که به تبدیل نیاز داریم این یوزکیس نباشه و موارد دیگه هم باشن )
@purecoder_ir
برای تبدیل واحد های پولی به هم نیاز به دیتا داریم
برای مثال قیمت محصول به دلار توی دیتابیس ثبت شده و کاربر میخواد اون رو به ریال ببینه
دیتاهایی که اینجا لازمه یکی واحد پولی مورد نظر یا ثبت شده برای کاربر هست و یکی نرخ تبدیل دلار به ریال
برای فراهم کردن دیتا به دیتاسورس نیاز داریم
ولی به محض فراهم شدن دیتا, پروسه ی تبدیل توی Domain انجام میشه
پ.ن: منظورم از Domain سرویس ها(یوزکیس ها) نیستن.
توی این پروسه عناصر مختلفی درگیر میشن.
سرویس (یوزکیس) کار coordination بین دیتاسورس و Domain object ها رو انجام میده و دیتای مورد نیاز domain object ها رو از دیتاسورس میگیره و بهشون میده تا domain object ها کار تبدیل رو انجام بدن
این که اپ ما multi currency هست یه بحث بیزینسی هست و باید توی domain ساپورت بشه.
پرزنتیشن به هیچ عنوان وارد این پروسه نمیشه جز اینکه اطلاعات اماده و پردازش شده رو بگیره و نمایش بده.
پ.ن: از نظر تست, تبدیل باید توی دومین باشه تا راحتر بشه تستش کرد.
پرزنتیشن و دیتاسورس پروسه ی تست رو سختر و هزینه بر تر میکنن.
پ.ن: هر جای دیگه به جز دومین احتمال duplication رو بالا میبره (احتمالن تنها جایی که به تبدیل نیاز داریم این یوزکیس نباشه و موارد دیگه هم باشن )
@purecoder_ir
اولین اولین اولین کدی که نوشتی چی بود؟
من👇
اولین کدم دستورهای
Write
Read
توی فرترن بودن که یه چیزی از کنسول میخوند یا توش چاپ میکرد
آنقدر هم بهم کیف داد که تا ۳ روز داشتم دوپامین ترشح میکردم 😂😂😂
@purecoder_ir
من👇
اولین کدم دستورهای
Write
Read
توی فرترن بودن که یه چیزی از کنسول میخوند یا توش چاپ میکرد
آنقدر هم بهم کیف داد که تا ۳ روز داشتم دوپامین ترشح میکردم 😂😂😂
@purecoder_ir