Konu Başlıkları
Yükleniyor...

Hipermetin Sisteminin Üç Katmanı: Sorun Hangi Katmanda?

Depolama, HAM ve Sunum: Hipermetin Katmanlarını Ayırmak

Hipermetin sistemlerini üç katmana bölmek akademik bir süsleme değil, hata ayıklama aracı. Bir bağlantı bozulduğunda sorunun depolamada mı, bağlantı modelinde mi, yoksa yalnızca ekranda mı olduğunu ayırt edemiyorsanız üçünü de kurcalayarak vakit harcarsınız. Katman sınırları pratikte eriyor, ama nerede eridiğini bilmek işi kolaylaştırıyor.

Üç katman, üç ayrı soru

En alttaki depolama katmanı tek bir soruya cevap verir: bu içerik nerede duruyor ve kim değiştirebilir. Ortadaki katman, 1988'de Campbell ve Goodman'ın önerdiği adla Hipermetin Soyut Makinesi (HAM), node'ların ve bağlantıların kendisiyle ilgilenir: hangi node hangi node'a, hangi tipte, hangi sürümde bağlı. Sunum katmanı ise kullanıcının gördüğü şeyi kurar. Bağlantı nasıl işaretlenir, tıklandığında ne olur, okuma ve yazma modu nasıl ayrılır.

Bir hatayla karşılaştığınızda sırayla şunu sorun:

  • İçerik kayıp mı, yoksa yerinde duruyor da erişilemiyor mu? Depolama.
  • İçerik yerinde ama bağlantı yanlış hedefi mi gösteriyor? HAM.
  • Bağlantı doğru hedefi gösteriyor ama kullanıcı onu bulamıyor mu, yanlış şeye mi tıklıyor? Sunum.

Bu üç soruyu ayıramıyorsanız elinizde üç katman değil, üç isimle anılan tek bir yığın var.

Meta veri nereye ait

Klasik anlatım depolama katmanının node'ları ve bağlantıları yalnızca veri objesi olarak gördüğünü söyler, sonra da verimlilik için sahiplik ve sürüm bilgisinin veri tabanı seviyesinde tutulmasını önerir. İkisi aynı anda doğru olamaz; bu, katman sınırının bilinçli olarak delinmesi.

Delmenin bir gerekçesi var. "Bu kullanıcının son ayda değiştirdiği bütün node'lar" gibi bir sorguyu HAM üzerinden çalıştırırsanız, HAM bütün node kümesini gezmek zorunda kalır; sahiplik ve tarih depolama katmanında indeksli bir kolonsa aynı sorgu tek taramada biter. Bedeli de belli: aynı bilgi iki yerde tutulur ve zamanla ayrışır. Pratikte işe yarayan ayrım şu. Otoriter kopya HAM'da kalsın, depolama katmanına yalnızca filtrelediğiniz ve sırladığınız alanları kopyalayın, o kopyayı da HAM yazarken aynı işlem içinde güncelleyin. Arka planda senkronize eden bir iş yazarsanız, ayrışmayı fark ettiğinizde neden ayrıştığını artık bulamazsınız.

Çoklu bağlantı bedava değil

Bir bağlantı noktasının birden çok hedefe açılması (super-link, fat-link) genelde kazanç olarak anlatılır. Kullanıcı tarafında karşılığı bir menü. Bir node'da k tane bağlantı varsa ve her biri ortalama m hedefe açılıyorsa, o sayfadan çıkmak için kullanıcının önüne konan seçenek sayısı k×m'ye çıkar. "Çoklu bağlantı bilgiye erişimi hızlandırır" cümlesi, ancak menüde eleme ölçütü varsa doğru: hedefler tipe, yazara ya da tarihe göre etiketliyse liste taranabilir, sadece başlıklar sıralanıyorsa kullanıcı zaten bilmediği bir şey arasından seçim yapmaya zorlanıyor.

Aynı metinlerde iki çelişik tavsiye birlikte dolaşır: bağlantı noktalarını görsel olarak vurgulamak temel kural sayılır, hemen ardından aşırı vurgudan kaçınmak istenir. Karar ölçütü sayfanın işine bakmakla bulunur. Kullanıcı gezinmek için geldiyse (dizin, kategori, arama sonucu) bağlantıyı açıkça işaretleyin, tip ayrımını renkle veya ikonla verin. Kullanıcı okumak için geldiyse metin içindeki her bağlantıyı boyamak okumayı bozar; tipi hover ya da küçük bir simgeye bırakın, gövdede yalnızca gerçekten sonraki adım olan bağlantıyı belirgin tutun.

Anchor'ı neye bağlıyorsunuz

Bağlantının en kırılgan yeri hedef node değil, o node'un içindeki nokta. Bir projede anchor'ları karakter ofseti olarak tutan bir sistem gördüm; ilk ciddi metin düzenlemesinden sonra bağlantıların yarısı paragrafın ortasına düşmüştü.

Çözüm basit: ofset tutmayın. İçerik düzenlenebiliyorsa anchor'ı konuma değil, içerikte id'si olan bir işarete bağlayın. Editörde bu işaretin silinmesi bir olay üretsin ve o bağlantı kırık olarak işaretlensin. Kırık bağlantıyı sessizce node'un başına yönlendirmek en kötü seçenek, çünkü kullanıcı yanlış yere geldiğini anlamaz, sistem de sorunu hiç rapor etmez.

Katman ayrımı ne zaman işe yarar

Bu modelin değeri kutuları saymakta değil. Bir davranışın hangi katmana ait olduğunu koda dokunmadan söyleyebiliyorsanız ayrım işliyor; söyleyemiyorsanız katmanlar isimde kalmış. Sınırı bilerek delmek meşru, örneğin sorgu performansı için meta veriyi aşağıya kopyalamak. Farkında olmadan delmek ise sonradan tek tek onarılan bir bağlantı bütçesi demek.