Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Iran .Net
در مطالب گذشته عنوان کردیم که هنوز EF Core چارچوبی کامل و قابل اتکا برای کار با داده ها نیست. در این نسخه برخی از قابلیت های نسخه EF 6.x دیگر پیاده سازی نخواهند شد و برنامه ای برای پیاده سازی آن ها از سمت مایکروسافت وجود ندارد و برخی از قابلیت های کاربردی تر هم در نسخه EF Core 1.1 اضافه خواهند شد که در سه ماهه اول سال آینده میلادی عرضه خواهد شد.
قابلیت هایی که در EF Core منسوخ شده اند و یا هنوز پیاده سازی نشده اند:
1. قابلیت Lazy Loading
2. قابلیت Explicit Loading
3. امکان استفاده از group by برای گروه بندی داده ها
4. کار با Store Procedure ها دچار محدودیت هایی شده است.
5. قابلیت Command Interception
6. پشتیبانی از Spacial Data Types
7. مدل های Complex(Value) Type
8. پشتیبانی از View ها
9. قابلیت Seed Data

البته این لیست بلند بالاتر از این می باشد. در کل به نظر می آید هنوز استفاده از EF 6.x روشی مطمئن تر و کاراتر می باشد، حتی اگر از ASPNet Core قرار هست استفاده کنیم.

نقشه راه توسعه EF Core:
https://github.com/aspnet/EntityFramework/wiki/Roadmap

https://www.infoq.com/news/2016/08/EF-Core-Roadmap?utm_source=infoqWeeklyNewsletter&utm_medium=WeeklyNL_EditorialContent_dotnet&utm_campaign=08092016news

@irandotnet
مفهوم static class در زبان‌های برنامه‌ نویسی شی‌گرا می‌تواند بسیار گمراه کننده باشد. اصولا بهتر است معماری نرم‌افزار طوری انجام شود که کمترین نیاز به این نوع کلاس باشد. یکی از نکات مهم در مورد این مفهوم این است که برنامه‌نویسان باید حواسشان باشد با این مفهوم به عنوان «سطلی برای نگهداری کدهای متفرقه» استفاده نشود. معمولا کدی که به اندازه کافی به محل درست نوشتن آن فکر نشده، اولین مکانی که برای آن مناسب به نظر می‌رسد یک static class است.
لینک زیر مربوط به بخشی از کتاب Framework Design Guidelines (FDG) است که به طور کامل توضیح داده‌است که در چه مواقعی مجاز به استفاده از static class ها هستیم و چه مواقعی نه. این کتاب استانداردی است که تمام برنامه‌نویسان در مایکروسافت باید آن را مطالعه کرده باشند و نکات آن را رعایت کنند.

https://msdn.microsoft.com/en-us/library/ms229038(v=vs.110).aspx

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

کانال تلگرام:
@SoftwarePhilosophy


___
Forwarded from Iran .Net
چه تفاوتی بین Dependency Inversion Principle و Dependency Injection و یا Inversion Of Control وجود دارد؟
این مفاهیم با آنکه در هم تنیده و مربوط به هم هستند اما هر کدام به مفهوم و فلسفه ای متفاوت در توسعه در نرم افزار اشاره می کنند. اما متاسفانه می بینیم که هر کدام از این ها به جای دیگری استفاده می شود و این ها معنیِ واضح شان را در ادبیات روزمره خیلی از ما از دست داده اند.
اگر چه درک و کاربرد این مفاهیم برای تازه کار تر ها مشخص نیست، اما به هر حال دنیای مدرن توسعه نرم افزار بر روی این اصول سوار شده است. این اصول دیگر آنقدر بدیهی و همه جایی هستند که در ASPNET Core علنا به عضوی تفکیک ناپذیر از فریم ورک تبدیل شده اند و هر کس به نوعی مجبور خواهد بود با این مفاهیم سر و کله بزند.

در مطالب زیر مارتین فاولرِ بزرگ، این مفاهیم را روشن و مشخص کرده اند.

* مطلبی در مورد Inversion Of Control که خاصیت ذاتی فریم ورک هاست و چیزی که آن ها را از کتابخانه ها متمایز می کند:

http://martinfowler.com/bliki/InversionOfControl.html

* مطلبی معروف و مرجع در شرح مفهوم Dependency Injection و تفاوتش با Inversion Of Control.

http://martinfowler.com/articles/injection.html

توجه شود که مفهوم Dependency Injection به کتابخانه هایی نظیر Structuremap و Ninject و Autofac و غیره وابسته و گره خورده نیست. بلکه این کتابخانه ها صرفا ابزارهایی هستند که بخشی از کارشان ساده سازیِ کاربرد Dependency Injection در نرم افزارهای ما می باشد. بدون این ها هم می توانیم (و البته باید) اصل Dependency Inversion را رعایت کرده و از Dependency Injection هم استفاده کنیم.

@irandotnet
Forwarded from LiTuX
💿💿💿

- معرفی توزیع (Distro): (Slackware Linux)

اسلکور گنو/لینوکس، یک توزیع مبتنی بر فلسفه حفظ سادگی و در عین حال پایداری سیستم است، تا آنجایی که، برای نمونه، سیستم اتوماتیک حل وابستگی بسته، ندارد.

از جمله توزیع‌هایی است که مناسب کاربران مبتدی نبوده و برای شروع، پیشنهاد نمی‌شود.

معمولا، مناسب توسعه دهندگان سیستمی (System Developers) نظیر توسعه دهندگان کرنل (Kernel Developerd) و ... است.

اسلکور پایه بسیاری از توزیع‌ها نظیر توزیع SUSE است.

http://www.slackware.com/

#Slackware
#System_Developer
#System_Development
#Kernel_Developer
#Kernel_Development

💻💻💻
@Litux (کاربردی ترین کانال گنو/لینوکس)
Forwarded from Iran .Net
قابلیت Multi Threading در JavaScript

گاهی در وب اپلیکشن ها نیاز هست تا داده های زیاد و حجیمی از سمت سرور دریافت شود و پردازشی بر روی این داده ها صورت بگیرد. از آنجایی که این پردازش مدت زمان زیادی طول می کشد تا پایان بگیرد، صفحه قفل می شود و یا به اصطلاح هنگ می کند. علت این امر آن است که برنامه توسط یک Thread در حال اجرا می باشد و وقتی که این Thread در حال پردازش داده ها ست، نمی تواند به کلیک ها و سایر تعاملات کاربر پاسخ دهد و به همین خاطر صفحه قفل می کند.

در این سناریو و بسیاری از سناریو های دیگر نیاز هست تا پردازش های سنگین و یا موازی در صفحه مان داشته باشیم و برای حل مشکلی که در فوق مطرح شد باید از Multi Threading استفاده کنیم.

در استاندارد HTML5، قابلیت Web Worker معرفی شد که به مرورگر ها اجازه میداد اپلیکشن ها را به صورت Multi Thread اجرا کنند. در واقع هر Worker معادل با یک Thread می باشد.

* در مورد Web Worker در مستندات MDN:
http://blog.teamtreehouse.com/using-web-workers-to-speed-up-your-javanoscript-applications

* کتابخانه ای که کار با Web Worker ها را به شدت ساده تر و خوانا تر می کند:
https://github.com/calvinmetcalf/catiline

@irandotnet
Forwarded from LiTuX
📜📜📜
-معرفی ابزار لاتک (LaTex)

لاتک یه سیستم تهیه اسناد خیلی رایج هست که بوسیله ی دانشمندان,مهندسان,ریاضی دان ها, و.... خیلی مورد استفاده قرار میگیرد.
لاتک با استفاده از یک زبان نشانه گذاری متون که درون اسناد پی دی اف کامپایل میشود به نوعی قوانین تایپی را بهینه میکند
در نتیجه چه شما از لاتک استفاده کنید و چه از سایر نرم افزار ها مانند word نتیجه شاید یکسان باشد ولی محیطی که شما در آن متنتان را مینویسید بیسار متفاوت میباشد و لاتک دارای محیط حرفه ای تری میباشد.
قابلیت سفارشی سازی (customization) یکی دیگر از قابلیت های ویژه ی لاتک میباشد که آن را از سایر رقبای خود بسیار متمایز میسازد.

اگر شما هم علاقه مند به یادگیری لاتک و نحوه ی کار با آن هستید میتوانید از وبسایت زیر استفاده کنید:

http://www.latextemplates.com

#Amateurs
#Development_Tools
#Text_Editor
#latex

💻💻💻
@Litux (کاربردی ترین کانال گنو/لینوکس)
Forwarded from Iran .Net
در برخی از نرم افزارها که از سایز به نسبت بزرگی برخوردار هستند، به دلایلی گاهی بیشتر از یک پایگاه داده استفاده می شود. هنگامی که می خواهیم تغییری در داده های سیستم اعمال کنیم، نیاز هست تا هم زمان بر روی دو یا چند پایگاه داده، داده های جدید را ثبت کنیم. اما چطور مطمئن شویم که این عملیات بر روی همه پایگاه های داده ها با موفقیت ثبت شده و یا اگر مشکلی هست، مطمئن شویم در هیچ کدام هیچ تغییری صورت نپذیرفته است (Atomicty) و به عبارتی دقیق تر با شرابطی مواجه نشویم که یکپارچگی داده ها در سیستم از بین رفته باشد و داده ای در جایی ثبت شده باشد و در جایی دیگر موجود نباشد.

جواب این سوال استفاده از Transaction می باشد. یک Transaction به ما این امکان را می دهد تا کارهای ما به صورت اتمیک انجام بگیرند. یعنی یا همه با هم صورت بپذیرند و یا مطمئن باشیم هیچ کدام صورت نگرفته اند. در SQL Server می توانیم یک Transaction را بین چند پایگاه داده به اشتراک بگذاریم تا عملیات ما بر روی آن ها به صورت اتمیک صورت f.

یا در سناریو های ساده تر نیاز هست تا در Entity Framework چند بار متد SaveChanges را پشت سر هم صدا بزنیم. اگر در یکی از این دفعات متد SaveChanges با خطا رو به رو شد، با شرایطی مواجه می شویم که یکپارچگی داده ها از بین می رود چرا که یک سری از داده ها ذخیره شده اند و یک سری از داده ها از دست رفته اند. راه حل این مشکل هم استفاده از Transaction ها می باشد.

استفاده از Transaction ها در EF 6.x:
https://msdn.microsoft.com/en-us/data/dn456843.aspx
#پست_مجدد این پست تا به حال بیش از ۱۵۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
مفاهیم Covariance و Contravariance یکی از مباحث مهم در زبان‌های برنامه‌نویسی مدرن محسوب می‌شود. تسلط بر این مفاهیم به طراحان فریم‌ورک‌ها و پلتفرم‌ها کمک می‌کند تصمیم‌های مناسب‌تری در طراحی کلاس‌ها داشته باشند.
از آنجایی این مفاهیم انتزاعی هستند، معمولا فهم آنها در وهله اول سخت به نظر می‌رسد. مقاله زیر با چند مثال قابل لمس این مفاهیم را به زبان ساده‌تری توضیح داده تا فهم آن لذت‌بخش‌تر و آسان‌تر شود.

http://mehrandvd.me/2016/06/18/covariant-and-contravariant/

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

کانال تلگرام:
@SoftwarePhilosophy



___
در واحدهای نسبی یک اندازه طولی نسبت به یک اندازه طولی دیگر محاسبه می‌شود به همین دلیل به آنها نسبی گفته می‌شود.
زمانی که از واحدهای نسبی در CSS استفاده می‌شود خروجی به راحتی می تواند در محیطهای گوناگون وفق پیدا کند.
این واحدها در دو دسته واحدهای نسبی وابسته به فونت و واحدهای نسبی وابسته به Viewport قرار می‌گیرند.
واحدهای نسبی وابسته به فونت در CSS شامل چهار واحد ch, ex, em و rem می‌باشند و واحدهای نسبی وابسته به Viewport شامل چهار واحد vmin, vw, vh و vmax می‌باشند.
مقاله زیر توضیحات کاملی در مورد نحوه استفاده از موارد ذکر شده را به همراه مثالهای کاربردی ارائه کرده است.

http://css-tricks.ir/tutorial/%D9%88%D8%A7%D8%AD%D8%AF%D9%87%D8%A7%DB%8C-%D9%86%D8%B3%D8%A8%DB%8C

#مریم_داودی

لینکدین:
https://www.linkedin.com/in/maryam-davoudi-7913565a

کانال تلگرام:
@SoftwarePhilosophy

___
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
حتما تا به حال از کتابخانه Bootstrap استفاده کرده‌اید. این نوع کتابخانه‌ها کمک می‌کنند که بتوانید به راحتی از امکانات CSS استفاده کنید، بدون اینکه نیاز به درگیر شدن با پیچیدگی‌های آن پیدا کنید. کتابخانه‌های زیادی از این قبیل به وجود آمده‌اند. یکی از این کتابخانه‌ها که اخیرا به دنیای برنامه‌نویسی معرفی شده کتابخانه Office UI Fabric است. این کتابخانه که تقریبا تمام امکانات گرید سیستمBootstrap را دارد بر اساس معماری مدرن UI که در نرم‌افزارهای مایکروسافت استفاده شده ساخته شده‌است. اگر با این کتابخانه کار کنید، می‌توانید برنامه‌هایی بسازید که UI آن سازگار با برنامه‌هایی مانند Word Online, Excel Online, Outlook Online و مانند آن باشد.

http://dev.office.com/fabric/get-started

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

کانال تلگرام:
@SoftwarePhilisophy



___
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
این روزها تعداد فریم‌ورکهای جاوا اسکریپتی زیادی وجود دارند. دلیل وجود این همه فریم‌ورک سختی کار با جاوا اسکریپت است. در واقع در سناریوهای خیلی بزرگ مدیریت و دیباگ یک پروژه جاوا اسکرپیتی به مراتب سخت خواهد شد. اما در سالهای اخیر ابزارهای کار با جاوا اسکریپت به طور قابل ملاحظه ایی بهبود یافته اند و شرکتهایی مانند گوگل، اپل و مایکروسافت برای بهبود این زبان سرمایه گذاری های زیادی انجام داده‌اند. در نتیجه با توسعه یک سری فریم‌ورک، نوشتن برنامه‌هایی با مقیاس بزرگ درون مرورگر را لذت بخش تر کرده‌اند. با ورود AngularJS، امکان نوشتن اپلیکیشن‌هایی که کاملا درون مرورگر اجرا شوند میسر شده است. هدف از AngularJS کمک به طراحان جهت طراحی کامپوننت‌های قدرتمند است. در این مطلب مزایا و معایب Angular و همچنین دلیل استفاده از این فریم‌ورک بررسی شده است.

http://sirwan.info/Why-Angular

#سیروان_عفیفی
لینکدین:
https://ir.linkedin.com/in/sirwan-afifi-73225345

کانال تلگرام:
@SoftwarePhilisophy



___
Forwarded from Iran .Net
پروژه Awsome Dotnet سعی کرده است بهترین پروژه های دات نت در حوزه های مختلف را گردآوری کند. در این جا کتابخانه ها و فریم ورک ها طبقه بندی شده و شرح کوتاه خوبی از هر کدام داده شده است. بدون شک نگاه کردن به فهرست شما را با پروژه هایی خوب و کاربردی در حوزه های مختلف آشنا می کند و جعبه ابزار تان را با ابزارهای قدرتمند مجهز خواهد کرد.
این فهرست با سرعت خوبی به روز شده و با کیفیت بالایی نگهداری می شود:
https://github.com/quozd/awesome-dotnet

@irandotnet
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
هشت نکته در زبان C# که احتمالا آنها را نمی‌دانید! دو نکته که برای من جالب بود:
۱. در Indexer ها می‌توان از params استفاده کرد و چندین پارامتر ورودی استفاده کرد.
۲. بر روی enum ها هم می‌توان Extension Method تعریف کرد.

https://damieng.com/blog/2012/10/29/8-things-you-probably-didnt-know-about-csharp

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

کانال تلگرام:
@SoftwarePhilisophy


___
Forwarded from Iran .Net
چه تفاوتی بین مفاهیم Asynchronous و Multi Threading وجود دارد؟

تفاوت این دو مفهوم برای خیلی مشخص نیست، با آنکه به کلی متفاوت از هم می باشند.

مفهوم Asynchronous به ماهیت Non-Blocking یک متد یا فرایند اشاره می کند.
به طور ساده، می دانیم که در صورت صدا زدن یک متد، جریان برنامه متوقف می شود. پس از پایان یافتن متد، برنامه مجددا به مسیرِ اجرای خود ادامه خواهد داد. به این نوع از متد ها متدهای Blocking گفته می شود، بدین معنی که فرایند برنامه تا زمانِ اتمام این نوع از متد ها متوقف (بلاک) خواهد شد. اما در موردمتدهای Non-Blocking و یا Asynchronous قضیه فرق می کند و جریانِ اصلی برنامه پس از صدا زدن متد، معطل تمام شدن متد نخواهد ماند و به مسیر خود ادامه خواهد داد. این نوع از متدها معمولا در مورد امور I/O و مواردی که در حوزه سیستم عامل، دیسک و شبکه و پایگاه داده و ... می باشند، مورد استفاده قرار می گیرند.
از سوی دیگر مفهوم Multi Threading به این موضوع اشاره می کند که یک تکه از کد همزمان توسط چند Thread در حال اجرا می باشد. این نوع از اجرا بیشتر در مورد کد هایی استفاده می شوند که به اصطلاح CPU Bound بوده و دارای بار پردازشی زیادی می باشند. با تقسیم بار بین چند پردازنده سعی می کنیم، موجب سریع تر و بهینه تر شدن کد شویم.

http://blog.slaks.net/2014-12-23/parallelism-async-threading-explained/

@irandotnet
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
برای شما که علاقه دارید (عجله دارید!) تا امکانات C# 7.0 را همین الان امتحان کنید، قبل از اینکه نسخه‌ نهایی آن منتشر شود، لینک زیر توضیح می‌دهد که چطور می‌توانید در Visual Studio 2015 و یا Visual Studio '15' (نسخه بعدی) نسخه جدید زبان C# را امتحان کنید. با توجه به اینکه کامپایلر جدید این زبان (Roslyn) دیگر Open Source شده، شما می‌توانید حتی آخرین نسخه‌ موجود را امتحان کنید.

http://www.c-sharpcorner.com/article/how-to-compile-test-C-Sharp-7-features/

#مهران_داودی
لینکدین:
https://ir.linkedin.com/in/mehrandvd

کانال تلگرام:
@SoftwarePhilisophy



___
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.