Enum-Centric Status Management: Açık Kaynaklı Merkezi Hata ve Durum Yönetimi Çözümü

Kürşat Solmaz
4 min readDec 4, 2024

--

Giriş

Yazılım projelerinde hata ve durum yönetimi, genellikle tekrarlayan mesajlar, zorlayıcı güncellemeler ve karmaşık yapılar nedeniyle geliştirme süreçlerini zorlaştırır. Farklı katmanlarda tekrar eden bu mesajlar, hem kodun bakımını zorlaştırır hem de projeyi büyüdükçe yönetilmesi daha karmaşık hale gelen bir yapıya dönüştürür.

Enum-Centric Status Management, bu sorunlara modern, etkili ve sürdürülebilir bir çözüm sunar. Bu yöntem sayesinde:

  • Hata ve durum mesajları merkezi bir enum ile yönetilir.
  • Kod tekrarları ve bakım zorlukları önemli ölçüde azalır.
  • Proje ekosistemi daha temiz, genişletilebilir ve sürdürülebilir bir hale gelir.

Bu makalede, Enum-Centric Status Management yönteminin temel prensiplerini, gerçek dünya örneklerini ve projelerinize nasıl entegre edebileceğinizi adım adım göstereceğiz. Ayrıca, NuGet paketi ve GitHub açık kaynak yapısı sayesinde yöntemin kolay uygulanabilirliğini detaylı bir şekilde ele alacağız.

Neden Enum-Centric Status Management?

Enum-Centric Status Management kullanmanız için dört temel neden:

  1. Merkezi Yönetim:
    Hata ve durum mesajlarını tek bir enum ile merkezi olarak tanımlayın ve yönetin. Farklı katmanlarda aynı mesajların tekrarını ortadan kaldırın.
  2. Kolay Entegrasyon:
    NuGet paketi sayesinde yöntemi birkaç dakikada projelerinize entegre edin ve tüm avantajlarından hemen yararlanın.
  3. Açık Kaynak Gücü:
    GitHub üzerinden herkesin katkıda bulunabileceği açık kaynaklı yapısı sayesinde sürekli gelişen ve genişleyen bir sistem.
  4. Temiz Kod:
    Kod tekrarlarını ve dağınıklığı azaltarak, yazılım geliştirme süreçlerinizi daha verimli ve okunabilir hale getirin.

NuGet ve GitHub: Güçlü Bir Kombinasyon

NuGet Paketi ile Başlangıç

Enum-Centric Status Management’i projelerinize eklemek oldukça kolay:

PM> Install-Package EnumCentricStatusManagement

Bu komutla, paketin tüm avantajlarını projelerinize taşımış olursunuz. GitHub sayfasında detaylı dokümantasyon ve örnekler bulabilirsiniz.

GitHub ve Açık Kaynak Gücü

Projeyi GitHub üzerinde bulabilirsiniz:
GitHub Repository

Açık kaynaklı yapı sayesinde:

  • Yeni özellikler ekleyebilir.
  • Sorunları raporlayabilir.
  • Projeye katkıda bulunabilirsiniz.

Bu, projeyi topluluk odaklı bir şekilde büyütmek için eşsiz bir fırsattır.

Örnek Kullanım: Blog Yönetim Sistemi

1. Veritabanı ve Tabloların Sıfırdan Oluşturulması

Bir blog yönetim sistemi için veritabanı, tablolar ve gerekli SP’leri sıfırdan oluşturan bir SQL betiği:

USE master;

-- Close open connections and delete the database
IF DB_ID('TestBlogDB') IS NOT NULL
BEGIN
ALTER DATABASE TestBlogDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE TestBlogDB;
END;

-- Create new database
CREATE DATABASE TestBlogDB;
GO

-- Use the new database
USE TestBlogDB;

-- Table of Topical Headings
CREATE TABLE MainTopics
(
Id INT PRIMARY KEY IDENTITY(1,1),
Title NVARCHAR(255) NOT NULL
);
GO

-- Blog Posts Table
CREATE TABLE BlogPosts
(
Id INT PRIMARY KEY IDENTITY(1,1),
Title NVARCHAR(255) NOT NULL,
Content NVARCHAR(MAX) NOT NULL,
MainTopicId INT NOT NULL,
FOREIGN KEY (MainTopicId) REFERENCES MainTopics(Id)
);
GO

-- Blog addition Stored Procedure
CREATE PROCEDURE InserOrUpdateBlogPost
@Id INT,
@Title NVARCHAR(255),
@Content NVARCHAR(MAX),
@MainTopicId INT,
@StatusCode INT OUTPUT
AS
BEGIN
-- MainTopicId validation
IF NOT EXISTS (SELECT * FROM MainTopics WITH(NOLOCK) WHERE Id = @MainTopicId)
BEGIN
SET @StatusCode = 2; -- No parent topic title found
RETURN;
END;

IF EXISTS (SELECT * FROM BlogPosts WITH(NOLOCK) WHERE Id = @Id)
BEGIN
-- Updated a blog post
UPDATE BlogPosts
SET Title = @Title, Content = @Content, MainTopicId = @MainTopicId
WHERE Id = @Id;

SET @StatusCode = 1; -- Blog successfully Updated
RETURN;
END
ELSE
BEGIN
-- Adding a blog post
INSERT INTO BlogPosts (Title, Content, MainTopicId)
VALUES (@Title, @Content, @MainTopicId);

SET @StatusCode = 0; -- Blog successfully added
RETURN;
END;
END;
GO
-- Add sample data
INSERT INTO MainTopics (Title) VALUES ('Technology');
INSERT INTO MainTopics (Title) VALUES ('Lifestyle');
GO

2. Enum ile Durumların Merkezi Yönetimi

SP’nin döndürebileceği durumları bir enum ile merkezi olarak yönetin:

public enum BlogStatus
{
[Status("Blog başarıyla eklendi.", StatusType.Success)]
Added = 0,

[Status("Blog başarıyla güncellendi.", StatusType.Success)]
Updated = 1,

[Status("Üst konu başlığı bulunamadı.", StatusType.Error)]
ParentTopicNotFound = 2
}

3. Blog Servisi: SP Entegrasyonu

Stored Procedure’den dönen @StatusCode'u enum ile eşleştirin ve projede kullanın:

public class BlogService
{
private readonly SqlConnection _connection;

public BlogService(SqlConnection connection)
{
_connection = connection;
}

public BlogStatus AddOrUpdateBlogPost(int id, string title, string content, int mainTopicId)
{
var command = new SqlCommand("InserOrUpdateBlogPost", _connection)
{
CommandType = CommandType.StoredProcedure
};

command.Parameters.AddWithValue("@Id", id);
command.Parameters.AddWithValue("@Title", title);
command.Parameters.AddWithValue("@Content", content);
command.Parameters.AddWithValue("@MainTopicId", mainTopicId);

var statusCodeParam = new SqlParameter("@StatusCode", SqlDbType.Int) { Direction = ParameterDirection.Output };
command.Parameters.Add(statusCodeParam);

_connection.Open();
command.ExecuteNonQuery();
_connection.Close();

return (BlogStatus)(int)statusCodeParam.Value;
}
}

4. Loglama ile Entegrasyon

Durum mesajlarını loglama sistemiyle kaydedin:

public class Logger
{
public void Log(BlogStatus status)
{
var attribute = status.GetStatusAttribute();
Console.WriteLine($"[{DateTime.Now}] {attribute.Type}: {attribute.Message}");
}
}

// Kullanım:
var logger = new Logger();
logger.Log(BlogStatus.ParentTopicNotFound);

İpuçları ve Yorumlar

  1. Özelleştirme: Enum’a yeni durumlar ekleyerek sistemi projelerinize göre genişletebilirsiniz.
  2. Geri Bildirim: GitHub üzerinden önerilerde bulunarak projeyi birlikte geliştirin.
  3. Ekip Kullanımı: Merkezi hata yönetimi, ekip çalışmalarında büyük bir fark yaratır.

Sonuç

Enum-Centric Status Management, yazılım projelerinde merkezi hata ve durum yönetimi için güçlü bir araçtır. NuGet paketi ve GitHub açık kaynak yapısı ile, bu yöntemi projelerinize kolayca entegre edebilir, kodunuzu daha temiz ve sürdürülebilir bir hale getirebilirsiniz.

Hemen NuGet üzerinden deneyin ve yorumlarınızı paylaşın!
NuGet Paketi | GitHub Repository

--

--

No responses yet