0

私は DAO MVC を使用しています。グーグルで調べた後、いくつかの変数をJava に Enumとして、MySQLにString として格納することを検討しています。そのため、Item.java (Item テーブルに保持される) に静的初期化と静的メソッドを作成して、Enum を String に、またはその逆に変換します。しかし、この静的初期化と静的メソッドの後、私の Item.java クラスは POJO ではなくなったと誰かが私に言いました。

質問:

  1. なぜNOT POJOになったのですか?
  2. そして、これらのメソッドを静的な Item.java クラスにしない場合、POJO になりますか?

編集:私のコード:

package model;

import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;

public class Order {

    public enum OrderStatus {
        NOT_REVIEWED,
        APPROVED,
        REJECTED,
        RETURNED
    } 

    // ==================
    // =   Transient    = 
    // ==================
    private static final Map<String, OrderStatus> convertStringToOrderStatusMap = new HashMap<String, OrderStatus>(3);
    private static final Map<OrderStatus, String> convertOrderStatusToStringMap = new EnumMap<OrderStatus, String>(OrderStatus.class);

    static {
        convertStringToOrderStatusMap.put("not reviewed", OrderStatus.NOT_REVIEWED);
        convertStringToOrderStatusMap.put("approved", OrderStatus.APPROVED);
        convertStringToOrderStatusMap.put("rejected", OrderStatus.REJECTED);
        convertStringToOrderStatusMap.put("returned", OrderStatus.RETURNED);
        convertOrderStatusToStringMap.put(OrderStatus.NOT_REVIEWED, "not reviewed");
        convertOrderStatusToStringMap.put(OrderStatus.APPROVED, "approved");
        convertOrderStatusToStringMap.put(OrderStatus.REJECTED, "rejected");
        convertOrderStatusToStringMap.put(OrderStatus.RETURNED, "returned");
    }
    // ==================
    // =   Attributes   = 
    // ==================
    private Integer orderId; //Primary key
    private OrderStatus status;
    private Integer reimbursement;
    private String firstName;
    private String secondName;
    private String passportData;
    private String pickUpDate; 
    private String dropOffDate;
    //java.util.Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2011-05-18 16:29:31");
    private String customerCell;
    private String customerAddress;

    // ==================
    // =  Foreign Keys  = 
    // ==================
    private User user;
    private Car car;

    // ==================
    // = Public methods = 
    // ==================

    public Integer getOrderId() {
        return orderId;
    }

    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }

    public String getStatus() {
        return convertOrderStatusToString(status);
    }
    public void setStatus(OrderStatus status) {
        this.status = status;
    }

    public Integer getReimbursement() {
        return this.reimbursement;
    }

    public void setReimbursement(Integer value) {
        this.reimbursement = value;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getSecondName() {
        return secondName;
    }

    public void setSecondName(String secondName) {
        this.secondName = secondName;
    }

    public String getPassportData() {
        return passportData;
    }

    public void setPassportData(String passportData) {
        this.passportData = passportData;
    }

    public String getPickUpDate() {
        return pickUpDate;
    }

    public void setPickUpDate(String pickUpDate) {
        this.pickUpDate = pickUpDate;
    }

    public String getDropOffDate() {
        return dropOffDate;
    }

    public void setDropOffDate(String dropOffDate) {
        this.dropOffDate = dropOffDate;
    }

    public String getCustomerCell() {
        return customerCell;
    }

    public void setCustomerCell(String customerCell) {
        this.customerCell = customerCell;
    }

    public String getCustomerAddress() {
        return customerAddress;
    }

    public void setCustomerAddress(String customerAddress) {
        this.customerAddress = customerAddress;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    public static OrderStatus converStringToOrderStatus(String status) {
        return convertStringToOrderStatusMap.get(status);
    }

    public static String convertOrderStatusToString(OrderStatus status) {
        return convertOrderStatusToStringMap.get(status);
    }
}
4

2 に答える 2

0

POJO は無視しましょう。

彼らが意味するのは、サービス指向とドメイン主導です。

サービス指向は、状態からの動作の厳密な分離に従います。それらは、本質的に美化された構造体であるPOJOデータオブジェクトを呼び出します。したがって、サービスに静的メソッドを配置します。実際、サービス指向のアプローチにも反するため、おそらくメソッドを静的にしたくないでしょう(依存性注入と悪のシングルトンを参照)。

Domain Driven は、従来の OOP (Rails Active Record など) の考え方に従っており、POJO に動作を入れても問題ないと信じています。その結果、状態と動作が結合されているため、実装は 1 つしかないため、ドメイン オブジェクトの静的メソッドは問題ありません。

DAO ルートに行く場合は、サービス指向を行う可能性が最も高いでしょう。私の意見では、DAO POJO ルートを実行する場合は、これらのデータ オブジェクトに不変オブジェクト (恥知らずなプラグ)を使用する必要があります。

最後に、私の知る限りインラインenumをクラスに入れることは、POJO の定義に違反しません。@EnumeratedJPAを使用しているため、知っておく必要があると言われています。

于 2013-04-09T19:05:38.970 に答える
0

Plain Old Javaオブジェクトにはデータしかないためです。ロジックとメソッドを追加すると、もはや Plain Old Java Object ではなくなります。

それは必ずしも悪いことではありませんが、ロジックを独自のクラスにリファクタリングできる場合があります。

于 2013-04-09T18:55:19.683 に答える