# Basics İş ve teknik altyapı ihtiyaçlarını karşılamak ve mümkün olan en küçük ve en verimli parçalar halinde geliştirme yaklaşımı hedeflenmiştir. ## Domain * *Domain* kavramı birden fazla süreç tarafından kullanılan her türlü veri, akış ve servis kümesi için kullanılır. * *Domain* direkt olarak gerçekten hayattan izdüşümle belirlenir. *Person Domain, Vahicle Domain, Document Domanin* gibi. * Domain işleyişini gerçekleştirme için başka bir domain ile birlikte çalışabilir. ## Kayıt * Tüm kayıtlar bir akış ile oluşturulur. * Kaydın global bir tekil anahtarı olur. * Kaydın tekil anahtarı aynı zamanda kaydı oluşturan akış için *correlation key* olarak kullanılır. * Kayıt ile ilişkili aktif bir akış bulunuyorsa aktif akışın bilgisi bulunur. * Kayıt ile ilgili geçmiş tüm akışlar ayrıca sorgulanabilir. * Kayıt silimez, sadece silindi olarak işaretlenir. * Her kaydın üstünde referans olarak tuttuğu başka bir kayıt bilgisi olabilir. ### Örnek Kayıt Şeması ```json { "id": "15802b18-cc2f-4b79-808f-e35b6023782c", ``` > **id** Kaydın tekil anahtarıdır. ```json "active-process": { "id": "15802b18-cc2f-4b79-808f-e35b6023782c", "name": "create-dealer-contact", "available-transitions": [ { "name": "create-dealer-contact-approve", "title": "Onayla", "form": "process-generic-approve" } ] }, ``` > **active-process** Kaydın üstünde bulunan aktif akış bilgisini içerir. Veriler akış izleme sistemi sorgulanarak elde edilir. ```json "reference": { "name": "PROCESS:retail-loan-vehicle", "id": "e39d7d85-22a3-4f35-a5ac-01fffc229635" }, ``` > **reference** Kaydın üst akışı veya direkt ilişkli farklı bir kayıt bilgileri edilir. Eğer bir akış ise PROCESS ön eki ile, eğer referans bir başka direkt kayıt ise (örneğin "ENTITY:loan-account") ise ENTITY ön eki ile kayıt edilir. Varlığı zorunlu değildir. ```json "status": "N", ``` > **status** Kaydın silinmesi durumunda aktiflik durumu pasife (R) çekilir. Kayıt asla silinmez. Aktif durum için "A", yeni bir kayıt ise ve akışı devam ediyorsa "N" verilir. ```json "citizenship-number": 385559965653, "name": { "First": "Uğur", "Last": "Karataş" } } ``` > Kayıt ile ilgili özel bilgiler. ### Örnek Kaydın İlişkisel Veritabanı Şeması | Column Adı | Veri Tipi<sup>1</sup> | Ortak ? <sup>2</sup> | Açıklama | | -------- | -------- | -------- |-------- | | id | uuid | * | | active-process | uuid | * | Eğer aktif bir iş akışı var ise onun anahtarı. Bu anahtar kullanarak aktif akış ile ilgili bilgilerle şema zenginleştirilerek dönülür. | | referance.name | text | * | Eğer column ismi içinde (.) kullanılmaşsa şema oluşturulurken **path** verisine uygun şekilde verilerin gruplanacağını belirtir. | | referance.id | text | * | | | status | char | * | (**N**)ew,(**A**)ctive,(**R**)emoved. Sorgularda sıklıkla kullanılacağı ve indeksin parçası olacağı için özellikle tek karakter tercih edilmiştir. | | citizenship-number | bigint | | | | name.first | text | | | | name.last | text | | | **1** Veri tipleri için YugabyteDB baz alınmıştır. **2** Tüm tablolarda bulunacak ortak alan olduğunu belirtir. ## Akış * Akışlar görsel olarak tasarlanır. * Akış ile iletişim asenkron olarak sağlanır * Akışlar mesajlar ile başlatılır veya ilerletilir. * Akışlar geri bilgi vermek için *callback worker* kullanır. * *Callback Worker* verilen bir servis noktasına veya SignalR ile verilen bir hub noktasına geri dönnüş sağlar. * Birden fazla sistem *CallBack* ile bilgilendirilebilir. ## Mesaj * Her bir mesaj bir veri kümesi bekler. * Veri kümesi teknoloji agnostik olarak tanımlanır. * Veri kümesi içerisinde veri modeli kullanıcı arabirim zenginleştirmelerini (enum değerler, referans değer listeleri vs.) içerir. * Veri kümesi içerisinde veri doğrulama, referans gibi kontrol bilgileride yer alır. * Kontrol bilgileri hem kullanıcı arabiriminde hem de akış tarafında kullanılır.