Tek bir merkezi şema kullanarak uygulama katmanları arasındaki veri tanımlarını standartlaştırmak, hem geliştirme sürecini hızlandırır hem de bakım yükünü hafifletir. Super Schema Architecture (SSA), farklı sistem bileşenleri arasındaki veri tutarlılığını sağlamak için tasarlanmış, teknoloji yığınına bağlı olmayan bir yaklaşımdır.
Bu mimari, Java, Python, TypeScript gibi programlama dillerinin yanı sıra REST, GraphQL ve Protocol Buffers gibi çeşitli teknolojilerle de uyumlu çalışabilir. Geliştiriciler, tek bir kaynakta tanımlanan verilerin tüm sistem boyunca nasıl kullanılabileceğini ve bu sayede kod tekrarını nasıl azaltabileceklerini öğreniyor.
Veri Tanımlarının Genel Sorunu: Çoklu Temsilcilik
Her uygulama, çalıştığı verilerin farklı tanımlarını içerir. Nesne yönelimli sınıf tanımları, veritabanı şemaları, API sözleşmeleri ve diğer yapılar, aynı veriyi farklı amaçlarla temsil eder. Örneğin, bir PostgreSQL tablosu verinin depolanması için tasarlanırken, bir ORM şeması uygulama kodunun veritabanıyla etkileşimini kolaylaştırmak için oluşturulur.
Bu tanımlar arasındaki ilişki genellikle görünür olsa da birebir örtüşmez. Aynı verinin farklı katmanlarda farklı kurallara tabi olması yaygın bir durumdur. Örneğin, bir ORM şemasında tanımlanmayan bir doğrulama kuralı, veritabanı şemasında yer alabilir.
Aşağıda, Prisma ORM ve PostgreSQL için aynı kullanıcı modelinin nasıl tanımlandığına dair bir karşılaştırma yer almaktadır:
model users {
id String @id @db.Uuid @default(uuid(7))
email String @unique
birth_date DateTime @db.Date
}CREATE TABLE users (
id UUID PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
birth_date DATE NOT NULL,
CONSTRAINT birth_date_in_past CHECK (birth_date < CURRENT_DATE)
);Prisma şeması, veritabanı kısıtlamasını ifade edemezken, ORM için gerekli olan varsayılan değer bilgisine sahiptir. Bu durum, her katmanda verinin nasıl temsil edildiğini ve hangi kurallara tabi olduğunu gözler önüne sermektedir.
Super Schema Architecture (SSA) Seviye 0: Meta Verilerin Birleştirilmesi
Veri, kullanıcı arayüzünden veritabanına kadar birçok farklı formatta temsil edilir. Örneğin, doğum tarihi alanını ele alalım:
- Kullanıcı arayüzü: JavaScript
Datenesnesi olarak saklanır. - Ön uç doğrulama: Doğum tarihi geçmişte olmalıdır.
- API taşıma formatı: JSON dizisine dönüştürülür.
- Arka uç temsilcisi: Programlama diline özgü bir nesneye (örneğin Java'da
LocalDate) çevrilir. - Veritabanı saklama formatı:
DATEtüründe saklanır.
Bu süreçte en az dört farklı meta veri biçimi kullanılmaktadır. Ancak tüm bu biçimler aynı veriyi temsil eder ve aynı kurallara tabidir.
Aşağıdaki kod parçaları, React ön uç ve Java arka uç arasında veri akışının nasıl gerçekleştiğini göstermektedir:
const [birthDate, setBirthDate] = useState<Date>();
const handleSubmit = () => {
if (!birthDate || birthDate.valueOf() > new Date().valueOf()) {
throw new Error("Doğum tarihi geçmişte olmalıdır");
}
await fetch(`/api/users/${userId}`, {
method: 'PATCH',
body: JSON.stringify({
birth_date: birthDate.toISOString().slice(0, 10)
})
});
}public record PatchUserRequest(LocalDate birth_date) {}
if (!request.birth_date().isBefore(LocalDate.now())) {
throw new ValidationException();
}Bu örnekler, verinin farklı katmanlarda nasıl temsil edildiğini ve her katmanda hangi doğrulamaların uygulandığını göstermektedir. Verilerin bu şekilde çoğaltılması, bakım zorluklarına yol açabilir ve hataların ortaya çıkma olasılığını artırır.
Neden Tek Bir Merkezi Şema?
Günümüzde birçok araç, farklı veri tanımlarını birbirine dönüştürmek için kullanılmaktadır. Örneğin, OpenAPI'dan programlama dili yapılarına, XML Şeması'ndan XML doğrulama kodlarına kadar birçok otomatikleştirme aracı bulunmaktadır. Ancak bu araçlar genellikle izole problemleri çözmeye odaklanır ve daha geniş bir bakış açısı sunmaz.
Super Schema Architecture, tüm veri tanımlarını tek bir yerde birleştirmeyi ve böylece tutarlılığı sağlamayı amaçlar. Bu yaklaşım, özellikle heterojen sistemlerde büyük avantajlar sunar. Örneğin, bir projede hem Java hem de Python kullanılıyorsa, her iki dilde de aynı veri modelini tanımlamak mümkün olur.
SSA'nın Geleceği: Low-Code'dan İlham Alan Yaklaşımlar
Super Schema Architecture, low-code platformlarının sunduğu bazı kolaylıkları geleneksel tam kodlu uygulamalara getirmeyi hedefler. Tek bir merkezi şema kullanarak, geliştiriciler daha az kod yazabilir ve böylece hem geliştirme süresini kısaltabilir hem de hata olasılığını azaltabilir.
Bu mimari, aynı zamanda gelecekteki projelerde veri tanımlarının nasıl yönetileceğine dair yeni bir bakış açısı sunmaktadır. Teknoloji yığını ne olursa olsun, verilerin tutarlı ve anlaşılır bir şekilde tanımlanması, uygulama geliştirmenin temel taşlarından biri olmaya devam edecektir.
Veri tanımlarının standartlaştırılması, yalnızca kod kalitesini artırmakla kalmaz, aynı zamanda ekip içindeki iletişimi de kolaylaştırır. Super Schema Architecture, bu alanda yenilikçi bir adım olarak dikkat çekmektedir ve gelecekte daha fazla proje tarafından benimsenmesi beklenmektedir.
Yapay zeka özeti
Veri modellerini ve API sözleşmelerini tek bir merkezi şema ile yönetmek, kod karmaşasını azaltır ve bakımı kolaylaştırır. Super Schema Architecture nasıl çalışır ve hangi avantajları sunar?