1

私は自分のコードの多くの場所でハードコーディングされた比較を行ってきましたが、それに満足していません。これにアプローチする正しい方法を探しています。

public class Status {
  public static final int ACTIVE = 1,
                        INACTIVE = 2,
                           ENDED = 3,
                          PAUSED = 4,
                             NEW = 5,
                            INIT = 6,
                         STARTED = 7;

  private int id;
  private String name;

  public int getId(){ return this.id; }
  public String getName(){ return this.name; }

  //get and set the object from the db by the id
  public Status(int id){}
}

public class Job {
  private int id;
  private Status stage;

  //get and set the object from the db by the id
  Job(int id){}

  public boolean isStageStatusEnded(){
    return this.stage.getId() == Status.ENDED;
  }
}

私はこのDBテーブルを持っています:

mysql> desc statuses;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

mysql> select * from statuses;
+----+----------+
| id | name     |
+----+----------+
|  1 | ACTIVE   |
|  2 | INACTIVE |
|  3 | ENDED    |
|  4 | PAUSED   |
|  5 | NEW      |
|  6 | INIT     |
|  7 | STARTED  |
+----+----------+

ご覧のとおりstatic final int、クラス内はテーブルと行Statusの正確なコピーです。いつでも値が変更される場合(/ )、 も変更する必要があります。どうすれば変更できるかわかりませんが、方法を知っている場合は共有してください。statusesreturn this.stage.getId() == Status.ENDED;idnamestatic int

4

2 に答える 2

0

データベースまたはコードのいずれかで、これらの値をどこかにハードコーディングしておく必要があります。そうしないと、各値が何を表しているのかわからなくなります。その後、必要に応じて DB に永続化するか、アプリにロードすることができます。

Paul が書いたように、アプリケーションの開始時に DB から値をロードしますが、多くの神経を節約できる定数enumの代わりに aを使用することをお勧めします。int

便利なリンクを次に示します。定数に対する列挙型については、J.Bloch の「Effective Java」を参照してください。

于 2013-08-12T18:51:06.303 に答える