برنامه نویسی

Transformig یک پلت فرم سرمایه گذاری fintech: از PHP به جاوا (بوت بهار)

فهرست مطالب

بررسی اجمالی پروژه

کد میراث می تواند یک چالش بزرگ برای سیستم عامل های fintech باشد ، به ویژه در هنگام برخورد با سیستم های PHP پیری که حفظ و مقیاس آن دشوار است. برای پرداختن به این مسائل ، ما یک بستر سرمایه گذاری را از PHP به جاوا ، با استفاده از API های بوت بهار و SOAP مبتنی بر قابلیت اطمینان ، عملکرد و قابلیت حفظ ، مجدداً مورد استفاده قرار دادیم.

در این مقاله ، ما از طریق الگوهای طراحی مورد استفاده ، ساختار پروژه و نمونه های کد کلیدی قدم می زنیم – همه به شکلی که حتی افراد بدون تجربه توسعه نرم افزار عمیق می توانند درک کنند.

اهداف اصلی

چرا Refactor از PHP به جاوا؟

PHP به طور گسترده ای برای برنامه های وب مورد استفاده قرار می گیرد اما می تواند هنگام مقیاس بندی سیستم عامل های مالی با درجه شرکت ، چالش هایی را ارائه دهد. دلایل اصلی اصلاح مجدد عبارتند از:

✔ حفظ قابلیت حفظ-ماهیت شی گرا جاوا ، مدیریت کد های بزرگ را آسانتر می کند.
✔ بهینه سازی عملکرد-جاوا برای برنامه های با کارایی بالا با معاملات در مقیاس بزرگ مناسب تر است.
✔ امنیت بهتر – جاوا ویژگی های امنیتی قوی را ارائه می دهد ، که در برنامه های کاربردی fintech بسیار مهم است.
✔ مقیاس پذیری – بوت بهار معماری میکروسرویس را امکان پذیر می کند و امکان مدولار و مقیاس بهتر را فراهم می کند.

برای تسهیل یک انتقال صاف ، ما یک ساختار پلتفرم جدید را طراحی کردیم که شامل الگوهای طراحی است که کد تمیز ، قابل استفاده مجدد و مقیاس پذیر را ترویج می کند. همچنین API با استفاده از پروتکل صابون در جاوا طراحی شده است.

الگوی کامل پروژه با اجرای API SOAP (جاوا + بوت بهار)

این کتابچه راهنمای جامع شما را از طریق ساخت بستر سرمایه گذاری جدید با استفاده از جاوا (بوت بهار) با نقاط پایانی API صابون و الگوهای طراحی که در مورد آنها بحث کردیم.

📂 ساختار پروژه

investment-platform/
├── src/
│   └── main/
│       └── java/
│           └── com/
│               └── investment/
│                   ├── adapter/
│                   │   ├── BankAAdapter.java
│                   │   └── BankBAdapter.java
│                   ├── config/
│                   │   └── SOAPConfig.java
│                   ├── controller/
│                   │   └── InvestmentController.java
│                   ├── facade/
│                   │   └── BankServiceFacade.java
│                   ├── model/
│                   │   └── Client.java
│                   ├── repository/
│                   │   └── ClientRepository.java
│                   ├── service/
│                   │   ├── InvestmentService.java
│                   │   └── MarketDataService.java
│                   ├── soap/
│                   │   ├── BankAPI.java
│                   │   └── SOAPClient.java
│                   ├── strategy/
│                   │   ├── CompoundInterestStrategy.java
│                   │   └── SimpleInterestStrategy.java
│                   └── InvestmentPlatformApplication.java
└── pom.xml
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ساختار پروژه توضیح داد:

در سرمایه گذاری پروژه از ساختاری پیروی می کند معماری لایه ای جایی که هر پوشه یک هدف خاص را ارائه می دهد. این رویکرد نگرانی ها را از هم جدا می کند، ساخت سیستم بیشتر مقیاس پذیر ، قابل نگهداری و قابل آزمایشبشر

در اینجا کاری است که هر پوشه انجام می دهد و چرا وجود دارد:

1⃣ adapter/ – ادغام API بانکی (الگوی آداپتور)

📌 هدف: شامل کلاس هایی است که به این پلتفرم اجازه می دهد با تبدیل پاسخ های خود به یک قالب استاندارد ، با API های مختلف بانک ها ارتباط برقرار کند.

📌 چرا مورد نیاز است؟

  • بانک های مختلف دارند ساختارهای مختلف API (برخی از XML ، برخی JSON).
  • در الگوی آداپتور این تعامل را استاندارد می کند ، بنابراین سیستم اصلی هنگام افزودن یک بانک جدید نیازی به تغییر ندارد.

📌 پرونده های مثال:

  • BankAAdapter.java – تماسهای API به بانک A را کنترل می کند.
  • BankBAdapter.java – تماسهای API به بانک B را انجام می دهد.

2 config/ – تنظیمات پیکربندی

📌 هدف: حاوی پرونده های مربوط به پیکربندی ، مانند تنظیمات API SOAP و خصوصیات اتصال پایگاه داده است.

📌 چرا مورد نیاز است؟

  • پیکربندی را متمرکز می کند و آن را نگه می دارد جدا کردن از منطق اصلی تجارت.
  • اجازه می دهد اصلاحات آسان بدون تأثیرگذاری بر کد برنامه اصلی.

📌 پرونده های مثال:

  • SOAPConfig.java – مشتری API SOAP را پیکربندی می کند.

3⃣ controller/ – نقاط پایانی API REST

📌 هدف: تعریف کردن نقاط پایانی API REST این مشتریان خارجی (برنامه های وب ، برنامه های تلفن همراه) با آنها تعامل دارند.

📌 چرا مورد نیاز است؟

  • لایه API را از هم جدا می کند از منطق سرویس
  • دسته درخواست های HTTP و آنها را به خدمات مناسب منتقل می کند.

📌 پرونده های مثال:

  • InvestmentController.java – درخواست های مربوط به محاسبات سرمایه گذاری و مانده بانکی را کنترل می کند.

4⃣ facade/ – ساده سازی تعامل پیچیده بانکی (الگوی نمای)

📌 هدف: به عنوان یک عمل می کند یک نقطه تعامل برای چندین بانک

📌 چرا مورد نیاز است؟

  • اگر کاربر به مانده حساب از آن نیاز دارد چندین بانک، به جای اینکه هر بانک را جداگانه صدا کنید ، الگوی نما فراهم می کند روش متحدبشر
  • ساده کردن تعامل بین API های مختلف بانکی.

📌 پرونده های مثال:

  • BankServiceFacade.java – تماس BankAAdapter وت BankBAdapter و تعادل تلفیقی را برمی گرداند.

5⃣ model/ – اشیاء داده (اشخاص)

📌 هدف: تعریف کردن اشیاء جاوا که موجودات پایگاه داده را نشان می دهد.

📌 چرا مورد نیاز است؟

  • نگه می دارد ساختار داده متمرکز استبشر
  • در نقشه برداری جداول پایگاه داده به اشیاء جاوا کمک می کند.

📌 پرونده های مثال:

  • Client.java – نماینده یک سرمایه گذار با ویژگی هایی مانند idبا nameوت investmentTypeبشر

6 repository/ – دسترسی به پایگاه داده (الگوی مخزن)

📌 هدف: تعریف کردن عملیات پایگاه داده با استفاده از داده های بهار JPA.

📌 چرا مورد نیاز است؟

  • محاصره می شود نمایش داده های پایگاه داده به طوری که سایر قسمت های برنامه نیازی به نگرانی در مورد منطق بانک اطلاعاتی ندارند.
  • استفاده می کند الگوی مخزن برای دسترسی آسان به پایگاه داده.

📌 پرونده های مثال:

  • ClientRepository.java – روش هایی برای واکشی فراهم می کند مشتری داده ها از پایگاه داده.

7⃣ service/ – منطق تجارت

📌 هدف: حاوی منطق اصلی از بستر سرمایه گذاری ، مانند محاسبات سرمایه گذاری و تعامل بانکی.

📌 چرا مورد نیاز است؟

  • منطق کسب و کار را از هم جدا می کند از کنترل کننده ها (لایه API).
  • قابلیت استفاده مجدد را ترویج می کند– کنترل کننده ها و سایر خدمات می توانند این روش ها را صدا کنند.

📌 پرونده های مثال:

  • InvestmentService.java – دستگیره محاسبات سرمایه گذاری و بازیابی تعادل بانکیبشر
  • MarketDataService.java -تغییرات بازار را ردیابی می کند (برای به روزرسانی های آینده در آینده).

8 soap/ – مشتریان API SOAP

📌 هدف: دسته ارتباطات API مبتنی بر صابون با خدمات بانکی خارجی.

📌 چرا مورد نیاز است؟

  • API های صابون نیاز دارند دست زدن به (به عنوان مثال ، تجزیه XML).
  • در کلاس صابون تماس های API کارآمد را با استفاده از الگوی تک آهنگبشر

📌 پرونده های مثال:

  • SOAPClient.java – الف کلاس Singleton این درخواست های API SOAP را مدیریت می کند.
  • BankAPI.javaرابط تعریف روشهای تعامل با بانک های مختلفبشر

9 strategy/ – استراتژی های محاسبه سرمایه گذاری (الگوی استراتژی)

📌 هدف: حاوی روشهای مختلف محاسبه سرمایه گذاری ، مانند علاقه مرکب وت علاقه سادهبشر

📌 چرا مورد نیاز است؟

  • ممکن است کاربران بخواهند مدلهای مختلف سرمایه گذاریبشر
  • در الگوی استراتژی امکان جابجایی بین استراتژی های مختلف محاسبه را فراهم می کند پویابشر

📌 پرونده های مثال:

  • InvestmentStrategy.java – قرارداد را تعریف می کند همه استراتژی ها
  • CompoundInterestStrategy.java – لوازم جانبی علاقه مرکب محاسبات
  • SimpleInterestStrategy.java – لوازم جانبی علاقه ساده محاسبات

🔟 InvestmentPlatformApplication.java – نقطه ورود اصلی

📌 هدف: این است طبقه اصلی از کجا برنامه بوت بهار شروع می شود.

📌 چرا مورد نیاز است؟

  • در @SpringBootApplication حاشیه نویسی به طور خودکار برنامه را پیکربندی می کند.
  • این کل سیستم عامل را به عنوان یک اجرا می کند سرویس بوت بهاربشر

📌 پرونده مثال:

  • InvestmentPlatformApplication.java – حاوی main() روش

با ساخت سکو از این طریق ، ما به دست می آوریم:

جدایی نگرانی ها – هر پوشه مسئولیت روشنی دارد.

مقیاس پذیری – ویژگی های جدید را می توان بدون اصلاح کل سیستم اضافه کرد.

حفظ قابلیت – توسعه دهندگان می توانند به سرعت پروژه را درک و اصلاح کنند.

غذای اصلی از ساختار

  • تفکیک نگرانی ها – هر ویژگی در پوشه خود جدا شده است.
  • قابلیت گسترش – این پلتفرم با استفاده از الگوی آداپتور از چندین بانک پشتیبانی می کند.
  • مقیاس پذیری – خدمات آینده را می توان بدون مختل کردن عملکرد موجود اضافه کرد.

بیایید ببینیم که چگونه این تئوری در یک سناریوی دنیای واقعی استفاده می شود.

1. یک پروژه بوت بهار را آغاز کنید

پروژه را با استفاده از Spring Initializr ایجاد کنید:

  • وابستگی ها: وب بهاربا صابون استارت بوت بهاربا داده استارت بوت بهار JPAبا خدمات وب استارت بوت بهاربا لقببا راننده mysql
    این تنظیم شامل:
  • Web Boot Spring – برای ساخت API های REST.
  • خدمات وب راه اندازی Spring-برای رسیدگی به API های مبتنی بر صابون.
  • بهار داده JPA – برای مدیریت معاملات پایگاه داده با MySQL.

pom.xml


    4.0.0
    com.investment
    investment-platform
    1.0.0
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-web-services
        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            mysql
            mysql-connector-java
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.projectlombok
            lombok
            provided
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. پیکربندی

برنامه

server.port=8080

spring.datasource.url=jdbc:mysql://localhost:3306/investment_db
spring.datasource.username=root
spring.datasource.password=secret

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

soapconfig.java

package com.investment.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

@Configuration
public class SOAPConfig {

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.investment.soap");
        return marshaller;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🟡 3. مشتری صابون با الگوی مجرد

صابون

package com.investment.soap;

import javax.xml.soap.*;

public class SOAPClient {
    private static SOAPClient instance;
    private SOAPConnection connection;

    private SOAPClient() throws SOAPException {
        SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
        connection = factory.createConnection();
    }

    public static SOAPClient getInstance() throws SOAPException {
        if (instance == null) {
            synchronized (SOAPClient.class) {
                if (instance == null) {
                    instance = new SOAPClient();
                }
            }
        }
        return instance;
    }

    public SOAPMessage sendRequest(String endpointUrl, SOAPMessage request) throws SOAPException {
        return connection.call(request, endpointUrl);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا Singleton؟

  • تضمین می کند که فقط یک اتصال صابون وجود دارد و باعث کاهش استفاده از حافظه می شود.
  • از درخواست های کپی API جلوگیری می کند و باعث بهبود کارآیی می شود.

🟠 4. الگوی آداپتور برای API های بانکی

رابط صابون برای بانک ها

package com.investment.soap;

public interface BankAPI {
    String getAccountBalance(String accountId);
    String transferFunds(String fromAccount, String toAccount, double amount);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بانک یک آداپتور

package com.investment.adapter;

import com.investment.soap.BankAPI;

public class BankAAdapter implements BankAPI {
    @Override
    public String getAccountBalance(String accountId) {
        // Simulate SOAP request to Bank A
        return "10000.00";
    }

    @Override
    public String transferFunds(String fromAccount, String toAccount, double amount) {
        return "BankA Transfer Successful";
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا الگوی آداپتور؟

  • به سیستم اجازه می دهد تا بدون تغییر کد اصلی ، با چندین API های بانکی ادغام شود.
  • تعویض صاف بین بانکهای مختلف را تضمین می کند.

🟡 5. الگوی نمای برای چندین بانک

bankservicefacade.java

package com.investment.facade;

import com.investment.soap.BankAPI;

public class BankServiceFacade {
    private final BankAPI bankAAdapter;
    private final BankAPI bankBAdapter;

    public BankServiceFacade(BankAPI bankAAdapter, BankAPI bankBAdapter) {
        this.bankAAdapter = bankAAdapter;
        this.bankBAdapter = bankBAdapter;
    }

    public String getConsolidatedBalance(String accountId) {
        String balanceA = bankAAdapter.getAccountBalance(accountId);
        String balanceB = bankBAdapter.getAccountBalance(accountId);
        return "BankA: " + balanceA + ", BankB: " + balanceB;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا الگوی نمای؟

  • با قرار دادن یک روش واحد برای واکشی تعادل ، پیچیدگی را کاهش می دهد.
  • خوانایی کد را بهبود می بخشد.

🟢 6 الگوی استراتژی برای محاسبات سرمایه گذاری

investmentstrategy.java

package com.investment.strategy;

public interface InvestmentStrategy {
    double calculateReturn(double principal, double rate, int years);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

computintereststrategy.java

package com.investment.strategy;

public class CompoundInterestStrategy implements InvestmentStrategy {
    @Override
    public double calculateReturn(double principal, double rate, int years) {
        return principal * Math.pow((1 + rate / 100), years);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ساده interestrategy.java

package com.investment.strategy;

public class SimpleInterestStrategy implements InvestmentStrategy {
    @Override
    public double calculateReturn(double principal, double rate, int years) {
        return principal + (principal * rate * years / 100);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا الگوی استراتژی؟

  • کاربران می توانند بین علاقه مرکب یا علاقه ساده به صورت پویا انتخاب کنند.
  • اضافه کردن استراتژی های جدید سرمایه گذاری در آینده را ساده می کند.

🟤 7. الگوی Observer برای به روزرسانی های بازار در زمان واقعی

MarketDataservice.java

package com.investment.service;

import java.util.ArrayList;
import java.util.List;

interface Observer {
    void update(String marketUpdate);
}

interface MarketData {
    void addObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String update);
}

public class MarketDataService implements MarketData {
    private final List<Observer> observers = new ArrayList<>();

    @Override
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers(String update) {
        for (Observer observer : observers) {
            observer.update(update);
        }
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🟠 8. الگوی مخزن برای عملیات پایگاه داده

موجودیت مشتری

package com.investment.model;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Data
public class Client {
    @Id
    private String id;
    private String name;
    private String investmentType;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

رابط مخزن مشتری

package com.investment.repository;

import com.investment.model.Client;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ClientRepository extends JpaRepository<Client, String> {
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🟢 9. لایه سرویس

investmentservice.java

package com.investment.service;

import com.investment.facade.BankServiceFacade;
import com.investment.strategy.InvestmentStrategy;
import org.springframework.stereotype.Service;

@Service
public class InvestmentService {
    private final BankServiceFacade bankServiceFacade;
    private InvestmentStrategy strategy;

    public InvestmentService(BankServiceFacade bankServiceFacade) {
        this.bankServiceFacade = bankServiceFacade;
    }

    public void setStrategy(InvestmentStrategy strategy) {
        this.strategy = strategy;
    }

    public double calculateReturn(double principal, double rate, int years) {
        return strategy.calculateReturn(principal, rate, years);
    }

    public String getAccountBalances(String accountId) {
        return bankServiceFacade.getConsolidatedBalance(accountId);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🟡 10. کنترلر استراحت

سرمایه گذاری controller.java

package com.investment.controller;

import com.investment.service.InvestmentService;
import com.investment.strategy.CompoundInterestStrategy;
import com.investment.strategy.SimpleInterestStrategy;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/investment")
public class InvestmentController {
    private final InvestmentService investmentService;

    public InvestmentController(InvestmentService investmentService) {
        this.investmentService = investmentService;
    }

    @GetMapping("/returns")
    public double calculateReturns(
            @RequestParam String type,
            @RequestParam double principal,
            @RequestParam double rate,
            @RequestParam int years) {

        if ("compound".equalsIgnoreCase(type)) {
            investmentService.setStrategy(new CompoundInterestStrategy());
        } else {
            investmentService.setStrategy(new SimpleInterestStrategy());
        }

        return investmentService.calculateReturn(principal, rate, years);
    }

    @GetMapping("/balances")
    public String getBalances(@RequestParam String accountId) {
        return investmentService.getAccountBalances(accountId);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اجرای سیستم عامل

مرحله 1: mysql را شروع کنید

docker run --name mysql-investment -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=investment_db -p 3306:3306 -d mysql:5.7
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 2: ساخت و اجرا برنامه بوت بهار

./mvnw clean install
./mvnw spring-boot:run
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 3: نقاط پایانی آزمون

پایان

  • 🟡 معماری مقیاس پذیر: طراحی لایه ای با جدایی نگرانی ها.
  • 🟠 الگوهای انعطاف پذیر: آسان برای گسترش یا تغییر منطق.
  • 🟢 اجزای قابل استفاده مجدد: آداپتورهای ادغام چند بانک.
  • 🟤 طراحی کارآمد: Singleton برای منابع مشترک.
  • 🟡 به روزرسانی های زمان واقعی: الگوی ناظر برای تغییرات بازار.

این مقاله و موارد دیگر را در Fzeba.com بخوانید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا