برنامه نویسی

AutoEntityGenerator – اولین افزونه استودیو تصویری من.

Summarize this content to 400 words in Persian Lang
(اولین بار در What The # Do I Know؟ منتشر شد؟)

TL;DR – پیوندهایی به Visual Studio Marketplace و مخزن GitHub در پایان وجود دارد.

همه چیز از زمانی شروع شد که من یک ویدیوی یوتیوب توسط آمیچای مانتین بند به نام Controllers From Scratch Using .NET 8 را تماشا کردم.جایی که او نحوه درست طراحی و ساخت یک کنترلر ASP.NET را به عنوان بخشی از آموزش ASP.NET 8 REST API خود نشان می دهد. (به عنوان یک نکته، من به شدت توصیه می کنم در کانال یوتیوب او مشترک شوید).

یکی از مواردی که او در این ویدیو در مورد آن صحبت کرد، ساختار نقاط پایانی بود که او دنبال می کند و توصیه می کند – و این ساختار دارای سه بخش است:

نگاشت از شی درخواست به مدل دامنهعمل بر روی مدل دامنهنگاشت نتیجه آن عمل به یک شی پاسخمثالی که او نشان می دهد ایجاد یک محصول است، بنابراین اجازه دهید به سرعت کد این مثال را به شما نشان دهم:

public IActionResult Create(CreateProductRequest request)
{
// mapping request to domain
var product = request.ToDomain();

// acting on domain object
_productService.Create(product);

// mapping domain to response and return to client
return CreatedAtAction(
actionName: nameof(Get),
routeValues: new { ProductId: product.Id },
value: ProductResponse.FromDomain(product)
);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

البته، در این ویدیو او مدل دامنه، DTO های مختلف درخواست و پاسخ، و روش های نگاشت بین آنها را ایجاد می کند – و این همان چیزی است که ایده پسوند من را به من داد – که یک ایده بسیار ساده است: اگر به جای اگر به صورت دستی همه این DTOها و نگاشتها را بنویسیم، یک عمل لامپ خواهیم داشت که همه این کدها را تنها با چند کلیک ماوس، با استفاده از یک فرم ساده مانند فرم “Extract interface” برای ما تولید می کند؟

با داشتن این ایده و دانش صفر در مورد برنامه های افزودنی استودیوی بصری، برای کمک با ChatGPT تماس گرفتم (و سپس Claude.AI را نیز درگیر کردم). شروع کار تا حدودی دشوار بود زیرا هر دوی آنها مرا به مسیرهای گمراه کننده فرستادند، اما پس از چند آزمایش و خطا، من موفق شدم با یک POC ساده شروع به کار کنم که آیتم منوی لامپ را نشان می دهد.پس از راه‌اندازی POC، زمان آن فرا رسیده بود که بر روی کاری که می‌خواستم افزونه انجام دهد، تمرکز کنم.

اولین قدم این بود که آیتم منو را فقط در هنگام استفاده از لامپ در تعریف کلاس یا رکورد نشان دهیم – که بسیار ساده بود. سپس از کمک ChatGPT زیادی برای دریافت اطلاعات مورد نیاز از کد استفاده کردم – فضای نام، نام کلاس (یا رکورد)، سازنده های آن،خصوصیات عمومی، پارامترهای نوع و سایر اطلاعات مرتبط،همه در کلاسی که Entity نامیده‌ام جمع‌آوری می‌شوند (و دسته‌ای از کلاس‌های دیگر مانند Property، Namespace و غیره):

public class Entity
{
public Project Project { get; set; }
public Namespace Namespace { get; set; }
public string Name { get; set; }
public ListConstructor> Constructors { get; set; }
public string SourceFilePath { get; set; }
public ListProperty> Properties { get; set; }
public Liststring> TypeParameters { get; set; }
public Liststring> GenericConstraints { get; set; }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به دست آوردن اطلاعات موجودیت اساساً یک نگاشت ساده بین تعاریف Microsoft.CodeAnalysis.CSharp.Syntax با تعاریف خودم بود، اما این یک مرحله حیاتی از فرآیند است.گام بعدی ساخت UI بود که حاوی فرمی است که در آن کاربر می تواند انتخاب کند که کدام ویژگی ها را می خواهد در DTO گنجانده شود، چگونه آن را نامگذاری کند، نام فایل آن چه باشد، در چه دایرکتوری ذخیره شود، و در کدام جهت. برای تولید نقشه

مرحله بعدی استفاده از اطلاعات UI برای تولید یک شیء Entity جدید بود که نشان دهنده DTO است، سپس از آن موجودیت و نمونه اصلی برای تولید کد برای DTO و نگاشت ها استفاده کنید و در نهایت، آن کد را در آن ذخیره کنید. فایل های جدید در دایرکتوری انتخاب شده توسط کاربر

حدود 3 تا 4 هفته کار پاره وقت (حدود 25 تا 30 ساعت کاری در هفته) طول کشید تا اولین نسخه را به نقطه ای برسانم که احساس خوبی نسبت به آن دارم تا آن را برای عموم منتشر کنم – و هنوز مقدار زیادی وجود دارد. از کارهایی که برای انجام آن باقی مانده است، اما IMHO برای کار با آن به اندازه کافی خوب است و بنابراین به اندازه کافی خوب است که منتشر شود.

در حال حاضر، فقط می‌توان آن را در Visual Studio Community 2019 یا 2022 نصب کرد، اما من قصد دارم در آینده (امیدوارم نه چندان دور) آن را برای نسخه‌های Professional و Enterprise نیز در دسترس قرار دهم.

این کاملاً منبع باز و رایگان است، می توانید آن را در GitHub یا در Visual Studio Marketplace بررسی کنید.

اگر آن را امتحان کرده باشید، از هر بازخوردی، خوب یا بد، بسیار سپاسگزار خواهم بود.

(اولین بار در What The # Do I Know؟ منتشر شد؟)

TL;DR – پیوندهایی به Visual Studio Marketplace و مخزن GitHub در پایان وجود دارد.

همه چیز از زمانی شروع شد که من یک ویدیوی یوتیوب توسط آمیچای مانتین بند به نام Controllers From Scratch Using .NET 8 را تماشا کردم.
جایی که او نحوه درست طراحی و ساخت یک کنترلر ASP.NET را به عنوان بخشی از آموزش ASP.NET 8 REST API خود نشان می دهد. (به عنوان یک نکته، من به شدت توصیه می کنم در کانال یوتیوب او مشترک شوید).

یکی از مواردی که او در این ویدیو در مورد آن صحبت کرد، ساختار نقاط پایانی بود که او دنبال می کند و توصیه می کند – و این ساختار دارای سه بخش است:

نگاشت از شی درخواست به مدل دامنه
عمل بر روی مدل دامنه
نگاشت نتیجه آن عمل به یک شی پاسخ
مثالی که او نشان می دهد ایجاد یک محصول است، بنابراین اجازه دهید به سرعت کد این مثال را به شما نشان دهم:

public IActionResult Create(CreateProductRequest request)
{
    // mapping request to domain
    var product = request.ToDomain();

    // acting on domain object
    _productService.Create(product);

    // mapping domain to response and return to client
    return CreatedAtAction(
        actionName: nameof(Get),
        routeValues: new { ProductId: product.Id },
        value: ProductResponse.FromDomain(product)
    );
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

البته، در این ویدیو او مدل دامنه، DTO های مختلف درخواست و پاسخ، و روش های نگاشت بین آنها را ایجاد می کند – و این همان چیزی است که ایده پسوند من را به من داد – که یک ایده بسیار ساده است: اگر به جای اگر به صورت دستی همه این DTOها و نگاشتها را بنویسیم، یک عمل لامپ خواهیم داشت که همه این کدها را تنها با چند کلیک ماوس، با استفاده از یک فرم ساده مانند فرم “Extract interface” برای ما تولید می کند؟

با داشتن این ایده و دانش صفر در مورد برنامه های افزودنی استودیوی بصری، برای کمک با ChatGPT تماس گرفتم (و سپس Claude.AI را نیز درگیر کردم). شروع کار تا حدودی دشوار بود زیرا هر دوی آنها مرا به مسیرهای گمراه کننده فرستادند، اما پس از چند آزمایش و خطا، من موفق شدم با یک POC ساده شروع به کار کنم که آیتم منوی لامپ را نشان می دهد.
پس از راه‌اندازی POC، زمان آن فرا رسیده بود که بر روی کاری که می‌خواستم افزونه انجام دهد، تمرکز کنم.

اولین قدم این بود که آیتم منو را فقط در هنگام استفاده از لامپ در تعریف کلاس یا رکورد نشان دهیم – که بسیار ساده بود. سپس از کمک ChatGPT زیادی برای دریافت اطلاعات مورد نیاز از کد استفاده کردم – فضای نام، نام کلاس (یا رکورد)، سازنده های آن،
خصوصیات عمومی، پارامترهای نوع و سایر اطلاعات مرتبط،
همه در کلاسی که Entity نامیده‌ام جمع‌آوری می‌شوند (و دسته‌ای از کلاس‌های دیگر مانند Property، Namespace و غیره):

public class Entity
{
    public Project Project { get; set; }
    public Namespace Namespace { get; set; }
    public string Name { get; set; }
    public ListConstructor> Constructors { get; set; }
    public string SourceFilePath { get; set; }
    public ListProperty> Properties { get; set; }
    public Liststring> TypeParameters { get; set; }
    public Liststring> GenericConstraints { get; set; }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به دست آوردن اطلاعات موجودیت اساساً یک نگاشت ساده بین تعاریف Microsoft.CodeAnalysis.CSharp.Syntax با تعاریف خودم بود، اما این یک مرحله حیاتی از فرآیند است.
گام بعدی ساخت UI بود که حاوی فرمی است که در آن کاربر می تواند انتخاب کند که کدام ویژگی ها را می خواهد در DTO گنجانده شود، چگونه آن را نامگذاری کند، نام فایل آن چه باشد، در چه دایرکتوری ذخیره شود، و در کدام جهت. برای تولید نقشه

مرحله بعدی استفاده از اطلاعات UI برای تولید یک شیء Entity جدید بود که نشان دهنده DTO است، سپس از آن موجودیت و نمونه اصلی برای تولید کد برای DTO و نگاشت ها استفاده کنید و در نهایت، آن کد را در آن ذخیره کنید. فایل های جدید در دایرکتوری انتخاب شده توسط کاربر

حدود 3 تا 4 هفته کار پاره وقت (حدود 25 تا 30 ساعت کاری در هفته) طول کشید تا اولین نسخه را به نقطه ای برسانم که احساس خوبی نسبت به آن دارم تا آن را برای عموم منتشر کنم – و هنوز مقدار زیادی وجود دارد. از کارهایی که برای انجام آن باقی مانده است، اما IMHO برای کار با آن به اندازه کافی خوب است و بنابراین به اندازه کافی خوب است که منتشر شود.

در حال حاضر، فقط می‌توان آن را در Visual Studio Community 2019 یا 2022 نصب کرد، اما من قصد دارم در آینده (امیدوارم نه چندان دور) آن را برای نسخه‌های Professional و Enterprise نیز در دسترس قرار دهم.

این کاملاً منبع باز و رایگان است، می توانید آن را در GitHub یا در Visual Studio Marketplace بررسی کنید.

اگر آن را امتحان کرده باشید، از هر بازخوردی، خوب یا بد، بسیار سپاسگزار خواهم بود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا