آیا استفاده از FullName یک کلاس تضادی با Clean Code دارد؟
وضعیت: پاسخ داده شده

سلام

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

تشکر

آیا استفاده از Handler در یک Handler دیگر در الگوی Mediator صحیح است؟
وضعیت: پاسخ داده شده

سلام

یک پروژه با کتابخانه MediatR ایجاد کردم و برای عملیات CRUD به ازای تمام Entityها Handlerهای مورد نیاز را پیاده سازی کردم. برخی از این Handlerها در زمان اجرای Bussiness مربوط به خودش، نیاز داره تا اطلاعاتی را در یک جدول دیگر در بانک اطلاعاتی ذخیره کنه ولی افزودن اطلاعات جدید در جدول دوم، مستلزم لحاظ نمودن Business مربوط به Handler دوم است. به تمامی Handlerها IEntityRepository مربوط به Entity که در Domain تعریف شده است تزریق می شود. در لایه Infrastructure نیز تمام متدهای موجود در IEntityRepository تحت نام EntityRepository پیاده سازی شده اند.

سوال:

  1. آیا با توجه به سناریوی بالا، امکان تزریق MediatR.IMediator در Handler اول وجود دارد (از حیث Best Practice بودن)؟
  2. اگر آیتم یک مناسب نباشد آیا باید یک لایه دیگری به پروژه افزوده شود تا امکان استفاده از Handlerهای مشترک وجود داشته باشد؟
  3. در یکی از منابع اینترنتی به آیتم شماره یک عنوان Anti Pattern داده بودند. آیا درست است؟

تشکر

اضافه کردن ویژگی ای برای ذخیره عناوین مورد علاقه
وضعیت: پاسخ داده شده

سلام

چطور میشه در سایت dntips.ir موضوعات مورد علاقه را در حساب کاربری Bookmark کنیم؟ اگر این ویژگی وجود نداشته باشد آیا امید به اضافه شدن این ویژگی هست؟

تشکر

تا چه میزان کلیدهای خارجی باید در لایه Application بررسی شوند؟
وضعیت: پاسخ داده شده

سلام

زمانی که کاربر یک درخواست از نوع POST را به API ارسال میکنه، نتیجه انجام عملیات در متغیری با نام IsSuccess برگردانده میشه. اگر مقدار این متغیر برابر false باشه یعنی متغیر ErrorList حاوی پیغام است.

سناریو:

  • نام Entity در این مثال Product هست که پنج Navigation Property داره که با Entityهای دیگر دارای Relation هستند.
  • لایه Application قبل از اینکه در Entity یک ردیف جدید ثبت کنه ابتدا با دستور Any مقدار یکی از Propertyها را بررسی میکنه و اگر وجود نداشت، یک Error در ErrorList اضافه میکنه و نتیجه را بصورت IsSeccess=false بر میگردونه.
  • در واقع حالا کاربر مطلع هست که مثلا ProductTypeId اشتباه است و اصلا ProductTypeی با این شناسه وجود نداره.

سوال:

  1. آیا ضروریه تا به ازای هر کلید خارجی که در Entity تعریف شده بدین صورت اعتبار تمام آنها بررسی و به کلاینت اعلام شود؟
  2. اگر تعداد کلیدهای خارجی در یک Entity زیاد باشد راه حل چیست؟
  3. آیا اگر اطلاعات را مستقیما به بانک اطلاعاتی ارسال کنیم تا خود بانک اطلاعاتی صحت وجود این کلیدها را بررسی کند بهتر است یا خیر؟
  4. اگر برعهده بانک اطلاعاتی بگذاریم چطور باید به کلاینت و به ازای هر کلید خارجی که باعث بروز Exception شده اطلاع رسانی کنیم؟
  5. در مجموع روش مناسب کدام است؟

تشکر

چطور باید برای یک پروژه دفترچه مشخصات فنی تهیه کرد؟
وضعیت: پاسخ داده شده

سلام

نمیدونم عبارات و اصطلاحاتی که بکار میبرم درسته یا خیر.

آیا برای تهیه دفتر مشخصات فنی یک پروژه نرم افزاری الگو و ساختار استانداردی وجود دارد؟ در واقع قصد دارم تمامی جزئیات ساختاری پروژه را مستند کنم تا بشه بر مبنای اون دفترچه، برنامه را از حیث پیاده سازی تجزیه تحلیل کرد.

تشکر

آیا امکان اجرای API روی IIS تنها برای یک سرور وجود دارد؟
وضعیت: پاسخ داده شده

سلام

یک API دارم که قراره روی یک سرور و توسط IIS اجرا بشه. برنامه کلاینت یک برنامه WindowApp هستش. در حال حاضر این دو با هم ارتباط دارند و با بخوبی کار میکنند. ولی این امکان نیز وجود داره که API را در جای سرور دیگری نیز اجرا و مجددا استفاده کنند. آیا همانند برنامه های ویندوزی امکان این وجود داره که یک برنامه API جهت تشخیص سرور مورد نظر، اطلاعات سخت افزاری سرور را بررسی کند یا راه حل دیگه ای برای این موضوع وجود داره؟

تشکر

آیا امکان استفاده از Extension Method در زمان Select وجود دارد؟
وضعیت: پاسخ داده شده

سلام

در زمان دریافت اطلاعات از بانک اطلاعاتی می خوام فقط همان ستون هایی که نیاز دارم را از بانک دریافت کنم. بنابراین Query را بصورت زیر نوشتم:

var result = await query.Select(x => new Models.Output.Piping.LineJoints.LineJoint2
{
    Id = x.Id,
    JointNo = x.JointNo
})
.ToListAsync();

حالا برای اینکه از تکرار جلوگیری کنم، یک Extension Method نوشتم که کار تبدیل رو انجام بده:

public static class Ext
{
    public static Models.Output.Piping.LineJoints.LineJoint2 ToModel(
        this Domain.Entities.Piping.LineJoints.LineJoint domain)
    {
        return new Models.Output.Piping.LineJoints.LineJoint2
        {
            Id = domain.Id,
            JointNo = domain.JointNo
        };
    }
}

در نهایت Query را بصورت زیر تغییر دادم:

var result = await query.Select(x => x.ToModel()).ToListAsync();

سوال:

در حالت اول که تمام ستون ها را تعریف میکنم، بانک اطلاعاتی دقیقا همان ستون ها را بر میگرداند ولی در حالتی که از Extension Methodاستفاده کردم، بانک اطلاعاتی تمامی ستون ها را بر می گرداند و در سمت Client تبدیل انجام می شود. آیا راهی وجود داره که بتونم از نوشتن نام تمام ستون ها همانند نمونه اولیه جلوگیری کنم و از نام یک کلاس و یا چیزی شبیه Extension استفاده کنم؟ تشکر

چطور باید از Session در WebApi استفاده کرد؟
وضعیت: پاسخ داده شده

سلام

جهت استفاده از اطلاعات موجود در Session بصورت زیر در program فعال کردم:

builder.Services.AddSession(options =>
{
  options.IdleTimeout = TimeSpan.FromSeconds(30);
  options.Cookie.HttpOnly = true;
  options.Cookie.IsEssential = true;
});


app.UseSession();

در زمان اجرا پیغام خطای زیر زیر صادر شده:

'Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Session.ISessionStore Lifetime: Transient ImplementationType: Microsoft.AspNetCore.Session.DistributedSessionSto re': Unable to resolve service for type 'Microsoft.Extensions.Caching.Distributed.IDistrib utedCache' while attempting to activate 'Microsoft.AspNetCore.Session.DistributedSessionSt ore'.)'

آنچه که متوجه شدم باید کتابخانه Microsoft.Extensions.Caching.StackExchangeRedis نصب شود.

سوالم اینه که آیا نصب کتابخانه دوم ضروریه؟