lisensi

Pustaka TypeScript yang berpendirian keras untuk membuat aplikasi berorientasi bisnis.

Aplikasi yang dibuat dengan libmodulor memiliki 6 properti utama :

  • Diketik secara ketat dengan tipe data bisnis eksplisit
  • E2e yang diketik sepenuhnya tanpa pembuatan kode
  • Didokumentasikan secara otomatis
  • Diuji secara otomatis
  • Multi platform/runtime
  • Dapat dijalankan di mana saja

Peringatan

Proyek ini masih dalam pengembangan aktif. Meskipun sudah digunakan dalam proyek percontohan, namun belum cocok untuk semua skenario produksi. Karena dikembangkan hanya oleh satu orang, hal ini dapat berlangsung selama bertahun-tahun atau berhenti kapan saja. Sementara itu, ini masih merupakan “proyek penelitian” yang perlu ditingkatkan. Dengan demikian, akan dikenakan PERUBAHAN TERBATAS selama versinya tidak 1.0.0. Secara keseluruhan, tujuan akhirnya adalah memiliki a perpustakaan tingkat produksi untuk membantu semua orang membangun proyek berkualitas lebih cepat. Jika Anda ingin membantu dengan cara apa pun atau memiliki pertanyaan, jangan ragu untuk menghubungi saya (lih. author di dalam package.json).

Catatan

Pada awalnya seluruh dokumentasi akan ada di GitHub, dimulai dari file ini, untuk memudahkan mendapatkan gambaran besarnya, memelihara dan cmd + F. Pada titik tertentu, saya akan mempertimbangkan untuk memiliki situs web dokumentasi yang indah seperti anak-anak keren lainnya.


Ada yang mungkin berpendapat bahwa, dengan banyaknya “kerangka kerja JS” di pasaran, saat ini sudah terlalu banyak cara untuk membangun aplikasi baru. Dan mereka benar.

Itu sebabnya sudut yang diambil adalah libmodulor berbeda. Meskipun berpendirian tentang beberapa hal (lihat di bawah), namun tidak mengenai sisi teknis. Sebaliknya, ini berfokus terutama pada “inti” aplikasi Anda.

Jadi, Anda bebas menggunakan:

  • penyimpanan data pilihan Anda (PostgreSQL, MySQL, MariaDB, DynamoDB, SQLite, MongoDB…),
  • kerangka frontend pilihan Anda (React, Svelte, Angular, Vue, Solid…),
  • server pilihan Anda (Express, Fastify, Hono…),
  • kerangka meta pilihan Anda (Berikutnya, Remix, Astro, Nuxt…),
  • runtime pilihan Anda (Node, Deno, Bun…)
  • perpustakaan pilihan Anda (Lodash, React Query…)
  • alat pilihan Anda (Biome, ESLint, Prettier…)
  • perpustakaan gaya pilihan Anda untuk web (tailwind, shadcn, bootstrap, vanilla CSS…)
  • hosting pilihan Anda (Cloud, IaaS, PaaS, On-Prem, RaspberryPi, lemari es Anda…)

Tujuan utamanya adalah untuk menawarkan primitif tingkat tinggi yang membuat pembuatan aplikasi bisnis lebih cepat, tanpa harus menggunakan boilerplate atau lebih buruk lagi, tanpa/kode rendah, dan dengan demikian, menghindari vendor lock-in.

Perpustakaan mendefinisikan a Arsitektur 4 lapis terdiri dari: UseCase, App, Product, Target.

block-beta
    Target1:2
    Target2:2
    Target3:2
    columns 6
    Product1:6
    App1:3
    App2:3
    UseCase1
    UseCase2
    UseCase3
    UseCase4
    UseCase6



Memuat


Jika Anda tidak melihat bagan putri duyung (misalnya di npm), buka GitHub.

Use case adalah unit terkecil. Ini mendefinisikan kontrak, terutama sebagai Input yang masuk ke metode siklus hidup (client dan/atau server) untuk akhirnya memberikan Output. Pada akhirnya, ini merupakan bagian dari fungsi bisnis.

Terinspirasi oleh Diagram kasus penggunaan UML Dan Arsitektur berbasis peristiwasecara skematis dapat didefinisikan sebagai berikut:

$$O = klienUtama(serverUtama(I))$$

Contoh : SignIn, CreatePost, TransferAccount, InviteContacts

Perhatikan bagaimana ini selalu dimulai dengan kata kerja.

Aplikasi adalah sekelompok kasus penggunaan yang logis.

Ini seperti “modul” (apa pun maksudnya), terinspirasi oleh Desain berbasis domain (DDD) konteks yang dibatasi.

Contoh : Auth, Accounting, CMS

Produk adalah sekelompok aplikasi logis yang dirangkai bersama.

Di balik definisi barbar ini, yang ada hanyalah apa yang diketahui dan digunakan oleh pengguna akhir.

Contoh : GitHub, Facebook, LinkedIn, Airbnb

Jika didefinisikan dengan benar, aplikasi dapat digunakan kembali di beberapa produk (mis Auth).

Target mendefinisikan bagaimana suatu produk “dipaparkan” kepada pengguna akhir. Ini adalah kombinasi platform dan runtime.

Contoh : web-react, web-angular, server-node, cli-node, cli-stricli

Perhatikan bahwa ini adalah satu-satunya tempat di mana pilihan “infrastruktur” diterapkan.

Berikut adalah tampilan kasus penggunaan pada umumnya. Untuk lebih jelasnya silahkan ikuti Panduan dibawah ini.

import { UCInput, /* omitted for brevity */ } from 'libmodulor';
import { Manifest } from '../manifest.js';
import { SignInServerMain } from './SignInServerMain.js';

export interface SignInInput extends UCInput {
    email: UCInputFieldValue;
    password: UCInputFieldValue;
}

export interface SignInOPI0 extends UCOPIBase {
    jwt: JWT;
}

export const SignInUCD: UCDef = {
    io: {
        i: {
            fields: {
                email: {
                    type: new TEmail(),
                },
                password: {
                    type: new TPassword({ minLength: 10 }),
                },
            },
        },
        o: {
            parts: {
                _0: {
                    fields: {
                        jwt: {
                            type: new TJWT(),
                        },
                    },
                },
            },
        },
    },
    lifecycle: {
        client: {
            main: SendClientMain,
            policy: AnonymousUCPolicy,
        },
        server: {
            main: SignInServerMain,
            policy: AnonymousUCPolicy,
        },
    },
    metadata: Manifest.ucReg.SignIn,
};

Cukup teorinya, mari selami dan belajar sambil melakukan.

Catatan

Panduan ini secara sukarela sangat bertele-tele dan tidak dituliskan sehingga Anda bisa mendapatkan gambaran lengkap tentang cara kerjanya. npx sihir itu bagus. Namun memahami apa yang terjadi di balik layar juga merupakan hal yang baik.

Dalam Panduan ini, kita akan memulai repositori (repositori dapat berisi banyak aplikasi dan produk) dan membuat aplikasi kehidupan nyata menggunakan libmodulor primitif.

Kami akan membangun aplikasi perdagangan kecil. Ini akan berisi satu App bernama Tradingyang akan berisi satu UseCase bernama BuyAsset. Itu App akan dipasang di a Product ditelepon SuperTrader yang akan dipaparkan melalui a server TargetA web TargetA cli Target dan akhirnya, a mcp-server Target.

Jika kita mengadaptasi grafik abstrak putri duyung yang ditampilkan di atas, secara konkrit akan terlihat seperti ini :

block-beta
    server
    web
    cli
    mcp_server
    columns 4
    SuperTrader:4
    Trading:2
    Auth:2
    BuyAsset
    ListOrders
    SignUp
    SignIn



Memuat


Jika Anda tidak melihat bagan putri duyung (misalnya di npm), buka GitHub.

Harap dicatat bahwa kami hanya akan mengembangkan satu kasus penggunaan agar Panduan ini tetap sederhana, tetapi Anda akan segera mendapatkan ide untuk mengembangkan sendiri semua kasus lainnya.

Inilah langkah-langkah yang akan kita ikuti. Jangan khawatir. Meski terkesan banyak, namun akan super cepat, efisien, dan langsung pada sasaran.

  1. Buat proyek
  2. Buat Aplikasi
  3. Buat Kasus Penggunaan
  4. Uji Aplikasinya
  5. Buat Produk
  6. Buat target server
  7. Buat Target web
  8. Beralih ke penyimpanan data persisten
  9. Definisikan kata-kata untuk manusia
  10. Buat Target CLI
  11. Buat Target server mcp
  12. Ringkasan

Mari kita mulai dengan langkah pertama: Buat proyek.

Sumber

Krystian Wiśniewski
Krystian Wiśniewski is a dedicated Sports Reporter and Editor with a degree in Sports Journalism from He graduated with a degree in Journalism from the University of Warsaw. Bringing over 14 years of international reporting experience, Krystian has covered major sports events across Europe, Asia, and the United States of America. Known for his dynamic storytelling and in-depth analysis, he is passionate about capturing the excitement of sports for global audiences and currently leads sports coverage and editorial projects at Agen BRILink dan BRI.