Audio
💎 این بخش اول از کتابیه که نه تالیف هست و نه ترجمه صد در صدی، ترکیبی از تجربه خودم، خیلی هاش از کتاب The Philosophy of Software Design و The Principal of OOD هست.
02:02 سوالاتی که میخوایم جواب بدیم.
04:05 بخش اول - تعریف پیچیدگی
08:30 چطور بیایم پیچیدگی رو اندازه گیری کنیم ؟
13:08 نشانه هاو فاکتور های پیچیدگی
13:42 افزایش تغییرات
17:20 بارشناختی
21:01 ناشناخته های ناشناخته
26:02 دلایل اصلی پیچیدگی - وابستگی و ابهام
32:00 پیچیدگی به صورت افزایشی هست.
🌀 بازم ممنونم از دوستانی که کمک کردن به ویرایش این بخش و دوستانی که نظراتشون رو گفتن که این بخش بهتر و بهتر بشه.
کتاب به صورت اپن سورس ه، توی گیت هاب خودم هست، و خیلی از دوستانی که میخوان ویرایش کنن این کتاب رو میتونن با من در تماس باشن برای اینکه بتونیم باهم پیش ببریمش.
❤️ دمتون گرم که همیشه حمایت میکنید. و این حمایت های شماست که انرژی میده که بتونیم این موضوعات رو بهتر و بهتر پیش ببریم. اگه موضوع خوب بود بگید که ادامش رو هم بریم.
02:02 سوالاتی که میخوایم جواب بدیم.
04:05 بخش اول - تعریف پیچیدگی
08:30 چطور بیایم پیچیدگی رو اندازه گیری کنیم ؟
13:08 نشانه هاو فاکتور های پیچیدگی
13:42 افزایش تغییرات
17:20 بارشناختی
21:01 ناشناخته های ناشناخته
26:02 دلایل اصلی پیچیدگی - وابستگی و ابهام
32:00 پیچیدگی به صورت افزایشی هست.
🌀 بازم ممنونم از دوستانی که کمک کردن به ویرایش این بخش و دوستانی که نظراتشون رو گفتن که این بخش بهتر و بهتر بشه.
کتاب به صورت اپن سورس ه، توی گیت هاب خودم هست، و خیلی از دوستانی که میخوان ویرایش کنن این کتاب رو میتونن با من در تماس باشن برای اینکه بتونیم باهم پیش ببریمش.
❤️ دمتون گرم که همیشه حمایت میکنید. و این حمایت های شماست که انرژی میده که بتونیم این موضوعات رو بهتر و بهتر پیش ببریم. اگه موضوع خوب بود بگید که ادامش رو هم بریم.
❤48👏10🔥2
🌀 کد مرده
پاک کنید بره، اگه کدی که مردست، ویژگی که کاربردی نداره، شاید یکم عجیب باشه این کار، اما این کاریه که باید انجام داد.
📙 Tidy First?
Kent Beck
پاک کنید بره، اگه کدی که مردست، ویژگی که کاربردی نداره، شاید یکم عجیب باشه این کار، اما این کاریه که باید انجام داد.
📙 Tidy First?
Kent Beck
👍33❤16
💎 Separation of Concern and Single Responsibility Principle
🌀 خیلی از پرینسیپل های طراحی بهم ربط دارند و این ارتباط میتونه به ما کمک کنه که طراحی بهتری رو داشته باشیم. لزوما اینطور نیست که SOC چون انتزاع بالاتری داره ، پس نمیتوانم بیاریم در سطح پایین تری ازش استفاده کنم. برعکس بنظرم این کانکشن ها به ما کمک میکنه که در فضاهایی که ابهام توش زیاده بتونیم تصمیم درست تری رو بگیریم.
00:00 History of Separation of Concern
05:00 History of Single Responsibility
09:00 How to use SOC in low level code
12:00 Demo
🕶 مدت ویدیو : 21 دقیقه
📺 لینک ویدیو :
https://youtu.be/3RDUH3pnO2w
🌀 خیلی از پرینسیپل های طراحی بهم ربط دارند و این ارتباط میتونه به ما کمک کنه که طراحی بهتری رو داشته باشیم. لزوما اینطور نیست که SOC چون انتزاع بالاتری داره ، پس نمیتوانم بیاریم در سطح پایین تری ازش استفاده کنم. برعکس بنظرم این کانکشن ها به ما کمک میکنه که در فضاهایی که ابهام توش زیاده بتونیم تصمیم درست تری رو بگیریم.
00:00 History of Separation of Concern
05:00 History of Single Responsibility
09:00 How to use SOC in low level code
12:00 Demo
🕶 مدت ویدیو : 21 دقیقه
📺 لینک ویدیو :
https://youtu.be/3RDUH3pnO2w
❤22🔥5👍1
💎 Types of Coupling in Software Development - Part 1
🌀 خوب بد نیست یکمی بیشتر در مورد Coupling صحبت کنیم که تا الان مثل کلمه مانترا توی یوگا شده برامون. سعی کردم انواع Coupling رو توضیح بدم و براشون هم یه نمونه دولوپ کنم و راهکار هم بدم تا جاییکه چیکار بکنیم براشون.
00:00 What is Coupling
06:00 Types of Coupling
06:28 No-Coupling
07:40 Data Coupling
11:30 Stamp Coupling
15:12 Real Example of Stamp Coupling
18:01 Control Coupling
22:18 External Coupling
27:58 Common Coupling
31:00 Content Coupling
🕶 مدت ویدیو : 37 دقیقه
📺 لینک ویدیو :
https://youtu.be/zkexz3srbno
🌗 گیت هاب :
https://github.com/iCodeNext/dotnet/tree/main/iCodeNext/TypesOfCoupling
🌀 خوب بد نیست یکمی بیشتر در مورد Coupling صحبت کنیم که تا الان مثل کلمه مانترا توی یوگا شده برامون. سعی کردم انواع Coupling رو توضیح بدم و براشون هم یه نمونه دولوپ کنم و راهکار هم بدم تا جاییکه چیکار بکنیم براشون.
00:00 What is Coupling
06:00 Types of Coupling
06:28 No-Coupling
07:40 Data Coupling
11:30 Stamp Coupling
15:12 Real Example of Stamp Coupling
18:01 Control Coupling
22:18 External Coupling
27:58 Common Coupling
31:00 Content Coupling
🕶 مدت ویدیو : 37 دقیقه
📺 لینک ویدیو :
https://youtu.be/zkexz3srbno
🌗 گیت هاب :
https://github.com/iCodeNext/dotnet/tree/main/iCodeNext/TypesOfCoupling
❤24🙏5👍2👌1
💎 Type of Cohesion in Software Development - Part 2
🌀 حالا که در مورد Coupling صحبت کردیم بد نیست در مورد انواع Cohesion هم صحبت کنیم.
01:00 Coincidental Cohesion
04:00 Logical Cohesion
07:00 Temporal Cohesion
12:00 Procedural Cohesion
15:00 Communicational Cohesion
17:00 Sequential Cohesion
19:00 Functional Cohesion
🕶 مدت ویدیو : 21 دقیقه
📺 لینک ویدیو :
https://youtu.be/c1kfgeYAYN0
🌗 لینک گیت هاب:
https://github.com/iCodeNext/dotnet/tree/main/iCodeNext/TypesOfCohesion
🌀 حالا که در مورد Coupling صحبت کردیم بد نیست در مورد انواع Cohesion هم صحبت کنیم.
01:00 Coincidental Cohesion
04:00 Logical Cohesion
07:00 Temporal Cohesion
12:00 Procedural Cohesion
15:00 Communicational Cohesion
17:00 Sequential Cohesion
19:00 Functional Cohesion
🕶 مدت ویدیو : 21 دقیقه
📺 لینک ویدیو :
https://youtu.be/c1kfgeYAYN0
🌗 لینک گیت هاب:
https://github.com/iCodeNext/dotnet/tree/main/iCodeNext/TypesOfCohesion
❤14👍5🔥4
💎 EF Core internals: Entity Query Provider - Part 45
🌀 چیزیکه برام خیلی جذابه اینه که چقدر میشه از کارای ساده ای که شاید به ذهن همه میرسه، بهترین استفاده رو کرد، و این رو توی فاز های کامپایل کردن یک دستور LINQ به TSQL در انتیتی فریمورک میبینیم. مثل کش کردن کوئری ها و یا اینکه بیان پارامتر های کوئری رو در بیارن برای اینکه به یه کلید واحد برسند. و خیلی موارد دیگه که توی این سری از ویدیو ها میبینیمش.
00:00 Previous Session about IQueryable
08:00 Linq Provider in EF Core
08:30 Linq to Object
08:45 Linq to Sql
09:48 Server vs Client Evaluation
11:53 TSql and Materialzier
13:00 Query Cache
15:00 Parameter Extraction
20:30 Entity Query Provider in EF Code Source Code
🕶 مدت ویدیو : 26 دقیقه
📺 لینک ویدیو :
https://youtu.be/uVLmbn_Qi3I
🌀 چیزیکه برام خیلی جذابه اینه که چقدر میشه از کارای ساده ای که شاید به ذهن همه میرسه، بهترین استفاده رو کرد، و این رو توی فاز های کامپایل کردن یک دستور LINQ به TSQL در انتیتی فریمورک میبینیم. مثل کش کردن کوئری ها و یا اینکه بیان پارامتر های کوئری رو در بیارن برای اینکه به یه کلید واحد برسند. و خیلی موارد دیگه که توی این سری از ویدیو ها میبینیمش.
00:00 Previous Session about IQueryable
08:00 Linq Provider in EF Core
08:30 Linq to Object
08:45 Linq to Sql
09:48 Server vs Client Evaluation
11:53 TSql and Materialzier
13:00 Query Cache
15:00 Parameter Extraction
20:30 Entity Query Provider in EF Code Source Code
🕶 مدت ویدیو : 26 دقیقه
📺 لینک ویدیو :
https://youtu.be/uVLmbn_Qi3I
❤24👍4
💎 EF Core internals: Query Cache Hit Rate and Counters - Part 46
🌀 تو این ویدیو یه tool نصب کردیم که بتونیم اونت های درون انتیتی فریمورک رو ببینیم و اون هم dotnet-counters هست، با این tool کامل میتونیم ببینیم که انتیتی فریمورک واقعا داره 2 تا کار parameters Extraction و Query Caching رو انجام میده.
00:00 Previous Session
06:00 Demo for checking Query Caching
07:00 dotnet-counters
08:35 install dotnet-counters
09:12 monitoring EntityFrameworkCore
11:10 Query Cache Hit Rate
🕶 مدت ویدیو : 14 دقیقه
📺 لینک ویدیو :
https://youtu.be/Yn8tve-DCug
🌀 تو این ویدیو یه tool نصب کردیم که بتونیم اونت های درون انتیتی فریمورک رو ببینیم و اون هم dotnet-counters هست، با این tool کامل میتونیم ببینیم که انتیتی فریمورک واقعا داره 2 تا کار parameters Extraction و Query Caching رو انجام میده.
00:00 Previous Session
06:00 Demo for checking Query Caching
07:00 dotnet-counters
08:35 install dotnet-counters
09:12 monitoring EntityFrameworkCore
11:10 Query Cache Hit Rate
🕶 مدت ویدیو : 14 دقیقه
📺 لینک ویدیو :
https://youtu.be/Yn8tve-DCug
❤20👍5
💎 How EF Core Translates Linq into SQL - Part 47
🌀 اگه بخواید بدونید که انتیتی فریمورک واقعا چطور یه کوئری Linq رو به SQL ترجمه میکنه، این ویدیو دقیقا جواب این سوال رو میخواد بده که تو فاز کامپایل یک کوئری چه اتفاقاتی داره میوفته و چه مجیکی پشت داستانش هست.
00:00 Previous Session
04:00 Pre-Processing Expression Visitors
12:00 Translator Expression Visitor
13:00 SQL World Expression
15-30 Post-Processing and QuerySqlGenerator
پ.ن. شاید این ویدیو برای همه مناسب نباشه، اگه واقعا میخواید متوجه بشید که اون پشت ها چه خبره این ویدیو روببینید.
❤️ و اینکه واقعا ممنونم از محبتتون و لایک ها و کامنت هایی که میزارید کلی انرژی میگیریم.
🕶 مدت ویدیو : 23 دقیقه
📺 لینک ویدیو :
https://youtu.be/q7Wb1PFDP1U
🌀 اگه بخواید بدونید که انتیتی فریمورک واقعا چطور یه کوئری Linq رو به SQL ترجمه میکنه، این ویدیو دقیقا جواب این سوال رو میخواد بده که تو فاز کامپایل یک کوئری چه اتفاقاتی داره میوفته و چه مجیکی پشت داستانش هست.
00:00 Previous Session
04:00 Pre-Processing Expression Visitors
12:00 Translator Expression Visitor
13:00 SQL World Expression
15-30 Post-Processing and QuerySqlGenerator
پ.ن. شاید این ویدیو برای همه مناسب نباشه، اگه واقعا میخواید متوجه بشید که اون پشت ها چه خبره این ویدیو روببینید.
❤️ و اینکه واقعا ممنونم از محبتتون و لایک ها و کامنت هایی که میزارید کلی انرژی میگیریم.
🕶 مدت ویدیو : 23 دقیقه
📺 لینک ویدیو :
https://youtu.be/q7Wb1PFDP1U
👍31😍3🔥2
💎 کمتر از یک سال شده که کانال یوتیوب رو راه اندازی کردم، و اولش واقعیتش اینقدر برام جدی نبود که الان هست، وقتی این آمار ها و این همه لطف دوستان رو میبینه که کلی کلی لایک و کامنت های باحال میفرستند.
🌗 امیدوارم که کمک خیلی خیلی کوچیکی کرده باشم به کامینیتی دات نت توی ایران، و اینکه محتوی هایی که تولید کردم بدرد بخور بوده باشه.
❤️ نکته ی خیلی خفنش اینه که نزدیک 1100 نفر رفیق جدید پیدا کردم تو همین چند ماه.
🌗 امیدوارم که کمک خیلی خیلی کوچیکی کرده باشم به کامینیتی دات نت توی ایران، و اینکه محتوی هایی که تولید کردم بدرد بخور بوده باشه.
❤️ نکته ی خیلی خفنش اینه که نزدیک 1100 نفر رفیق جدید پیدا کردم تو همین چند ماه.
❤87👍4🔥3👏2🙏2
💎 پس از اینکه ساعتها وقت گذاشتیم که یک باگ را درست کنیم یا یک ویژگی رو توسعه بدیم، آخرین چیزی که ما توسعهدهندگان میخواهیم انجام دهیم، اینه که در قسمت متن کامیت گیت کارهای خودمون رو توضیح بدیم.
🌗 اما معمولا به یه تکست ساده و بدون فرمت بسنده میکنیم اما برای اینکه بدونیم چرا این قسمت مهم هست قسمت های زیر رو در نظر بگیرید:
🌀 تیم شما خیلی راحت تر میتونن Pull Request های شما رو درک کنند و میتونه بهشون خیلی کمک کنه.
🌀تاریخچه گیت شما یک داستان رو داره توصیف میکنه که هم "چی" تغییر کرده و هم "چرا" تغییر کرده.
🌀شما به راحتی میتوانید مبدأ یک باگ یا تغییری که باعت ایجاد باگ شده است را پیدا کنید. ( کامنت محمد عزیز رو بخونید )
🌀 ریپازیتوری شما در آینده و برای افرادی که بعدا به تیم شما جوین میشن بهراحتی قابل درک و مشارکت است. (با این کار داریم، و یه پروژه هم داریم روش کار میکنیم، که بزودی معرفی میکنیمش)
🌗 اما معمولا به یه تکست ساده و بدون فرمت بسنده میکنیم اما برای اینکه بدونیم چرا این قسمت مهم هست قسمت های زیر رو در نظر بگیرید:
🌀 تیم شما خیلی راحت تر میتونن Pull Request های شما رو درک کنند و میتونه بهشون خیلی کمک کنه.
🌀تاریخچه گیت شما یک داستان رو داره توصیف میکنه که هم "چی" تغییر کرده و هم "چرا" تغییر کرده.
🌀شما به راحتی میتوانید مبدأ یک باگ یا تغییری که باعت ایجاد باگ شده است را پیدا کنید. ( کامنت محمد عزیز رو بخونید )
🌀 ریپازیتوری شما در آینده و برای افرادی که بعدا به تیم شما جوین میشن بهراحتی قابل درک و مشارکت است. (با این کار داریم، و یه پروژه هم داریم روش کار میکنیم، که بزودی معرفی میکنیمش)
👍28❤4
💎 داشتم با یکی از دوستان صحبت میکردم در مورد اینکه چرا و در چه شرایطی متد Update توی انتیتی فریمورک یک آنتی پترن هست؟
🌀 زمانی رو فرض کنید که میخواهید قسمتی از یک انتیتی رو آپدیت کنید مثلا فقط نام و نام خانوادگی و کد ملی و شماره موبایل ، انتیتی User رو میخواهیم آپدیت کنیم اما این انتیتی احتمالا بیشتر از اینها Column دارد، اگر در این شرایط شما از متد Update استفاده کرده اید، شما دارید یک آنتی پترن رو توی کدهای خودتون نگه میدارید. چرا ؟
چون این متد تمامیه فیلد های اون جدول رو آپدیت میکنه. و تمام مقادیر رو به IsModified فلگ میزنه و براش کوئری آپدیت میسازه.
🌗 پس اگر در این شرایط هستید از این متد استفاده نکنید.
🕶 متد Update فقط در شرایطی که کل انتیتی تغییر کرده است باید استفاده شود.
🌀 زمانی رو فرض کنید که میخواهید قسمتی از یک انتیتی رو آپدیت کنید مثلا فقط نام و نام خانوادگی و کد ملی و شماره موبایل ، انتیتی User رو میخواهیم آپدیت کنیم اما این انتیتی احتمالا بیشتر از اینها Column دارد، اگر در این شرایط شما از متد Update استفاده کرده اید، شما دارید یک آنتی پترن رو توی کدهای خودتون نگه میدارید. چرا ؟
چون این متد تمامیه فیلد های اون جدول رو آپدیت میکنه. و تمام مقادیر رو به IsModified فلگ میزنه و براش کوئری آپدیت میسازه.
🌗 پس اگر در این شرایط هستید از این متد استفاده نکنید.
🕶 متد Update فقط در شرایطی که کل انتیتی تغییر کرده است باید استفاده شود.
👍37❤5🤔1
💎 EF Core Internal ; Compiled Query - Part 48
🌀 نوبتی هم باشه نوبت Compiled Query ها و API که کلاس EF برامون فراهم میکنه که مدام فاز گشتن توی کش و یا کامپایل رو انجام ندیم، مناسب کوئری هایی هست که خیلی ازشون استفاده میکنیم مثل مکانیزم های Pooling، که حتی نمیخواهیم هزینه فاز پیدا کردن کوئری در کش رو هم پرداخت کنیم. پس در این شرایط بهتره که بریم سراغ این API.
00:00 Previous Session
07:00 Problem
10:00 Compiled Query
14:00 Compiled Query in EF Core Source Code
🕶 مدت ویدیو : 21 دقیقه
📺 لینک ویدیو :
https://youtu.be/G_45AAFplEY
🌀 نوبتی هم باشه نوبت Compiled Query ها و API که کلاس EF برامون فراهم میکنه که مدام فاز گشتن توی کش و یا کامپایل رو انجام ندیم، مناسب کوئری هایی هست که خیلی ازشون استفاده میکنیم مثل مکانیزم های Pooling، که حتی نمیخواهیم هزینه فاز پیدا کردن کوئری در کش رو هم پرداخت کنیم. پس در این شرایط بهتره که بریم سراغ این API.
00:00 Previous Session
07:00 Problem
10:00 Compiled Query
14:00 Compiled Query in EF Core Source Code
🕶 مدت ویدیو : 21 دقیقه
📺 لینک ویدیو :
https://youtu.be/G_45AAFplEY
❤25👍5🔥1