ABP Framework ile Ad?m Ad?m Yaz?l?m Geli?tirme ? B?l?m 3: Veri Modeli Olu?turma

Admin 

Her uygulaman?n temelinde bir veri modeli bulunur. ABP Framework, veri modelinizi tan?mlaman?z ve veritaban?yla etkile?im kurman?z i?in g??l? ara?lar ve prensipler sunar. Bu b?l?mde, entity’ler olu?turmaktan veritaban? migrasyonlar?na kadar olan s?reci ad?m ad?m inceleyece?iz.

Entity Kavram? ve Entity Olu?turma

Entity (Varl?k), uygulaman?z?n i? d?nyas?ndaki benzersiz bir nesneyi temsil eden bir s?n?ft?r. Her entity’nin benzersiz bir kimli?i (Id) vard?r ve ya?am d?ng?s? boyunca durumu de?i?ebilir. ABP Framework’te bir s?n?f? entity olarak tan?mlamak i?in Volo.Abp.Domain.Entities.Entity<TKey> s?n?f?ndan t?retilir.

?rnek bir Book entity’si:

C#

using System;
using Volo.Abp.Domain.Entities;

namespace MyProject.Books
{
    public class Book : Entity<Guid>
    {
        public string Name { get; set; }
        public BookType Type { get; set; }
        public DateTime PublishDate { get; set; }
        public float Price { get; set; }
        // Ek ?zellikler
    }

    public enum BookType
    {
        Undefined,
        Adventure,
        ScienceFiction,
        Fantasy,
        Horror
    }
}

Aggregate Root ve IEntity Interface’i

Aggregate Root, DDD’de bir dizi ilgili nesnenin (entity’ler ve de?er nesneleri) tutarl?l???n? sa?layan ana entity’dir. Bir aggregate root’un d??ar?dan eri?ilebilen tek public varl??? kendisidir; i?erideki di?er entity’lere ve de?er nesnelerine do?rudan eri?im engellenir.

ABP’de bir entity’yi aggregate root olarak i?aretlemek i?in Volo.Abp.Domain.Entities.AggregateRoot<TKey> s?n?f?ndan t?retilir:

C#

using Volo.Abp.Domain.Entities;

namespace MyProject.Books
{
    public class Book : AggregateRoot<Guid> // Art?k bir Aggregate Root
    {
        public string Name { get; set; }
        // ... di?er ?zellikler
    }
}

IEntity interface’i, bir nesnenin bir entity oldu?unu ve bir kimli?e sahip oldu?unu belirten temel bir aray?zd?r. Entity ve AggregateRoot s?n?flar? bu aray?z? zaten implemente eder.

Entity ?zellikleri ve Varsay?lan Alanlar (Id, CreationTime, vb.)

ABP Framework, entity’ler i?in bir?ok faydal? varsay?lan ?zellik sunar. Bu ?zellikler, belirli aray?zleri implemente ederek entity’lerinize otomatik olarak eklenebilir:

  • Id: Entity<TKey> veya AggregateRoot<TKey> kullan?larak otomatik olarak eklenir. Genellikle Guid veya int tipindedir.
  • ICreationAudited: CreationTime ve CreatorId alanlar?n? ekler. Bir kay?t olu?turuldu?unda otomatik olarak doldurulur.
  • IModificationAudited: LastModificationTime ve LastModifierId alanlar?n? ekler. Bir kay?t g?ncellendi?inde otomatik olarak doldurulur.
  • IDeletionAudited: IsDeleted, DeletionTime ve DeleterId alanlar?n? ekler. “Soft delete” (yumu?ak silme) ?zelli?i i?in kullan?l?r.
  • IVersionedEntity: ExtraProperties ve ConcurrencyStamp gibi alanlar ekleyerek e?zamanl?l?k kontrol? sa?lar.

?rnek: Denetlenebilir bir Book entity’si:

C#

using System;
using Volo.Abp.Domain.Entities.Auditing;

namespace MyProject.Books
{
    public class Book : FullAuditedAggregateRoot<Guid> // Hem yaratma, hem de?i?tirme, hem de silme denetimi
    {
        public string Name { get; set; }
        public BookType Type { get; set; }
        public DateTime PublishDate { get; set; }
        public float Price { get; set; }
    }
}

EF Core Entegrasyonu ve DbContext Yap?land?rmas?

ABP Framework, veritaban? etkile?imi i?in varsay?lan olarak Entity Framework Core (EF Core) kullan?r. YourProjectName.EntityFrameworkCore projesinde bulunan YourProjectNameDbContext s?n?f?, uygulaman?z?n veritaban? ba?lam?n? temsil eder.

Bu s?n?f, AbpDbContext<YourProjectNameDbContext> s?n?f?ndan t?retilir ve DbSet ?zellikleri arac?l???yla entity’lerinizi veritaban? tablolar?na e?le?tirirsiniz:

C#

using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using MyProject.Books;

[ConnectionStringName("Default")]
public class MyProjectDbContext : AbpDbContext<MyProjectDbContext>
{
    public DbSet<Book> Books { get; set; }

    public MyProjectDbContext(DbContextOptions<MyProjectDbContext> options)
        : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        /* Configure your own tables/entities inside here */

        builder.Entity<Book>(b =>
        {
            b.ToTable(MyProjectConsts.DbTablePrefix + "Books",
                      MyProjectConsts.DbSchema);
            b.ConfigureByConvention(); // Auto configure for the base properties
            b.Property(x => x.Name).IsRequired().HasMaxLength(128);
        });
    }
}

OnModelCreating metodu, entity’lerinizin veritaban? tablolar?na nas?l e?le?tirilece?ini (tablo ad?, kolon adlar?, k?s?tlamalar vb.) yap?land?rman?za olanak tan?r. ConfigureByConvention() ABP’nin varsay?lan mapping kurallar?n? uygulamas?n? sa?lar.

Code First Yakla??m? ile Migration Olu?turma

ABP Framework, EF Core’un Code First yakla??m?n? ve Migrations ?zelli?ini kullanarak veritaban? ?eman?z? kodunuzdan y?netmenizi sa?lar.

  1. Migration Ekleme: Entity’lerinizde veya DbContext’inizde de?i?iklik yapt???n?zda, Package Manager Console (PMC) veya komut sat?r? (CLI) ?zerinden yeni bir migration olu?turursunuz:
    • PMC: Add-Migration "Added_Books_Table" (TodoApp.EntityFrameworkCore projesini se?ti?inizden emin olun)
    • CLI: dotnet ef migrations add "Added_Books_Table" -p src/TodoApp.EntityFrameworkCore
  2. Bu komut, veritaban? ?emas?nda yap?lan de?i?iklikleri tan?mlayan bir C# dosyas? olu?turur.

Veritaban? ?emas?n? G?ncelleme

Migration dosyas? olu?turulduktan sonra, bu migration’? veritaban?n?za uygulamal?s?n?z:

  1. PMC: Update-Database (TodoApp.EntityFrameworkCore projesini se?ti?inizden emin olun)
  2. CLI: dotnet ef database update -p src/TodoApp.EntityFrameworkCore

ABP projelerinde genellikle YourProjectName.DbMigrator ad?nda ayr? bir proje bulunur. Bu proje, uygulaman?z?n ilk ba?lang?c?nda veya manuel olarak ?al??t?r?larak veritaban? migrasyonlar?n? otomatik olarak uygulaman?za ve ba?lang?? verilerini (seed data) eklemenize olanak tan?r.

Seed Data Olu?turma

Uygulaman?z?n ilk ?al??mas?nda veya belirli senaryolar i?in varsay?lan veriler olu?turmak isteyebilirsiniz (?rn. y?netici kullan?c?s?, temel roller, ba?lang?? kategorileri). Buna Seed Data denir.

ABP’de seed data olu?turmak i?in IDataSeeder interface’ini implemente eden servisler kullanabilirsiniz. Bu servisler, YourProjectNameDbMigrationModule veya benzeri bir mod?l i?erisinde ?a?r?larak veritaban? ba?lat?l?rken ?al??t?r?l?r.

?rnek bir BookStoreDataSeeder s?n?f?:

C#

using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using MyProject.Books;

namespace MyProject
{
    public class MyProjectDataSeeder : IDataSeeder, ITransientDependency
    {
        private readonly IRepository<Book, Guid> _bookRepository;

        public MyProjectDataSeeder(IRepository<Book, Guid> bookRepository)
        {
            _bookRepository = bookRepository;
        }

        public async Task SeedAsync(DataSeedContext context)
        {
            if (await _bookRepository.GetCountAsync() <= 0)
            {
                await _bookRepository.InsertAsync(
                    new Book
                    {
                        Name = "1984",
                        Type = BookType.ScienceFiction,
                        PublishDate = new DateTime(1949, 6, 8),
                        Price = 19.84f
                    },
                    autoSave: true
                );

                await _bookRepository.InsertAsync(
                    new Book
                    {
                        Name = "The Hitchhiker's Guide to the Galaxy",
                        Type = BookType.ScienceFiction,
                        PublishDate = new DateTime(1979, 10, 12),
                        Price = 42.0f
                    },
                    autoSave: true
                );
            }
        }
    }
}

Bu b?l?m, veri modelinizi olu?turma ve veritaban? etkile?imini y?netme s?recini kapsamaktad?r. Sonraki b?l?mde, domain katman?n?z? nas?l geli?tirece?inizi ??renece?iz.

Recommended Posts

Bilgi G?venli?i

Sosyal M?hendislik

” Bir bilgisayar sistemini hacklemek zor olabilir. Ama bir insan? kand?rmak ?o?u zaman ?ok daha kolayd?r. “ ??te sosyal m?hendislik tam olarak burada devreye girer. G?n?m?zde bir?ok siber sald?r?, karma??k yaz?l?mlardan ?ok insan psikolojisini hedef al?r. ??nk? en g??l? g?venlik sistemleri bile, yanl?? ki?iye verilen tek bir ?ifreyle etkisiz hale gelebilir. Sosyal m?hendislik; insanlar?n g?ven, […]

Admin 

ABP Framework ile Ad?m Ad?m Yaz?l?m Geli?tirme ? B?l?m 7: Kullan?c? Aray?z? Geli?tirme

Uygulaman?n kullan?c?larla etkile?im kurdu?u katman olan Kullan?c? Aray?z? (UI) Katman?, genellikle ASP.NET Core MVC (Razor Pages), Angular veya Blazor gibi teknolojilerle geli?tirilir. ABP Framework, se?ti?iniz UI teknolojisiyle sorunsuz entegrasyon sa?layarak geli?tirme s?recinizi h?zland?r?r ve ortak UI ihtiya?lar?n? kar??lar. Bu b?l?mde, ABP ile kullan?c? aray?z? geli?tirmenin temel y?nlerini ele alaca??z. Se?ilen UI Teknolojisine G?re Temel Yap?land?rma […]

Admin 

ABP Framework ile Ad?m Ad?m Yaz?l?m Geli?tirme ? B?l?m?6: API Katman? Geli?tirme

Modern uygulamalarda API (Application Programming Interface) katman?, hem istemci uygulamalar (mobil, web) hem de di?er servislerle ileti?im kurmak i?in kritik ?neme sahiptir. ABP Framework, g??l? ve kolay yap?land?r?labilir bir API katman? olu?turman?z? sa?lar. Bu b?l?mde, ABP’nin API geli?tirme ?zelliklerini ve en iyi pratikleri inceleyece?iz. Auto API Controller ?zellikleri ABP Framework’?n en kullan??l? ?zelliklerinden biri Auto […]

Admin 

Leave A Comment