JavaRush /Blog Java /Random-VI /Lập trình giao diện là gì? Hãy chơi kiến trúc sư

Lập trình giao diện là gì? Hãy chơi kiến trúc sư

Xuất bản trong nhóm
Có thể bạn đã từng nghe nói rằng có một thứ gọi là “lập trình giao diện”. Đã đến lúc tìm hiểu điều này tốt hơn. Sẽ có ít văn bản và nhiều mã (không có logic). Tôi không thể tìm thấy khi giao diện đầu tiên xuất hiện. Có lẽ đã rất lâu rồi và Internet đã quên mất nó. Dù sao. Ý tưởng của giao diện rất đơn giản: mô tả những gì chúng ta sẽ làm mà không đi sâu vào chi tiết. Những thứ kia. không quan trọng bạn làm như thế nào, quan trọng là bạn làm gì. Nhưng sau khi tôi viết bài này, tôi đã tìm thấy một bài viết hay về chủ đề tương tự trong nhóm. Hãy click vào link và đọc, càng nhiều càng tốt! Nội dung:

Tại sao điều này là cần thiết?

Khi mã bao gồm một lớp, điều này không thực sự cần thiết. Nhưng khi các lớp phải tương tác với nhau và số lượng của chúng vượt quá vài chục thì đã đến lúc nghĩ đến việc thiết kế. Đầu tiên, hãy suy nghĩ toàn bộ cấu trúc của dự án từ trên xuống dưới (từ trừu tượng hóa tối đa đến triển khai). Nếu một số người đang làm việc trong một dự án, thì sẽ rất thuận tiện để thống nhất, mô tả các giao diện tương tác của các lớp, sau đó tách rời các giao diện này và bắt đầu triển khai chúng. Kết quả là sự song song tốt của các nhiệm vụ; chúng dễ dàng được phân chia, bởi vì mọi người đã đồng ý về mọi thứ, nhưng không ai quan tâm đến chi tiết.

Điều này mang lại gì cho nhà phát triển?

Nhà phát triển không cần triển khai lớp. Điều này có nghĩa là sau khi mọi người đã đồng ý, anh ấy sẽ lấy những giao diện mình cần và sử dụng chúng. Việc thực hiện sẽ được thay thế khi nó sẵn sàng. Hãy để tôi chỉ cho bạn ví dụ của tôi và sau đó chúng ta sẽ nói chuyện sâu hơn. Tôi quyết định viết một dự án tính tiền nhỏ. Cô sẽ giúp chọn vé, bán vé, đưa tiền và nhận tiền ngân hàng, đổi tiền cho những ai đến đông. Vì vậy, kiến ​​trúc của tôi thở dài: PS không cần phải sao chép và tạo cấu trúc, vì lười biếng tôi đã đính kèm một kho lưu trữ có mã ở cuối bài viết ;) Cấu trúc :
Lập trình giao diện là gì?  Cùng chơi kiến ​​trúc nhé - 1
Một loạt các mô hình:
package cashbox.model;

public enum Currency {
    USD,
    EUR,
    RUR
}
package cashbox.model;

public interface Direction {
    /**
     * @return город How цель направления, куда едем/летим/двигаемся
     */
    String getCity();
}
package cashbox.model;

/**
 * модель денег
 */
public interface Money {
    /**
     * @return тип валюты
     */
    Currency getCurrency();

    /**
     * @return сумма денег
     */
    long getAmount();
}
package cashbox.model;

public interface Ticket {
    /**
     * @return направление куда двигаемся
     */
    Direction getDirection();

    /**
     * @return цена билета
     */
    Money getPrice();

    /**
     * @return транспорт на котором передвигаемся
     */
    Transport getTransport();
}
package cashbox.model;

public interface Transport {
}
Cặp ngoại lệ:
package cashbox.exception;

public class NoSoMuchMoneyException extends RuntimeException {
}
package cashbox.exception;

import cashbox.model.Money;

public class NoSuchCurrencyException extends RuntimeException {
    private Money money;

    public NoSuchCurrencyException(Money money) {
        this.money = money;
    }

    public NoSuchCurrencyException(String message, Money money) {
        super(message);
        this.money = money;
    }

    public Money getMoney() {
        return money;
    }
}
Máy tính tiền là bộ phận quan trọng nhất:
package cashbox;

import cashbox.exception.NoSoMuchMoneyException;
import cashbox.exception.NoSuchCurrencyException;
import cashbox.model.*;
import javafx.util.Pair;

import java.util.List;
import java.util.Map;

public interface CashBox {

    /**
     * @param direction направление билета
     * @return Стоимость проезда по видам транспорта
     */
    Map<Transport, Money> getPrice(Direction direction);

    /**
     * Продать билет
     * @param money деньги за билет
     * @return пару из билета и сдачи
     */
    Pair<Ticket, Money> sellTicket(Money money);

    /**
     * обмен валюты
     * @param moneyFrom валюта, которую передает клиент
     * @param currency валюта, которую клиент хочет получить, тут будет учитываться только тип валюты,
     *                 количество будет проигнорировано
     * @return Требуемая валюта
     * @throws NoSoMuchMoneyException если недостаточно денег в кассе для обмена
     * @throws NoSuchCurrencyException если нет такой валюты, отсутствующая валюта передается How атрибут
     */
    Money change(Money moneyFrom, Currency currency) throws NoSoMuchMoneyException, NoSuchCurrencyException;

    /**
     * Инкасация - отправить деньги в банк
     * @param money - сумма и валюта, можно передать несколько
     */
    void sendToBank(Money... money);

    /**
     * Запрос денег из банка
     * @param money - сумма и валюта необходимая кассе
     */
    void requestFromBank(Money... money);

    /**
     * Подбор билета.
     * В метод передается либо одно, либо другое, либо вместе.
     * Если оба атрибута null значит вызов некорректный
     * @param transport - желаемый транспорт
     * @param direction - желаемое направление
     * @return список подходящих билетов
     */
    List<Ticket> chooseBy(Transport transport, Direction direction);
}
Điều đầu tiên thu hút sự chú ý của một nhà phát triển chưa chuẩn bị trước là javadoc. Mặc dù có lẽ chúng quen thuộc với một nhà phát triển chưa qua đào tạo. Đôi khi một số người lười biếng, nhưng mã của tôi đã tốt rồi, không cần tài liệu;) Ngay cả bây giờ tôi cũng không muốn viết tài liệu về một số thứ. Chà, tại sao lại viết cho phương tiện giao thông rằng đó là phương tiện giao thông? Hãy để chuyện đó sau nhé! Tôi đã cố gắng mô tả trong tài liệu mọi thứ cần thiết. Bây giờ tôi sẽ giải thích lý do tại sao viết mã theo cách này lại thuận tiện hơn. Hãy nhìn xem, bây giờ tôi có thể cung cấp cho bạn một giao diện CashBoxvà yêu cầu bạn triển khai nó. Anh ấy không khó khăn sao? Ngoài ra, hành vi bắt buộc được mô tả trong tài liệu. Bạn sẽ không phải đợi ai đó viết mô hình hay bất cứ điều gì khác. Bạn lấy các mô hình giao diện và bắt đầu làm việc dựa trên chúng. Bây giờ bạn đang lập trình trong giao diện, xin chúc mừng. Và bây giờ là điều chính. Tôi có thể giao cho bạn nhiệm vụ triển khai CashBoxcũng như người khác để chúng tôi có 2 lần triển khai. Ví dụ, phòng vé ngoại ô và quốc tế. Bạn sẽ có thể viết mã song song và bất kỳ thành viên nào trong nhóm viết mã dựa trên CashBoxđều có thể bắt đầu và xây dựng trên giao diện. Nó rất thoải mái. Đa nhiệm, chết tiệt với nó. Link code trên Google Drive -> tại đây
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION