JavaRush /جاوا بلاگ /Random-SD /بهار خوفناڪ نه آهي، هڪ ڊي ٽي او پرت

بهار خوفناڪ نه آهي، هڪ ڊي ٽي او پرت

گروپ ۾ شايع ٿيل
مضمون جي چڪر جو مواد اسان بهار جي باري ۾ ڳالهائڻ جاري رکون ٿا. اڄ اسين ڊي ٽي او جي نموني جو تجزيو ڪنداسين، سمجھڻ لاءِ توھان پڙھي سگھوٿا هتي . ڊي ٽي او جي باري ۾ سڀ کان ڏکيو شيء اهو سمجهڻ آهي ته ان جي ضرورت ڇو آهي. اچو ته ڀاڄين تي قياس ڪرڻ شروع ڪريون، ۽ ساڳئي وقت، ڪجهه ڪوڊ لکو، شايد رستي ۾ ڪجهه واضح ٿي ويندو. هڪ اسپرنگ بوٽ پروجيڪٽ ٺاهيو، ڳنڍيو h2 ۽ Lombok . پيڪيجز ٺاهيو: ادارا، مخزن، خدمتون، استعمال. ادارن ۾، هڪ پيداوار جو ادارو ٺاهيو:
package ru.java.rush.entities;

import lombok.Data;
import lombok.experimental.Accessors;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Accessors(chain = true)
@Entity
@Data
public class ProductEntity {

    @Id
    @Column
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    Integer id;

    @Column
    String name;

    @Column
    Integer purchasePrice;//закупочная цена

}
ProducRepository، ProducService ڪلاس ۽ ItiiateUtil ڪلاس ( اڳئين آرٽيڪل وانگر ) لاڳو ڪريو. اچو ته اسان آلو 20 روبل في ڪلوگرام جي هول سيل قيمت تي خريد ڪيو، ۽ گاجر 14 روبل في ڪلوگرام تي. اسان خريد ڪيل شين کي اسٽوريج ۾ رکون ٿا. اچو ته ڊيٽابيس ۾ ھيٺيون رڪارڊ شامل ڪريون: [Id = 1، نالو = "آلو"، خريداري قيمت = 20] [Id = 2، نالو = "گاجر"، خريداري قيمت = 14] مهذب اندازن جي طور تي، اسان کي لازمي طور تي اسان جو سامان وڪڻڻ گهرجي، ان لاءِ اچو ته ان کي خوبصورتي سان پيڪيج ڏيون ۽ قيمت وڌائينداسين. اهو آهي، اسان وٽ گندي ۽ اڻ وڻندڙ ​​​​ڀاڄيون هڪ ڍير ۾ گڏ ڪيون ويون آهن، پر عيش واري حصي مان صاف پريميئم ويگن پراڊڪٽس هوندا. اتفاق ڪيو، اهو هاڻي ساڳيو پراڊڪٽ (آبجڪٽ) نه هوندو جيڪو اسان بلڪ ۾ خريد ڪيو. نئين پراڊڪٽ لاءِ، اچو ته ٺاھيون dto پيڪيج ۽ ان ۾ ڪلاس ProductDto
package ru.java.rush.dto;

import lombok.Data;

@Data
public class ProductDto {
    Integer id;
    String name;
    Integer purchasePrice;
    String  packaging;//упаковка
    Integer salePrice;//цена реализации
}
ProductDto ۾ ٻه متغير آهن جيڪي ProductEntity نٿو ڪري: "پيڪيجنگ" ۽ "وڪرو قيمت". dto اعتراض تي مشتمل ٿي سگھي ٿو بلڪل ساڳيا متغيرات جيئن entity، يا ٿي سگھي ٿو انھن مان وڌيڪ يا گھٽ. اسان کي ياد آهي ته هڪ اعتراض کي ٻئي ۾ تبديل ڪرڻ نقشي جو معاملو آهي. utils پيڪيج ۾ اسين ٺاهينداسين MappingUtils ڪلاس
package ru.java.rush.utils;

import org.springframework.stereotype.Service;
import ru.java.rush.dto.ProductDto;
import ru.java.rush.entities.ProductEntity;

@Service
public class MappingUtils {
//из entity в dto
    public ProductDto mapToProductDto(ProductEntity entity){
        ProductDto dto = new ProductDto();
        dto.setId(entity.getId());
        dto.setName(entity.getName());
        dto.setPurchasePrice(entity.getPurchasePrice());
        return dto;
    }
//из dto в entity
    public ProductEntity mapToProductEntity(ProductDto dto){
        ProductEntity entity = new ProductEntity();
        entity.setId(dto.getId());
        entity.setName(dto.getName());
        entity.setPurchasePrice(dto.getPurchasePrice());
        return entity;
    }
}
اسان صرف هڪ شئي مان فيلڊ ۾ ڀريون ٿا ساڳين شعبن سان ٻي شئي مان. پراڊڪٽ سروس ڪلاس ۾ اسين هڪ واحد پراڊڪٽ يا پراڊڪٽس جي لسٽ ڳولڻ لاءِ طريقا لاڳو ڪندا آهيون، پر ان کان اڳ اسان مٿي لکيل طريقي کي استعمال ڪندي اداري کي dto ۾ تبديل ڪريون ٿا.
private final ProductRepository productRepository;
private final MappingUtils mappingUtils;


//для листа продуктов мы использовали стрим
public List<ProductDto> findAll() {
    return productRepository.findAll().stream() //создали из листа стирим
            .map(mappingUtils::mapToProductDto) //оператором из streamAPI map, использовали для каждого element метод mapToProductDto из класса MappingUtils
.collect(Collectors.toList()); //превратor стрим обратно в коллекцию, а точнее в лист
}

//для одиночного продукта обошлись проще
public ProductDto findById(Integer id) {
    return mappingUtils.mapToProductDto( //в метод mapToProductDto
            productRepository.findById(id) //поместor результат поиска по id
                    .orElse(new ProductEntity()) //если ни чего не нашли, то вернем пустой entity
    );
}
جيڪڏهن اسان هاڻي انهن ڀاڄين کي ڊسپلي تي رکون ٿا ته ڇا ٿيندو؟ اچو ته ڏسون. ائين ڪرڻ لاءِ، هيٺ ڏنل ڪوڊ لکو ItiiateUtil ۽ ان کي هلايو.
System.out.println("\nВитрина магазина");
for (ProductDto dto : productService.findAll()) {
    System.out.println(dto);
}
ٻاھر آھي: اسٽور ڊسپلي ProductDto(id=1, name=Potatoes, purchasePrice=20, packaging=null, salePrice=null) ProductDto(id=2, name=Carrots, purchasePrice=14, packaging=null, salePrice=null) خير، مان نه ٿو ڪريان! ڪو به اهڙو ڀاڄيون خريد نه ڪندو: اهي گندا آهن، پيڪيج ٿيل نه آهن، ۽ وڪرو جي قيمت نامعلوم ناهي. اهو ڪاروبار منطق لاء وقت آهي. اسان ان کي پروڊڪٽ سروس ڪلاس ۾ لاڳو ڪريون ٿا. اچو ته پهريان هن ڪلاس ۾ ڪجهه متغير شامل ڪريون:
private final Integer margin = 5;//это наша накрутка на цену
private final String packaging = "Упаковано в лучшем виде";//так будет выглядеть упаковка
هر عمل لاءِ: پيڪنگنگ ۽ قيمت مارڪ اپ، اسان ساڳي طبقي ۾ هڪ الڳ طريقو ٺاهينداسين:
// упаковываем товар
public void pack(List<ProductDto> list) {
    list.forEach(productDto ->
            productDto.setPackaging(packaging)
    );
}

// делаем деньги
public void makeMoney(List<ProductDto> list) {
    list.forEach(productDto ->
            productDto.setSalePrice(productDto.getPurchasePrice() * margin)
    );
}
اسان واپس وڃو ItiiateUtil ۽ ڊسپلي تي ڊسپلي کي ھيٺ ڏنل ڪوڊ سان تبديل ڪريو
List<ProductDto> productDtos = productService.findAll();

productService.pack(productDtos);
productService.makeMoney(productDtos);

System.out.println("\nВитрина магазина");
for (ProductDto dto : productDtos)) {
    System.out.println(dto);
}
اسان ڪندا آهيون: اسٽور ڊسپلي ProductDto(id=1، name=Potatoes، purchase Price=20, Packaging=Packed in the best way, sale Price=100) ProductDto(id=2, name=Carrots, purchase Price=14, packaging=packed بهترين طريقي سان، salePrice=70) پراڊڪٽ خوبصورت انداز ۾ پيڪيج ٿيل آهي، قيمت به آهي، پر ڇا توهان ونڊو تي ڪٿي ڏٺو آهي ته اها قيمت ڏيکاري ٿي جنهن لاءِ توهان ان کي بلڪ ۾ خريد ڪيو آهي ۽ ڪجهه ٻيو نمبر. اسان مٿي ڏنل ڪوڊ کي فائل سان تبديل ڪريون ٿا:
List<ProductDto> productDtos = productService.findAll();

productService.pack(productDtos);
productService.makeMoney(productDtos);

System.out.println("\nВитрина магазина");
for (ProductDto dto : productDtos) {
    System.out.println(String.format(
            "Купите: %s , по цене:  %d", dto.getName(), dto.getSalePrice()
    ));
}
ڪلاس InitiateUtils کي ختم ٿيڻ گهرجي هن طرح ڏسڻ ۾:
@Service
@RequiredArgsConstructor
public class InitiateUtils implements CommandLineRunner {

    private final ProductService productService;

    @Override
    public void run(String... args) throws Exception {

        List<ProductEntity> products = new ArrayList<>(
                Arrays.asList(
                        new ProductEntity()
                                .setName("Картофель")
                                .setPurchasePrice(20),
                        new ProductEntity()
                                .setName("Морковь")
                                .setPurchasePrice(14)
                ));

        productService.saveAll(products);

        List<ProductDto> productDtos = productService.findAll();

        productService.pack(productDtos);
        productService.makeMoney(productDtos);

        System.out.println("\nВитрина магазина");
        for (ProductDto dto : productDtos) {
            System.out.println(String.format(
                    "Купите: %s , по цене:  %d", dto.getName(), dto.getSalePrice()
            ));
        }
    }
}
اچو ته لانچ ڪريون: اسٽور ونڊو خريد ڪريو: آلو، قيمت: 100 خريد ڪريو: گاجر، قيمت: 70 ٻي شيءِ! هاڻي اسان سمجهون ٿا ته dto سٺيون شيون کڻي آيو، سواءِ اضافي ڪوڊ جي: 1. اسان ڊيٽابيس ۾ شيون تبديل ڪرڻ کان سواءِ ڪاروباري منطق انجام ڏئي سگهون ٿا (اچو ته چئو ته، اسان وٽ پيڪنگنگ ۽ سيلز جي قيمت بابت فيلڊ هجڻ جي ضرورت ناهي. هي ٽيبل). آلو اسٽوريج ۾ چڱي ريت رهندو جيتوڻيڪ قيمت جي ٽيگ سان پيڪنگ ڪرڻ کان سواء، اهي اتي به ضرورت کان وڌيڪ آهن. 2. هن لائن ۾ List<ProductDto>productDtos=productService.findAll() اسان شين جو هڪ ڪيش ٺاهيو آهي جيڪي ڪاروباري منطق ۾ ڪم ڪرڻ لاءِ آسان آهن. اهو آهي جيڪڏهن اسان ڪجهه سامان اسٽور جي پوئين ڪمري ۾ رکون ٿا. 3. اهو اسان کي ٻن ڪاروباري عملن کي انجام ڏيڻ جي اجازت ڏئي ٿو: پيڪنگنگ ۽ مارڪ اپ، پر اسان ڊيٽابيس کي صرف هڪ ڀيرو درخواست ڪئي (ڊيٽابيس جا سوال ڪارڪردگي جي لحاظ کان ڪافي مشڪل آهن). توھان پراڊڪٽ کي پيڪ ڪري سگھو ٿا، ان تي قيمتي ٽئگ رکي سگھو ٿا ۽ ان کي ڊسپلي تي رکي سگھو ٿا- ان کي ھر ڀيري اسٽوريج روم ڏانھن ھلڻ بجاءِ، يوٽيلٽي روم مان بتدريج کڻڻ. سوال ته: ”اهو ايترو ڏکيو ڇو آهي؟“، ماڻهو به جواب ڳولڻ جي ڪوشش ڪندا آهن، پڙهو . ايندڙ مضمون
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION