Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Karar kayıtları

Açıklama

Metadata güdümlü arayüz

Cluster ERP ekranlarının, formlarının, listelerinin ve aksiyonlarının sunucu metadata'sından geldiği ve genel istemci kodunun modüle özgü kural tutmadığı kuralın karar kaydı.

Durum: Kabul edildi; projenin yazılı mühendislik kurallarında belirtilir. Bu kayıt, Cluster ERP ekranlarının sunucudaki modül metadata'sıyla tanımlandığı ve genel istemci koduyla çizildiği kuralı kapsar. Kural webapp/ içindeki web uygulamasına tamamen, masaüstü istemcinin kayıt ekranlarına da uygulanır. Metadata sınıfları metadata modeli sayfasında belgelenir.

Bağlam

Cluster ERP'nin her biri birçok varlığa sahip 28 modülü vardır. Projenin yazılı mühendislik kuralları web uygulamasının tamamen metadata güdümlü olduğunu söyler: ekran, form, liste ve aksiyon davranışı metadata'dan gelir; yalnız arayüze gömülmüş kurallar yasaktır. Metadata testi kural uygulanmadan önce olanı kaydeder: kurallar "used to hide in the web client" ve metadata'ya, i18n'e veya veriye taşındı (tests/test_metadata_driven_rules.py:1-5). Başka bir gerekçe koddan belirlenemez.

Karar

  • Her modül get_metadata ile bir ModuleMeta döndürür (src/cluster_erp/core/module_base.py:73-74). src/cluster_erp/core/metadata.py varlıklar, alanlar, sütunlar, aksiyonlar, sekmeler, facet'ler ve kenar çubuğu için 45 sınıf tanımlar (grep -c "^class " ile sayıldı).
  • Sunucu yüklü tüm modüllerin metadata'sını /api/v1/_meta adresinde yayımlar (src/cluster_erp/server/app.py:1519-1546).
  • Genel istemci kodu listeleri, formları ve kayıt kartlarını bundan çizer. Genel kod iş modülü adlarıyla karşılaştırma yapmaz ve modül yolları veya yetkileri tutmaz.
  • Metadata'nın ifade edemediği modüle özgü bir ekran, o modülün kendi kapılı paketindeki ve metadata'da bildirilen özel bir bileşendir (tests/test_metadata_driven_rules.py:158-180).

Akış şeması bir modülden bir ekrana giden yolu gösterir.

flowchart LR
 mod["Module.get_metadata"] --> eff["effective_module_meta"]
 eff --> meta["GET /api/v1/_meta"]
 meta --> web["webapp genel motorları"]
 meta --> desk["masaüstü MetadataStore"]
 desk --> gen["widgets/generic görünümleri"]
 meta --> bundle["gated_apps paketi özel bileşeni"]

Düzyazıyla: sunucu effective_module_meta içinde her modülün metadata'sını kiracı tanımlı alanlarla birleştirir ve sonucu süreç başına bir kez, bir ETag ile sunar (src/cluster_erp/server/app.py:1531-1544). Web motorları gen-list.js, gen-form.js ve gen-detail.js buradan çizer. Masaüstü istemci aynı belgeyi metadata deposuna yükler (src/cluster_erp/desktop/core/metadata_store.py:21) ve görünümleri src/cluster_erp/desktop/widgets/generic/ içinde kurar. Özel bileşenler gated_apps/<module>/app.js içinde durur (tests/test_metadata_driven_rules.py:175-180).

Sonuçlar

  • Yeni bir varlık ekranı yalnız metadata ister; bkz. metadata ile ekran ekleyin.
  • Platform özellikleri modül adıyla değil yetenekle bulunur. Kayıt belgeleri sağlayıcısı provides ile bildirilir (src/cluster_erp/core/metadata.py:731-735, tests/test_metadata_driven_rules.py:63-74).
  • Ana ekran bileşenleri modüllerce home_widgets ile bildirilir ve modülün paketiyle çizilir (src/cluster_erp/core/metadata.py:739-740).
  • Taraf rolleri taraf kartında FacetMeta ile görünür; bkz. taraf birleşimi.
  • Yetki kodları açılışta metadata'daki varlıklardan tohumlanır (src/cluster_erp/server/app.py:642-652).

Kodun uyguladığı yerler

Mekanizma Neyi denetler Kaynak
test_generic_web_engines_do_not_branch_on_business_module_names Beş genel motor hiçbir iş modülü adıyla karşılaştırma yapmaz tests/test_architecture_boundaries.py:75-87
test_generic_web_code_names_no_module_paths_permissions_or_language_columns On bir genel dosya modül yolu, modül yetkisi, dil sütunu veya dil dalı adlandırmaz tests/test_metadata_driven_rules.py:85-112
test_every_is_active_column_declares_the_active_flag_formatter Liste davranışı sütunun bildirdiği biçimleyiciden gelir tests/test_metadata_driven_rules.py:36-48
test_home_widgets_are_module_metadata_rendered_by_module_bundles Ana ekran bileşenleri modül metadata'sıdır; home.js hiçbirini adlandırmaz tests/test_metadata_driven_rules.py:158-193
test_working_calendar_is_the_calendars_modules_custom_tab Çalışma takvimi genel kod değil, özel bir sekmedir tests/test_metadata_driven_rules.py:196-214

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13