Jadual Kandungan
Clean Architecture
Fungsi projek:
Struktur projek
Ciri Projek
Pelaksanaan kod
Tentukan lapisan entiti
Tentukan antara muka storan
Tentukan lapisan kes guna
projek koa
Laksanakan antara muka lapisan storan dalam projek koa
Melaksanakan penghalaan HTTP (lapisan pembentangan) dalam projek koa
projek nest-js
Akhir sekali
Rumah hujung hadapan web tutorial js Apakah Seni Bina Bersih? Bagaimana untuk melaksanakannya dengan Node?

Apakah Seni Bina Bersih? Bagaimana untuk melaksanakannya dengan Node?

Feb 22, 2023 pm 07:39 PM
javascript node.js Seni bina

Apakah Seni Bina Bersih? Artikel ini akan membawa anda melalui Seni Bina Bersih dan bercakap tentang cara melaksanakan Seni Bina Bersih menggunakan Node.js. Saya harap ia akan membantu anda.

Apakah Seni Bina Bersih? Bagaimana untuk melaksanakannya dengan Node?

Clean Architecture

Clean Architecture ialah corak seni bina perisian yang dicadangkan oleh Robert C. Martin untuk membahagikan sistem kepada lapisan untuk mencapai pengasingan kebimbangan, menjadikan sistem lebih mudah difahami, diselenggara dan dikembangkan. Seni bina ini membahagikan sistem kepada empat peringkat, dari dalam ke luar: lapisan entiti, lapisan kes penggunaan, lapisan pembentangan, infrastruktur (repositori, rangka kerja, dll.).

Apakah Seni Bina Bersih? Bagaimana untuk melaksanakannya dengan Node?

Dalam artikel ini, kami akan memperkenalkan cara melaksanakan Seni Bina Bersih menggunakan Node.js dan menyediakan beberapa kod sampel untuk menunjukkan konsep utama seni bina.

Seterusnya kita akan menggunakan contoh projek TypeScript (github.com/lulusir/cle… ). Projek ini menggunakan struktur Monorepo dan diuruskan menggunakan Rush.js. Folder pelayan mengandungi tiga sub-projek, iaitu teras, koa dan nestjs-app Core ialah logik perniagaan teras, koa menggunakan koa+prisma sebagai projek web rangka kerja, dan nestjs-app menggunakan nestjs + typeorm rangka kerja asas. Tujuannya adalah untuk menunjukkan bagaimana logik perniagaan yang sama boleh merapatkan rangka kerja yang berbeza. [Tutorial berkaitan yang disyorkan: tutorial video nodejs, Pengajaran pengaturcaraan]

Dalam projek ini, lapisan entiti mengandungi objek entiti dan peraturan dan logik perniagaan yang berkaitan, dan penggunaan lapisan kes Mengandungi kes penggunaan dan logik perniagaan sistem, lapisan repositori bertanggungjawab untuk menyimpan dan mendapatkan semula data, dan lapisan pembentangan ialah antara muka http yang terdedah kepada luar.

Fungsi projek:

Laksanakan fungsi penerbitan dan penyemakan imbas siaran

  • Penciptaan dan pertanyaan pengguna

  • Terbitkan, edit, pertanyaan, padam siaran

Struktur projek

├── server
│   ├── core // 核心业务逻辑
│   │   └── src
│   │       ├── domain
│   │       ├── repository
│   │       └── useCase
│   ├── koa
│   │   └── src
│   │       ├── post
│   │       └── user
│   └── nestjs-app
│       ├── src
│           ├── post
│           │   ├── dto
│           │   └── entities
│           └── user
│               └── entities
└── web
Salin selepas log masuk
  • teras: teras ialah kod untuk logik perniagaan teras

    • Domain: menyimpan kod berkaitan entiti, seperti model khusus perniagaan, dsb.
    • Kes Penggunaan: menyimpan logik perniagaan Kod yang berkaitan, seperti memproses logik perniagaan, pengesahan data, memanggil Repositori, dll.
    • Repositori: storan dan antara muka yang berkaitan untuk sistem storan luaran
  • koa/nestjs- app: Pengguna sebenar teras

    • melaksanakan Penghala tertentu mengikut antara muka teras, Repositori

Ciri Projek

  • Gunakan idea DDD dan Clean Architecture untuk memisahkan logik perniagaan daripada pelaksanaan rangka kerja.
  • Gunakan struktur projek monorepo untuk mengurus berbilang projek berkaitan dengan mudah.
  • Berbilang aplikasi sampel disediakan untuk membantu anda bermula dengan cepat.
  • Berdasarkan TypeScript, meningkatkan kebolehbacaan dan kebolehselenggaraan kod.

Dalam teras, kami mempunyai kod logik perniagaan teras. Tahap ini mengandungi domain, antara muka repositori dan kes penggunaan. Domain mengandungi kod yang berkaitan dengan entiti, seperti model perniagaan tertentu. Repositori mengandungi antara muka yang berkaitan dengan sistem storan luaran. Kes penggunaan mengandungi kod yang berkaitan dengan logik perniagaan, seperti pengendalian logik perniagaan, pengesahan data dan repositori panggilan.

Di peringkat koa/nestjs-app, kami mempunyai pengguna sebenar di peringkat teras. Mereka melaksanakan penghala dan repositori tertentu berdasarkan antara muka yang disediakan oleh lapisan teras. Salah satu kelebihan utama menggunakan Seni Bina Bersih ialah ia memisahkan logik perniagaan daripada pelaksanaan teknikal. Ini bermakna anda boleh bertukar dengan mudah antara rangka kerja dan perpustakaan yang berbeza tanpa mengubah logik perniagaan teras. Dalam contoh kami, kami boleh bertukar antara koa dan nestjs-app sambil mengekalkan logik perniagaan teras yang sama.

Pelaksanaan kod

Tentukan lapisan entiti

// server/core/src/domain/post.ts
import { User } from "./user";

export class Post {
  author: User | null = null;
  content: string = "";
  updateAt: Date = new Date(); // timestamp;
  createdAt: Date = new Date(); // timestamp;
  title: string = "";
  id: number = -1;
}

// server/core/src/domain/user.ts
export class User {
  name: string = ''

  email: string = ''

  id: number = -1
}
Salin selepas log masuk

Tentukan antara muka storan

import { Post } from "../domain/post";

export interface IPostRepository {
  create(post: Post): Promise<boolean>;

  find(id: number): Promise<Post>;

  update(post: Post): Promise<boolean>;

  delete(post: Post): Promise<boolean>;

  findMany(options: { authorId: number }): Promise<Post[]>;
}

...
import { User } from "../domain/user";

export interface IUserRepository {
  create(user: User): Promise<boolean>;
  find(id: number): Promise<User>;
}
Salin selepas log masuk

Tentukan lapisan kes guna

import { User } from "../domain/user";
import { IUserRepository } from "../repository/user";

export class UCUser {
  constructor(public userRepo: IUserRepository) {}

  find(id: number) {
    return this.userRepo.find(id);
  }

  create(name: string, email: string) {
    if (email.includes("@test.com")) {
      const user = new User();
      user.email = email;
      user.name = name;
      return this.userRepo.create(user);
    }
    throw Error("Please use legal email");
  }
}
Salin selepas log masuk

projek koa

Laksanakan antara muka lapisan storan dalam projek koa

// server/koa/src/user/user.repo.ts
import { PrismaClient } from "@prisma/client";
import { IUserRepository, User } from "core";

export class UserRepository implements IUserRepository {
  prisma = new PrismaClient();

  async create(user: User): Promise<boolean> {
    const d = await this.prisma.user_orm_entity.create({
      data: {
        email: user.email,
        name: user.name,
      },
    });

    return !!d;
  }

  async find(id: number): Promise<User> {
    const d = await this.prisma.user_orm_entity.findFirst({
      where: {
        id: id,
      },
    });

    if (d) {
      const u = new User();
      u.email = d?.email;
      u.id = d?.id;
      u.name = d?.name;
      return u;
    }
    throw Error("user id " + id + "not found");
  }
}
Salin selepas log masuk

Melaksanakan penghalaan HTTP (lapisan pembentangan) dalam projek koa

// server/koa/src/user/user.controller.ts
import Router from "@koa/router";
import { UCUser } from "core";
import { UserRepository } from "./user.repo";

export const userRouter = new Router({
  prefix: "/user",
});

userRouter.get("/:id", async (ctx, next) => {
  try {
    const service = new UCUser(new UserRepository());
    if (ctx.params.id) {
      const u = await service.find(+ctx.params.id);
      ctx.response.body = JSON.stringify(u);
    }
  } catch (e) {
    ctx.throw(400, "some error on get user", e.message);
  }
  await next();
});
Salin selepas log masuk

projek nest-js

Contoh projek nestjs boleh didapati dalam laluan ini (github.com/lulusir/cle…Saya tidak akan menyiarkan kod di sini

Akhir sekali

Sila ambil perhatian bahawa dalam projek sebenar, kami tidak akan meletakkan logik perniagaan teras dalam gudang yang berasingan (iaitu teras), ini hanya untuk menunjukkan prestasi di bawah berbeza rangka kerja Gunakan logik perniagaan yang sama

Dengan memisahkan logik perniagaan daripada rangka kerja, anda boleh bertukar dengan mudah antara rangka kerja dan perpustakaan yang berbeza tanpa mengubah logik perniagaan teras. Jika anda ingin membina aplikasi berskala dan boleh diselenggara, Seni Bina Bersih pastinya patut dipertimbangkan.

Jika anda ingin menunjukkan cara menyambung ke rangka kerja lain, anda boleh mengemukakan

alamat projek di ruang ulasan (github.com/lulusir/cle… Rakan-rakan yang berpendapat ia bagus, Anda boleh memberi bintang, terima kasih

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!

Atas ialah kandungan terperinci Apakah Seni Bina Bersih? Bagaimana untuk melaksanakannya dengan Node?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Apakah seni bina dan prinsip kerja Spring Data JPA? Apakah seni bina dan prinsip kerja Spring Data JPA? Apr 17, 2024 pm 02:48 PM

SpringDataJPA adalah berdasarkan seni bina JPA dan berinteraksi dengan pangkalan data melalui pemetaan, ORM dan pengurusan transaksi. Repositorinya menyediakan operasi CRUD, dan pertanyaan terbitan memudahkan akses pangkalan data. Selain itu, ia menggunakan pemuatan malas untuk hanya mendapatkan semula data apabila perlu, sekali gus meningkatkan prestasi.

1.3ms mengambil masa 1.3ms! Seni bina rangkaian neural mudah alih sumber terbuka terbaru Tsinghua RepViT 1.3ms mengambil masa 1.3ms! Seni bina rangkaian neural mudah alih sumber terbuka terbaru Tsinghua RepViT Mar 11, 2024 pm 12:07 PM

Alamat kertas: https://arxiv.org/abs/2307.09283 Alamat kod: https://github.com/THU-MIG/RepViTRepViT berprestasi baik dalam seni bina ViT mudah alih dan menunjukkan kelebihan yang ketara. Seterusnya, kami meneroka sumbangan kajian ini. Disebutkan dalam artikel bahawa ViT ringan biasanya berprestasi lebih baik daripada CNN ringan pada tugas visual, terutamanya disebabkan oleh modul perhatian diri berbilang kepala (MSHA) mereka yang membolehkan model mempelajari perwakilan global. Walau bagaimanapun, perbezaan seni bina antara ViT ringan dan CNN ringan belum dikaji sepenuhnya. Dalam kajian ini, penulis menyepadukan ViT ringan ke dalam yang berkesan

Seberapa curam keluk pembelajaran seni bina rangka kerja golang? Seberapa curam keluk pembelajaran seni bina rangka kerja golang? Jun 05, 2024 pm 06:59 PM

Keluk pembelajaran seni bina rangka kerja Go bergantung pada kebiasaan dengan bahasa Go dan pembangunan bahagian belakang serta kerumitan rangka kerja yang dipilih: pemahaman yang baik tentang asas bahasa Go. Ia membantu untuk mempunyai pengalaman pembangunan bahagian belakang. Rangka kerja yang berbeza dalam kerumitan membawa kepada perbezaan dalam keluk pembelajaran.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Llama3 yang mengoyak tangan lapisan 1: Melaksanakan llama3 dari awal Llama3 yang mengoyak tangan lapisan 1: Melaksanakan llama3 dari awal Jun 01, 2024 pm 05:45 PM

1. Seni Bina Llama3 Dalam siri artikel ini, kami melaksanakan llama3 dari awal. Keseluruhan seni bina Llama3: Gambarkan parameter model Llama3: Mari kita lihat nilai sebenar parameter ini dalam model Llama3. Gambar [1] Tetingkap konteks (tetingkap konteks) Apabila membuat instantiated kelas LlaMa, pembolehubah max_seq_len mentakrifkan tetingkap konteks. Terdapat parameter lain dalam kelas, tetapi parameter ini paling berkaitan secara langsung dengan model pengubah. Maks_seq_len di sini ialah 8K. Gambar [2] Saiz perbendaharaan kata dan PerhatianL

See all articles