نظرات مطالب
الگوی طراحی Builder همراه با اصول Interface Segregation
نکته تکمیلی:
 متد WithSurname  اصل Command Query Seperation   رو نقض میکنه چون در اینجا به صورت یک Query تعریف شده ولی در پایان وضعیت شی رو تغییر میدهد و همانند یک  Command رفتار میکند و برای حل این مشکل می‌توانیم به صورت زیر این متد رو بازنویسی کنیم:
  public IExpectPrimaryContactPersonBuilder WithSurname(string surname)
    {
        return new PersonBuilder {
                  Name = this.Name;
                  Surname = surname;
          }
    }
همچنین میتوان از روش زیر هم استفده کرد:
class ExpectSurname : IExpectSurnamePersonBuilder
{

    private string Name { get; }

    public ExpectSurname(string name)
    {
        this.Name = name;
    }

    public IExpectPrimaryContactPersonBuilder WithSurname(string surname)
    {
        if (string.IsNullOrEmpty(surname))
            throw new ArgumentException(nameof(surname));
        return new ExpectPrimaryContact(this.Name, surname);
    }

}
برای سایر متدها هم میتوان از روش‌های بالا استفاده کرد.
نظرات مطالب
تبدیل بلوک‌های یونیکد در زیرنویس برای نمایش در تلویزیون‌ها و پلیرها
در مورد انکودینگ طبق گفته شما اون رو به UTF-8 تغییر دادم و دستگاه هم نمایش داد. برنامه رو هم به روز کردم و گستره شکستن جمله رو هم از 40 کاراکتر تا 50 کاراکتر تغییر دادم . چون فکر کنم قبلی جملات رو خیلی کوتاه می‌کرد.
در مورد به روزآوری firmware  هم بهتر هست که کاربرها اصلا این کار رو نکنن یا بعد از تحقیق در مورد آپدیت جدید تصمیم بگیرن. چون بسیاری از دستگاه‌ها به خصوص سامسونگ که خودم پلیر BD-d5900 رو دارم بعد از به روز آوری دچار مشکل میشن که این مشکل ویژگی cinavia هست که باعث میشه دستگاه بعضی از فیلم‌ها که شامل این فناوری هستن رو تشخیص بده که کپی هستند. بدین صورت که بعد از 15 تا 20 دقیقه از تماشای فیلم صدا قطع میشه و یک پیام روی صفحه نمایش داده میشه.

به غیر از اون سامسونگ در آپدیت‌ها جدیدش روش‌های مقابله با sammy Go  و روت کردن دستگاه رو هم گنجانده که از نصب اون جلوگیری کنه
کلا هیچ خیری در آپدیت این نوع دستگاه وجود نداره، ما هم به امید خواندن بهتر بعضی از کدکها آپدیت کردیم ولی تنها چیزی که گیرمان آمد همین بود و آخرین آپدیتش هم همین بود. حالا یه فکری هم باید برای حل این مشکل کرد حالا با داونگرید یا تغییرکد منطقه.
نظرات مطالب
ASP.NET MVC #23
- گزینه‌ی «"uncheck “Verify that file exists» را هم امتحان کنید.
- این سؤال خارج از بحث است. بازگرداندن View هیچ ارتباطی به مسیریابی ندارد. فقط کافی است بنویسید:
return View("~/Views/....مسیر کامل فایل", model);
تولید URLهای خودکار بر اساس اطلاعات مسیریابی در Viewهای برنامه، توسط متدهای توکار ActionLink و امثال آن انجام می‌شود.
- تمام خطاهای مدیریت نشده‌ی برنامه‌های وب در لاگ ویندوز ثبت می‌شوند. آن‌ها را بررسی کنید. همچنین ELMAH را هم نصب کنید تا خطاها را برای بررسی بیشتر لاگ کند.
- روش‌های قدیمی را با MVC کار نکنید. صفحه‌ی اول سایت، همان صفحه‌ای است که در مسیریابی پیش فرض تعریف شده‌است. یعنی همان اکشن متد Index در کنترلر Home، به همراه View ایی که مد نظر شما است.
نظرات مطالب
چندین Submit در یک Html Form و انتساب Action های مجزا به هر یک از Submit ها در MVC
ممنون دوست عزیز که توجه میکنی به مطالب بنده . به جز روشی که در مقاله بالا ذکر شد استفاده از data-form-action موجود در نگارش 5 از HTML اصولیترین روش یا بهتره بگیم تمیز‌ترین روش در بین مواردی هست که ذکر کردید ولی خب برنامه نویسای وب همیشه با مرورگرهای مختلف در جنگ هستن و فعلا زیاد استفاده از این روش جایز نیست چون بعضی از مرورگرهای کمی قدیمیتر پشتیبانی نمیکنند پس بهتره از تکنیکهای مورد اطمینانتر استفاده کنیم که نمونش در مقاله‌ی بالا ذکر شد ... 
 
این نمونه روش‌های خلاقانه و جالب از جمله ActionNameSelectorAttribute  به وفور در نسخه‌های جدید mvc وجود داره خوشبختانه . در مقالات بعدیم سعی میکنم مطالب تخصصی و تکنیکهای جالب دیگرو هم با دوستان به اشتراک بزارم . انصافا mvc یکی از شیرین‌ترین تکنلوژی هایی هست که هر سری سورسش رو مطالعه میکنم راه کارهای جدیدی برای پیاده سازی نرم افزارها توسط اون تکنیک‌ها دستگیرم میشه ...
 
پاینده باشید و موفق


نظرات مطالب
استفاده از لوسین برای برجسته سازی عبارت جستجو شده در نتایج حاصل
- اگر کوئری SQL شما از ایندکس استفاده می‌کند نیازی به روش‌های full text search ندارید و موتورهای بانک اطلاعاتی به اندازه کافی برای مدیریت این نوع موارد سریع و بهینه هستند.
- جستجوی این سایت و یا full text search تک کلمه‌ای نیست. می‌تونید جمله هم بنویسید. کلا برای بهبود سرعت، کاهش مصرف CPU و حافظه کوئری‌های SQL ایی که از like استفاده می‌کنند، روش full text search پیشنهاد می‌شود.
استفاده از like در عبارات SQL روش بهینه‌ای نیست چون هربار full table scan صورت می‌گیرد (تصور کنید 100 نفر در حال جستجوی مطالبی در سایت هستند. در این حالت مصرف CPU، استهلاک هارد و مصرف بالای حافظه را درحین اسکن کامل جداول بانک اطلاعاتی درنظر بگیرید)

نظرات مطالب
نکاتی در مورد نوشتن یک مطلب خوب و گیرا در یک سایت
در مورد نکته هشتم...
من قبلا هم این نظر خودم رو عنوان کردم. ولی به دلیل رعایت همین نکته هشتم، شما حتی منتشرش هم نکردید!
کاملا قبول دارم که اینجا یک پایگاه کاملا فنی هستش و امتیاز مثبتش هم همینه. اما قبول کنید برای یک برنامه نویس ( یا هر حرفه دیگه ای) علاوه بر نکات فنی، یک سری نکات هم هست که شاید بشه بهش گفت اخلاقیات حرفه، یا ترفندهای حرفه یا ...هر اسم دیگه ای. مثل تجربیاتی که مثلا شما از کار در محیط‌های مختلف به دست آوردید، روش‌های به روز نگه داشتن خود، چگونگی طی کردن مراحل پیشرفت و ..
به نظر من شاید بشه  نکات فنی رو از کتاب‌ها دریافت کرد، ولی این نکات که من عنوان کردم حتی اگه نمونه خارج از کشوری هم داشته باشن، شاید کارایی لازم رو در داخل کشور نداشته باشن، یعنی بومی سازی نشدن! و البته این مطالب با مطالب بی فایده ای که بعضی وبلاگ‌ها منتشر می‌کنند و خاطرات و مسایل شخصی خودشون رو در محیط کار مطرح می‌کنند متفاوته.
امیدوارم تونسته باشم منظورم رو بیان کنم.
نظرات مطالب
ASP.NET MVC #6
شاید مطالبی که من عنوان کردم این برداشت را به وجود آورده که MVC در مورد UI/UX بحث می‌کند؟
پاسخ اینکه، خیر. بحث ما در اینجا برنامه نویسی وب است نه طراحی رابط کاربری. MVC نظری در مورد دومین شما، در مورد لایه بندی دسترسی به داده‌ها، در مورد استفاده از ORM و غیره ندارد. به همین ترتیب در مورد اینکه ظاهر برنامه رو هم به چه نحوی طراحی کنید، نظری ندارد. اینجا شما آزاد هستید که مطابق روش‌های دیگری که فکر می‌کنید مفید هستند عمل کنید. بحث ما در اینجا جدا سازی منطق برنامه از لایه نمایشی است، برای اینکه بتونیم اون رو تست کنیم. در وب فرم‌ها این منطق به لایه نمایشی گره خورده. در MVC این دو از هم جدا شدن.
بنابراین به صورت خلاصه MVC نظری در مورد نحوه طراحی رابط کاربری و همچنین نحوه دسترسی به اطلاعات ندارد. نمیاد به شما بگه باید از مثلا EF استفاده کنید یا NH . یا اینکه از فلان فریم ورک CSS باید استفاده کنید یا خیر. دسترسی پذیری سایت شما چگونه باید باشد. ترکیب رنگ‌های آن چگونه باید باشد. این‌ها خارج از بحث MVC هستند.
در مورد UI/UX یک سری سایت و وبلاگ فعال و خوب هستند که به نظرم دنبال کردن اون‌ها خیلی مفید است. مثلا:
uxbooth
uxmag
uxmovement
smashingmagazine
نظرات مطالب
قبل از رفع باگ، برای آن تست بنویسید
- برای NH اگر از الگوی Repository استفاده می‌کنید می‌تونید از SQLite به عنوان ابزار نوشتن آزمون‌های واحد استفاده کنید. SQLite یک مزیت جالبی که دارد این است که امکان تشکیل دیتابیس در حافظه را دارد. این یعنی همان پیشنیاز اصلی نوشتن آزمون‌های واحد: سرعت بالای انجام کار، خارج نشدن از مرزهای سیستم. ضمن اینکه این بانک اطلاعاتی تشکیل شده، یک بانک اطلاعاتی واقعی است اما پس از پایان کار به صورت خودکار نابود می‌شود که برای آزمون‌های واحد بسیار مفید است.
برای ORM های دیگر چون پشتیبانی از سایر بانک‌های اطلاعاتی آن‌ها ضعیف است، روش‌های mocking و غیره مطرح می‌شود (که اینبار دیگر با یک دیتابیس واقعی کار نمی‌شود و سطح کار کمی پایین‌تر است) اما با NH راحت می‌شود از SQLite تشکیل شده در حافظه استفاده کرد. فقط باید تنظیمات اتصال ابتدای برنامه را عوض کرد.
- خوب؛ تا اینجا واژه کلیدی مورد نیاز برای جستجو مشخص شد، مابقی را در اینجا (^) جستجو کنید.
نظرات مطالب
آشنایی با الگوی M-V-VM‌ - قسمت دوم
- بله. اینجا یک بررسی نال بودن آیتم انتخاب شده باید قبل از کم و زیاد کردن مقادیر اضافه شود.
- دو breakpoint داخل هر دو متد CanExecute موجود قرار دهید. خواهید دید که به ازای هر بار کلیک بر روی دکمه‌های متناظر (افزایش یا کاهش)، متد CanExecute مرتبط هم در ابتدا یکبار فراخوانی می‌شود.
- غیرفعال کردن خودکار دکمه را من در این مثال ابتدایی پیاده سازی نکردم و مرتبط است با EventHandler تعریف شده‌ای به نام CanExecuteChanged. اگر CanExecuteChanged در متدهای CanExecute صدا زده شود این غیر فعال سازی هم رخ خواهد داد.
این مثال رو بر اساس توضیحات ذکر شده به روز کردم و از اینجا قابل دریافت است:
http://www.box.net/shared/zc27lmyvku

+ کلا در مورد روش‌های بهتر Model Validation در قسمت پنجم بیشتر بحث شده است. همچنین در قسمت‌های بعد این کلاس‌های خام مشتق شده از ICommand با نمونه‌های بهتر جایگزین می‌شوند (DelegateCommand و یا RelayCommand).
نظرات مطالب
آشنایی با NHibernate - قسمت ششم
تشخیص روابط بین جداول یعنی همان mapping خودکار،‌ یعنی همان نحوه‌ی تعریف کلاس‌های شما و برقراری روابطی که در طی چند قسمت مثال زده شد. سیستم پیش فرض NHibernate بر اساس اول طراحی کلاس‌ها و بعد ایجاد ارتباط با دیتابیس است که اینجا به صورت خودکار صورت می‌گیرد.
برای مثال در قسمت هشتم یک سیستم many-to-many مثال زده شده است به همراه کوئری‌هایی از نوع Linq . اینجا فقط تعریف کلاس‌هایی که بیانگر روابط many-to-many باشند مهم است؛ نحوه‌ی نگاشت خودکار آن‌ها به دیتابیس کار Fluent NHibernate است. (از این نوع مثال‌ها در هر قسمت پیاده سازی شده)
جزئیات ریز نحوه‌ی نگاشت خودکار با مطالعه‌ی سورس کتابخانه NHibernate و مشتقات آن قابل درک است (برای علاقمندان).
ضمنا فرقی نمی‌کند از Linq قسمت پنجم استفاده کنید یا هر روش موجود دیگری برای کوئری گرفتن (زمانیکه Linq هست و نگارش‌های جدید آن برای NHibernate پیشرفت زیادی داشته، چرا روش‌های دیگر؟).