Rumah Java javaTutorial Melaksanakan Corak Reka Bentuk Prototaip dalam But Spring

Melaksanakan Corak Reka Bentuk Prototaip dalam But Spring

Nov 30, 2024 pm 10:44 PM

pengenalan

Dalam pembangunan aplikasi, mengurus penciptaan objek boleh menjadi rumit, terutamanya apabila berurusan dengan kejadian yang hampir sama tetapi berbeza dalam butiran khusus. Corak Reka Bentuk Prototaip menawarkan penyelesaian dengan membenarkan kami mencipta objek baharu dengan menyalin, atau "mengklon," objek sedia ada. Corak ini amat berguna apabila objek mahal untuk dibuat atau melibatkan pemulaan yang meluas.

Dalam artikel ini, kami akan meneroka cara melaksanakan Corak Reka Bentuk Prototaip dalam aplikasi Spring Boot, menggunakan kes penggunaan e-dagang praktikal: mencipta dan meneruskan varian produk. Melalui contoh ini, anda akan mempelajari bukan sahaja asas Corak Prototaip tetapi juga cara ia boleh menyelaraskan penciptaan objek dalam aplikasi dunia sebenar.

Memahami Corak Reka Bentuk Prototaip

Corak Prototaip ialah corak reka bentuk ciptaan yang membolehkan anda mencipta kejadian baharu dengan mengklon objek sedia ada, dikenali sebagai prototaip. Pendekatan ini amat berguna apabila anda mempunyai objek asas dengan pelbagai sifat dan mencipta setiap varian dari awal akan menjadi berlebihan dan tidak cekap.

Di Java, corak ini sering dilaksanakan menggunakan antara muka Boleh Diklon atau dengan mentakrifkan kaedah klon tersuai. Idea utama adalah untuk menyediakan "cetak biru" yang boleh direplikasi dengan pengubahsuaian, mengekalkan objek asal tetap utuh.

Faedah Utama Corak Prototaip:

  1. Mengurangkan Masa Permulaan: Daripada mencipta objek dari awal, anda mengklon dan mengubah suai kejadian sedia ada, menjimatkan masa permulaan.

  2. Merangkumi Logik Penciptaan Objek: Anda mentakrifkan cara objek diklon dalam objek itu sendiri, menyembunyikan butiran instantiasi.

  3. Meningkatkan Prestasi: Untuk aplikasi yang kerap mencipta objek serupa, seperti varian produk, Corak Prototaip boleh meningkatkan prestasi.

Kes Penggunaan E-dagang: Mengurus Varian Produk

Bayangkan platform e-dagang di mana produk asas mempunyai pelbagai konfigurasi atau "varian" — contohnya, telefon pintar dengan warna yang berbeza, pilihan storan dan syarat jaminan. Daripada mencipta semula setiap varian dari awal, kami boleh mengklonkan produk asas dan kemudian melaraskan medan tertentu mengikut keperluan. Dengan cara ini, atribut yang dikongsi kekal konsisten dan kami hanya mengubah suai butiran khusus varian.

Dalam contoh kami, kami akan membina perkhidmatan Spring Boot yang ringkas untuk mencipta dan mengekalkan varian produk menggunakan Corak Prototaip.

Melaksanakan Corak Prototaip dalam But Spring

Langkah 1: Menentukan Produk Asas

Mulakan dengan menentukan kelas Produk dengan medan yang diperlukan untuk produk, seperti id, nama, warna, model, storan, waranti dan harga. Kami juga akan menambah kaedah klonProduk untuk membuat salinan produk.

public interface ProductPrototype extends Cloneable {
    ProductPrototype cloneProduct();
}
Salin selepas log masuk
@Entity
@Table(name = "products")
@Data
public class Product implements ProductPrototype {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "product_id")
    private Long productId;

    @Column(name = "name")
    private String name;

    @Column(name = "model")
    private String model;

    @Column(name = "color")
    private String color;

    @Column(name = "storage")
    private int storage;

    @Column(name = "warranty")
    private int warranty;

    @Column(name = "price")
    private double price;

    @Override
    public ProductPrototype cloneProduct() {
        try {
            Product product = (Product) super.clone();
            product.setId(null); // database will assign new Id for each cloned instance
            return product;
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
}
Salin selepas log masuk

Dalam persediaan ini:

cloneProduct: Kaedah ini mencipta klon objek Produk, menetapkan ID kepada null untuk memastikan bahawa pangkalan data memberikan ID baharu untuk setiap contoh klon.

Langkah 2: Mencipta Perkhidmatan untuk Mengendalikan Varian

Seterusnya, buat ProductService dengan kaedah untuk menyimpan varian. Kaedah ini mengklonkan produk asas dan menggunakan atribut khusus varian, kemudian menyimpannya sebagai produk baharu.

public interface ProductService {

    // For saving the base product
    Product saveBaseProduct(Product product);

    // For saving the variants
    Product saveVariant(Long baseProductId, VariantRequest variant);
}
Salin selepas log masuk
@Log4j2
@Service
public class ProductServiceImpl implements ProductService {

    private final ProductRepository productRepository;

    public ProductServiceImpl(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    /**
     * Saving Base product, Going to use this object for cloning
     *
     * @param product the input
     * @return Product Object
     */
    @Override
    public Product saveBaseProduct(Product product) {
        log.debug("Save base product with the detail {}", product);
        return productRepository.save(product);
    }

    /**
     * Fetching the base product and cloning it to add the variant informations
     *
     * @param baseProductId baseProductId
     * @param variant       The input request
     * @return Product
     */
    @Override
    public Product saveVariant(Long baseProductId, VariantRequest variant) {
        log.debug("Save variant for the base product {}", baseProductId);
        Product baseProduct = productRepository.findByProductId(baseProductId)
                .orElseThrow(() -> new NoSuchElementException("Base product not found!"));

        // Cloning the baseProduct and adding the variant details
        Product variantDetail = (Product) baseProduct.cloneProduct();
        variantDetail.setColor(variant.color());
        variantDetail.setModel(variant.model());
        variantDetail.setWarranty(variant.warranty());
        variantDetail.setPrice(variant.price());
        variantDetail.setStorage(variant.storage());

        // Save the variant details
        return productRepository.save(variantDetail);
    }
}
Salin selepas log masuk

Dalam perkhidmatan ini:

saveVariant: Kaedah ini mendapatkan semula produk asas mengikut ID, mengklonkannya, menggunakan butiran varian dan menyimpannya sebagai entri baharu dalam pangkalan data.

Langkah 3: Pengawal untuk Mencipta Varian

Buat pengawal REST yang mudah untuk mendedahkan API penciptaan varian.

@RestController
@RequestMapping("/api/v1/products")
@Log4j2
public class ProductController {

    private final ProductService productService;

    public ProductController(ProductService productService) {
        this.productService = productService;
    }

    @PostMapping
    public ResponseEntity<Product> saveBaseProduct(@RequestBody Product product) {
        log.debug("Rest request to save the base product {}", product);
        return ResponseEntity.ok(productService.saveBaseProduct(product));
    }

    @PostMapping("/{baseProductId}/variants")
    public ResponseEntity<Product> saveVariants(@PathVariable Long baseProductId, @RequestBody VariantRequest variantRequest) {
        log.debug("Rest request to create the variant for the base product");
        return ResponseEntity.ok(productService.saveVariant(baseProductId, variantRequest));
    }
}
Salin selepas log masuk

Di sini:

saveVariant: Titik akhir ini mengendalikan permintaan HTTP POST untuk mencipta varian untuk produk tertentu. Ia menyerahkan logik penciptaan kepada ProductService.

Faedah Menggunakan Corak Prototaip

Dengan pelaksanaan ini, kami melihat beberapa kelebihan yang jelas:

Kebolehgunaan Semula Kod: Dengan merangkum logik pengklonan dalam kelas Produk, kami mengelakkan pertindihan kod dalam lapisan perkhidmatan dan pengawal kami.

Penyelenggaraan Ringkas: Corak Prototaip memusatkan logik pengklonan, menjadikannya lebih mudah untuk mengurus perubahan pada struktur objek.

Penciptaan Varian Cekap: Setiap varian baharu ialah klon produk asas, mengurangkan kemasukan data berlebihan dan memastikan konsistensi merentas atribut dikongsi.

Jalankan program

Bina projek Spring Boot menggunakan Gradle

./gradlew build
./gradlew bootRun
Salin selepas log masuk

Laksanakan melalui klien Rehat

Simpan produk asas

curl --location 'http://localhost:8080/api/v1/products' \
--header 'Content-Type: application/json' \
--data '{
    "productId": 101,
    "name": "Apple Iphone 16",
    "model": "Iphone 16",
    "color": "black",
    "storage": 128,
    "warranty": 1,
    "price": 12.5
}'
Salin selepas log masuk

Simpan varian

curl --location 'http://localhost:8080/api/v1/products/101/variants' \
--header 'Content-Type: application/json' \
--data '{
    "model": "Iphone 16",
    "color": "dark night",
    "storage": 256,
    "warranty": 1,
    "price": 14.5
}'
Salin selepas log masuk

Keputusan (Varian baharu berterusan tanpa sebarang isu)

Implementing the Prototype Design Pattern in Spring Boot

Repositori GitHub

Anda boleh mendapatkan pelaksanaan penuh Corak Reka Bentuk Prototaip untuk varian produk dalam repositori GitHub berikut:

Pautan Repositori GitHub

Ikuti Saya di LinkedIn

Kekal berhubung dan ikuti saya untuk mendapatkan lebih banyak artikel, tutorial dan cerapan tentang pembangunan perisian, corak reka bentuk dan Spring Boot:

Ikuti saya di LinkedIn

Kesimpulan

Corak Reka Bentuk Prototaip ialah alat yang berkuasa untuk kes yang kerap berlaku pertindihan objek, seperti yang dilihat dengan varian produk dalam aplikasi e-dagang. Dengan melaksanakan corak ini dalam aplikasi Spring Boot, kami meningkatkan kecekapan penciptaan objek dan kebolehselenggaraan kod kami. Pendekatan ini amat berguna dalam senario yang menuntut penciptaan objek serupa dengan variasi kecil, menjadikannya teknik yang berharga untuk pembangunan aplikasi dunia sebenar.

Atas ialah kandungan terperinci Melaksanakan Corak Reka Bentuk Prototaip dalam But Spring. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Apr 19, 2025 pm 06:21 PM

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Apr 19, 2025 pm 11:42 PM

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Apr 19, 2025 pm 11:30 PM

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Apr 19, 2025 pm 11:45 PM

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Bagaimana cara menukar objek Java dengan selamat ke array? Bagaimana cara menukar objek Java dengan selamat ke array? Apr 19, 2025 pm 11:33 PM

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Apr 19, 2025 pm 11:27 PM

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimana dengan elegan mendapatkan syarat pertanyaan bangunan pembolehubah kelas entiti apabila menggunakan tkmybatis untuk pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan syarat pertanyaan bangunan pembolehubah kelas entiti apabila menggunakan tkmybatis untuk pertanyaan pangkalan data? Apr 19, 2025 pm 09:51 PM

Apabila menggunakan tkmybatis untuk pertanyaan pangkalan data, bagaimana dengan anggun mendapatkan nama pembolehubah kelas entiti untuk membina keadaan pertanyaan adalah masalah biasa. Artikel ini akan ...

See all articles