‫۷ سال و ۱۱ ماه قبل، پنجشنبه ۲۲ مهر ۱۳۹۵، ساعت ۰۰:۰۳
در واقع میکرو سرویس یک نسل پیشرفته از روی SOA  می باشد 
طبق تعریف microservice از زبان جناب martin fowler
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralised management of these services, which may be written in different programming languages and use different data storage
technologies. 
که بصورت خلاصه سبک معماری میکرو سرویس یک رویکرد به توسعه یک برنامه واحد به عنوان مجموعه ای از خدمات کوچک می‌باشد که هر برنامه در پروسس خود اجرا می‌شود و اغلب از طریق مکانیسم‌های برقراری ساده  همانند api  های HTTP با بقیه ارتباط برقرار می‌کند. این خدمات در سراسر کسب و کار ساخته شده است و به طور مستقل و بطور اتوماتیک استقرار می‌یابد (مثلا با BuildScript  ها  Deplloy Script‌ها ). در این سرویس‌ها حداقل مدیریت متمرکز وجود دارد، و این بدین معنی می‌باشد که هر کدام می‌توانند با زبان برنامه نویسی مختلف نوشته شوند و حتی دیتابیس ذخیره سازی متفاوت داشته باشند .
‫۷ سال و ۱۱ ماه قبل، چهارشنبه ۲۱ مهر ۱۳۹۵، ساعت ۲۳:۳۰
من در مورد همه مشکلات میکرو سرویس زیاد با شما موافق نیستم 
  • از آنجایی که ارتباط بین سرویس‌ها در بستر شبکه انجام می‌شود، انتظار کندی عملکرد سرویس‌ها دور از ذهن نیست. (اتفاقا بخاطر توزیع برنامه بر روی چند سیستم در زمانی که بار زیادی بر روی سیستم هست پاسخ گویی به کاربر می‌تونه خیلی بسرعت انجام بپذیره و اتفاقا یکی از مزایای اون هست)
  • به دلیل ارتباطات شبکه‌ای، احتمال آسیب پذیری‌های امنیتی در این نوع برنامه‌ها بیشتر است. (البته بیشتر این توزیع در server farm  انجام می‌شه ،یعنی پشت فایروال و کسی جز سرورها در این شبکه خصوصی وجود ندارد، نمی‌گم نیست ولی خیلی نیست)
  • نوشتن سرویس‌هایی که در بستر شبکه با سایر سرویس‌ها در ارتباط هستند سختی و مشکلات خود را دارد. برنامه‌نویس در این شرایط، درگیر برقراری ارتباط، رمزگذاری داده‌ها در صورت نیاز و تبدیل آنها می‌شود.(همان موارد بالا)
  • به دلیل مجزا بودن بخش‌های مختلف برنامه، مانیتور کردن و ردیابی عملکرد سرویس‌ها، یکی از کارهای اصلی توسعه دهنده یا استفاده کننده از برنامه است. (اینم خودش یک فایده است و طبق اصل SRP  و تفاوت MicroServic با SOA  بیشتر بر همین نکته تاکید داره که یک میکرو سرویس کاملا مستقل می‌باشد و راحت‌تر قابل مانیتور کردن و ردیابی عملکرد سرویس می‌باشد
  • در مجموع سرعت برنامه‌های نوشته شده با معماری Microservices کندتر از برنامه‌های نوشته شده با معماری Monolithic است. دلیل آن محیط اجرایی برنامه‌ها است. برنامه‌هایی با معماری Monolithic بر روی حافظه سرور پردازش می‌شوند. (باز تاکید که اصل استفاده از میکرو سرویس برای سیستم هایی با تراکنش بالا می‌باشد ،هدف توسعه راحتر و بدون تاثیر بر بقیه سرویس‌ها و حتی بدون توقف آنها می‌باشد، همچنین امکان  horizontal Scalability   نرم افزار و بالا بردن تعداد سرور‌های ارائه دهنده سرویس براحتی بوجود خواهد امد ، پس می‌تونه سرعت رو خیلی بالا ببره و مشکل توقف سرویس که در خیلی از سامانه‌های ایرانی می‌بینیم رو از بین میبره )
‫۷ سال و ۱۱ ماه قبل، چهارشنبه ۲۱ مهر ۱۳۹۵، ساعت ۲۳:۰۲
من تجربه خوبی در کار با topshelf  داشتم که دوستان تو این پس هم معرفی کردن
تبدیل برنامه‌های کنسول ویندوز به سرویس ویندوز ان تی 

استفاده از Debugger.Lunch  هم خیلی گزینه خوبیه که خیلی جاها می‌تونه گره ای از مشکلات دیباگ را باز بکنه 
 فقط در مورد قراردادن اون تو کد IF DEBUG  من پیشنهاد می‌دهم که از کانفیگ چک شود که مثلا ExternalDebugger  باز شود یا نه ! چون همیشه که نمی‌خواهیم دیباگر اونجوری باز بشه !
‫۹ سال و ۱۱ ماه قبل، شنبه ۱۷ آبان ۱۳۹۳، ساعت ۲۳:۰۱
به دوستان پیشنهاد می‌شه این رو هم ببینید 
استفاده از Kendo UI  بهمراه AngularJs  خیلی خوبه !
ما تو پروژه تجاری تجاری استفاده کردیم و خیلی راضی هستیم 
‫۱۰ سال و ۵ ماه قبل، شنبه ۱۳ اردیبهشت ۱۳۹۳، ساعت ۲۱:۴۷
مثل اینکه async  کردن متد‌های  Repository زیاد پیچیده نمی‌باشد !

پس می‌شه query ‌های NH  رو هم Async  کرد ، پس روی IRepository  می‌تونیم هم متد Async  هم متد Sync  رو با هم داشته باشیم
‫۱۰ سال و ۵ ماه قبل، شنبه ۱۳ اردیبهشت ۱۳۹۳، ساعت ۱۲:۱۱
در مورد async  راست می‌گید ! باید ببینم راهی داره یا نه ، در ضمن در لایه دیتا اکسس هر جور که می‌خواهید می‌تونید include  و غیره بزنید مشکلی وجود نداره ، چون رو اینتفریس از شما می‌خواهند که یک entity  چه چیزهایی همراهش باشه یا نباشه
خوب اگه به cqrs  نگاه کنید در سمت Command  شما قسمت اصلی و insert , Update , delete  و Get  رو دارید و برخی مواقع getall  که خیلی کمه ولی سمت query  کاملا دستتون بازه هر جور که کار کنید کلا پشت query سرویس هر جور که راحتی با هر چی که راحتی کار کن !
‫۱۰ سال و ۵ ماه قبل، شنبه ۱۳ اردیبهشت ۱۳۹۳، ساعت ۰۵:۳۳
پیاده سازی خوبیه
البته زمانی که از DDD  استفاده می‌شه  استفاده از IQueryable  در IRepository  به عنوان نشت اطلاعات خوانده می‌شود و تاکیدا نباید استفاده شود !

این Repository ‌های Generic  میتوانند داخل یک کلاس که IRepository  را Implement  کرده استفاده شوند و یا به عنوان کلاس Base  ان باشند
‫۱۰ سال و ۵ ماه قبل، شنبه ۱۳ اردیبهشت ۱۳۹۳، ساعت ۰۵:۲۳
تو مبحث DDD  دلیل اصلی که Repository  وارد داستان شده Persistence Ignorance  می‌باشد ،
همونطور که میدونید ، این  قضیه می‌گه که شما تو  Domain  نبایید بگید EF  این طوری Select  می‌زنه Nhibernate   یک نوع دیگر ، NoSql  یک نحو دیگر (NoSql ‌ها هم بخاطر اینکه میتونند براحتی یک Aggregate  رو ذخیره کنند  میتونند ابزار خوبی برای DDD  باشند! )
چون Domain  نباید به تکنولوژی وابسته باشد ! نباید رفرنسی به دیتا اکسس یا  EF  و یا ... داشته باشد فقط یک سری Interface  تعریف می‌کند ، که یکی که بعدا به نام لایه دیتا اکسس می‌باشد باید این اینترفیس  رو Implement  کتد !
در مورد CQRS  هم چون معمولا Application Layer  بر روی Rest هاست می‌شوند پس هر Request  فقط شامل یک Command  می‌باشد که Unit Of work  رو هم فقط روی همان Command  ایجاد می‌کنند
جالبه براتون بگم که در Domain Driven Design    اصل بر این هست که شما در هر ترانزاکشن فقط یک Aggregate  رو باید ذخیره کنید و تغییر در Aggregate ‌های دیگه بوسیله Event Source ‌ها Publish  می‌شه

و از توصیه‌های اولیه DDD  اینه که برای پروژه‌های Complex  و Huge  استفاده بشه ،پس قطعا برای یک پروژه که از این متد استفاده نمی‌شه و یا در ابعاد کوچکتر می‌باشد کاملا حرف شما درست باشد و از پیچیده شدن برنامه جلوگیری می‌کند
‫۱۰ سال و ۵ ماه قبل، سه‌شنبه ۹ اردیبهشت ۱۳۹۳، ساعت ۰۳:۴۳
با توجه به متن قضاوتتون عجولانه است !

تو پروژه‌های Huge که  توصیه  خود مایکروسافت استفاده از Domain Driven  و CQRS  می‌باشد ، Repository  یکی از اصول Domain Driven  و Enterprise Application Pattern  می‌باشد
‫۱۰ سال و ۵ ماه قبل، دوشنبه ۸ اردیبهشت ۱۳۹۳، ساعت ۰۲:۵۷
یک کار خوب داخل دیگه اینه که یک Local Package Source  در شرکت داشته باشیم که دچار گیر کردن گاه به گاه ،مشکلات nuget  تو ایران که بعضی وقتها گیر می‌کنه نیافتیم و package  با سرعت بالا نصب بشوند