Clean Architecture in ASP.NET 8 Core Web API — CQRS — Mediator | Visual Studio

  1. Pertama bukalah Visual Studio kemudian pilihlah “Create a new project”

Pilih Create a new project

Pilih Create a new project


Memilih template ASP .NET Core Web API


Memberi nama dari template ini yaitu “CleanArchWithCQRSandMediator.API”


Memilih versi dari .NET, saya memilih versi 8 sesuai dengan kebutuhan saya


Setelah selesai create maka template dari Web API berhasil dibuat


2. Setelah membuat template dari Web API, maka setelahnya saya ingin membuat template class dari Domain

Pertama saya klik kanan pada “Solution ‘CleanArch…’”


Setelahnya saya klik Add → New Project


Kemudian saya memilih template “Class Library”


Saya menamainya “CleanArchWithCQRSandMediator.Domain”


Kemudian disini saya memilih versi .NET 8 sesuai kebutuhan saya


Setelah berhasil dibuat, maka sekarang ada 2 lapis proyek yaitu API & Domain


Kemudian saya menghapus file Class1.cs


Saya juga ingin menambahkan folder baru yaitu “Entity” & “Repository”. Caranya adalah dengan Add → New Folder


Folder berhasil dibuat


3. Setelah membuat template dari Domain, maka setelahnya saya ingin membuat template class dari Application

Pertama saya klik kanan pada “Solution ‘CleanArch…’”


Setelahnya saya klik Add → New Project


Kemudian saya memilih template “Class Library”


Saya menamainya “CleanArchWithCQRSandMediator.Application”


Kemudian disini saya memilih versi .NET 8 sesuai kebutuhan saya


Setelah berhasil dibuat, maka sekarang ada 3 lapis proyek yaitu API, Domain, dan Application


Kemudian saya menghapus file Class1.cs


Saya juga ingin menambahkan beberapa folder baru didalam Application. Caranya adalah dengan Add → New Folder


Folder “Blogs” ini akan saya gunakan untuk logika CRUD


Didalam folder “Blogs” saya membuat 2 folder yaitu “Commands” & “Queries” serta beberapa folder didalamnya


Beginilah tampilan tree dari folder tersebut


Setelah menambahkan “Blogs” saya ingin menambahkan folder baru lagi yaitu “Common”. Folder “Common” ini akan saya gunakan untuk validasi dan pemetaan


Didalam folder “Common” saya membuat beberapa folder yaitu “Behaviours”, “Exceptions”, dan “Mappings”


Beginilah tampilan tree dari folder Common


4. Setelah membuat beberapa folder saya ingin membuat class didalam folder “Application” ini

Saya klik Add → Class


Class ini saya namai “ConfigureServices”


5. Sebelum melanjutkan, saya ingin menginstall paket NuGet di dalam “Domain”

Pertama klik kanan di “Domain” lalu memilih “Manage NuGet packages”


Saya menginstall paket “MediatR”


Jika ada tampilan ini maka pilihlah Apply


Jika berhasil diinstall maka akan ada centang hijau


6. Kemudian didalam “Application” juga saya menginstall beberapa paket NuGet

Pertama klik kanan di “Application” lalu memilih “Manage NuGet packages”


Di sini saya search dulu “automapper.extensions.microsoft.dependency” kemudian menginstallnya


Karena ada tampilan ini maka saya memilih “Apply”


Di sini saya search “fluentvalidation” dulu, lalu menginstallnya


Kemudian karena ada tampilan seperti ini maka saya klik “Apply”


Barulah sekarang kita dapat mengedit file “ConfigureServices.cs”

// ConfigureServices.cs = Application

using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CleanArchWithCQRSandMediator.Application
{
    public static class ConfigureServices
    {
        // Metode untuk menambah layanan aplikasi ke IServiceCollection
        public static IServiceCollection AddApplicationService(this IServiceCollection services)
        {
            // Mendaftarkan AutoMapper ke IServiceCollection

            // Assembly.GetExecutingAssembly() digunakan untuk mendapatkan informasi tentang
            // assembly saat ini, yang berisi kelas-kelas aplikasi ini.
            // Ini penting karena kita ingin mendaftarkan profil-profil pemetaan AutoMapper
            // yang ada di assembly saat ini ke IServiceCollection.
            services.AddAutoMapper(Assembly.GetExecutingAssembly());

            // Mendaftarkan MediatR ke IServiceCollection

            // Assembly.GetExecutingAssembly() digunakan lagi untuk mendapatkan informasi tentang
            // assembly saat ini, yang berisi kelas-kelas aplikasi ini.
            // Ini penting karena kita ingin MediatR menemukan pengendalian (handlers)
            // dari penggunaan kasus (use cases) yang ada di dalam assembly saat ini.
            services.AddMediatR(ctg =>
            {
                // Mendaftarkan semua layanan dari assembly saat ini ke kontainer dependensi

                // Ini memungkinkan MediatR untuk menemukan dan mendaftarkan pengendalian (handlers)
                // dari penggunaan kasus (use cases) yang ada di dalam assembly saat ini ke kontainer dependensi.
                ctg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
            });

            // Mengembalikan IServiceCollection yang diperbarui
            return services;
        }
    }
}

7. Setelah menginstall paket dan mengedit file di “Application”, selanjutnya saya ingin membuat folder ini bereferensi ke dalam “Domain” karena “Application” bergantung kepada “Domain”

Pertama saya klik Add → Project Reference


Di sini saya menceklis hanya Domain saja, kemudian klik OK