Bu uygulama küçük/orta ölçekli bir kütüphane için kitapların takibi, üyelerin yönetimi ve ödünç verme süreçlerini DevExpress XAF üzerinde standartlaştırmak için geliştirilmiştir. Hedef; güvenli, doğrulama kurallarıyla tutarlı, ve kolay kullanılır bir arayüz sunmaktır.
- Uygulama Türü: DevExpress XAF (Blazor Server)
- Dil: .NET 9, ASP.NET Core, C#
- UI: DevExpress Blazor v25.1
- ORM: Entity Framework Core 8 (SqlServer, Proxies) —
DXApplication4EFCoreDbContext - Güvenlik / Yetkilendirme: XAF Security (Integrated Mode), PermissionPolicyRole & ApplicationUser, PasswordAuthentication; Roller: Administrators, Default
- Doğrulama: DevExpress Validation (attribute tabanlı kurallar: zorunlu alan, tarih tutarlılığı, benzersizlik, üye başına aktif ödünç limiti)
- Veritabanı: SQL Server
- Raporlama / Dışa Aktarım: Listelerden Excel (XLSX) export; aksiyon: “Hangi kitap kimde?”
- Kitap (Ad, Yazar, YayınYılı, ISBN, Durum)
- Member (Ad, Soyad, Email, Telefon, AdSoyad [NotMapped])
- Loan (Kitap, Üye, BaşlangıçTarihi, BitişTarihi, Durum)
- Book 1 <-> * Loan: Bir kitap, birçok ödünç kaydına sahip olabilir.
Book Tarafında:
[InverseProperty(nameof(Loan.Kitap))]public virtual ObservableCollection<Loan> Loans { get; set; } = new ObservableCollection<Loan>();Loan Tarafında:public virtual Book Kitap { get; set; } - Member 1 <-> * Loan:
Member Tarafında:
[InverseProperty(nameof(Loan.Uye))]public virtual ObservableCollection<Loan> Loans { get; set; } = new();Loan Tarafında:public virtual Member Uye { get; set; }
-
Required:- Örn: Member.Ad, Member.Soyad, Member.Email, Loan.Kitap, Loan.Uye, Loan.BaslangicTarihi, Loan.BitisTarihi gibi alanlarda.
- XAF UI’da kaydetmeden önce hatayı gösterir.
-
StringLength,Range,EmailAddress:- Örn: Book.YayinYili için
Range(0, 2025), Member.Email içinEmailAddress, Book.Ad/Yazar/ISBN içinStringLength. - UI’da kullanıcıyı yönlendirir; aynı zamanda modelle tutarlı veri kaydını sağlar.
- Örn: Book.YayinYili için
RuleRequiredFiled:- Örn:
[RuleRequiredField("Loan.Uye.Required", DefaultContexts.Save)]public virtual Member Uye { get; set; }
- Örn:
RuleCriteria:- Örn:
[RuleCriteria( "Loan_Dates_Valid", DefaultContexts.Save, "[BitisTarihi] >= [BaslangicTarihi]", CustomMessageTemplate = "Bitiş tarihi başlangıçtan önce olamaz.")]
- Örn:
RuleCombinationOfPropertiesIsUnique:- Örn: Aynı kitabın aynı anda ikinci kez “Active” ödünç verilememesi.
[RuleCombinationOfPropertiesIsUnique( "Loan_UniqueActiveLoanForBook", DefaultContexts.Save, "Kitap;Durum", CustomMessageTemplate = "Bu kitap zaten aktif bir ödünçte.", TargetCriteria = "[Durum] = ##Enum#DXApplication4.Module.BusinessObjects.LoanDurum,Active#" )]
- Örn: Aynı kitabın aynı anda ikinci kez “Active” ödünç verilememesi.
RuleFromBoolProperty:- Örn: Bir üyenin aynı anda en fazla 3 aktif kitap ödünç alabilmesi kuralı.
[NotMapped][Browsable(false)][RuleFromBoolProperty("Loan.Member.Max3ActiveLoans",DefaultContexts.Save,CustomMessageTemplate = "Bir üye aynı anda 3'ten fazla aktif kitap ödünç alamaz.")]public bool IsUnderMembersLoanLimit{get{if (Uye == null) return true;int otherActive = Uye.Loans?.Count(l => l.Durum == LoanDurum.Active && !ReferenceEquals(l, this)) ?? 0;int prospective = otherActive + (Durum == LoanDurum.Active ? 1 : 0);return prospective <= 3;}}
- Örn: Bir üyenin aynı anda en fazla 3 aktif kitap ödünç alabilmesi kuralı.
RuleUniqueValue:- Örn:
[RuleUniqueValue("Book.ISBN.Unique", DefaultContexts.Save,CustomMessageTemplate = "Bu ISBN zaten kayıtlı.")]
- Örn:
Uygulamada erişim yetkilerini ve sorumlulukları düzenlemek amacıyla rol tabanlı erişim kontrolü modeli uygulanmıştır. Bu model, her kullanıcının sahip olduğu rol doğrultusunda hangi işlemleri yapabileceğini net biçimde tanımlar.
-
Kullanıcı (USER):
-
Sistem Yöneticisi (ADMIN):
Arayüz, kullanıcıların kolay ve hızlı bir şekilde işlem yapabilmesi içinsade, anlaşılır ve kullanıcı dostu olacak şekilde tasarlanmıştır. Tüm işlemler menüler ve butonlar aracılığıyla yönlendirilir, böylece teknik bilgi gerektirmeden sistem kullanılabilir.
- Ana Sayfa: Kitap arama, listeleme ve profil/üye işlemlerine hızlı erişim.
- Kitap Arama & Liste: Başlık, yazar, kategori/ISBN’e göre arama; tabloda başlık, yazar, yayınevi ve durum (müsait/ödünçte/hasarlı/kayıp) bilgileri.
- Kitap Detayı: Açıklama, ISBN, raf konumu ve kopya durumu gösterilir; buradan ödünç işlemi başlatılabilir.
- Üye Sayfası: İletişim bilgileri, geçmiş/aktif ödünç kayıtları.
- Rapor & Dashboard: “Hangi kitap kimde?” raporu ve toplam kitap, aktif/geciken ödünçler, üye sayısı gibi özet göstergeler.
- Dışa Aktarım: Liste görünümlerinde yalnızca PDF ve Excel (XLS/XLSX) formatlarına dışa aktarma seçeneği aktiftir.
Arayüz genel olarak menü tabanlı navigasyon, arama kutuları, filtreleme seçenekleri ve tablolar üzerinden ilerlemektedir. Böylece kullanıcılar minimum tıklama ile ihtiyaç duydukları bilgiye ulaşabilmektedir.
Bu çözüm, XAF’in güçlü doğrulama, güvenlik, raporlama ve export yetenekleriyle kütüphane süreçlerini yalın bir model üzerinde güvenilir ve sürdürülebilir hale getirir.
Günlük iş akışları (kitap ekleme, üye yönetimi, ödünç verme/geri alma) tek bir arayüzde, kurallarla garanti altına alınmış şekilde yönetilir.
Hazırlayan: Dilara Çetin