Spring Model

Spring Model

基本概念

基本上model的部份就是原本的商業邏輯,將系統分割為MVC的重要原因就是可以將web與非web的應用程式共用商業邏輯 (model)。Model的部份通常包括Entity及資料庫存取。

Entity

Entity通常用來儲存資料,可以用在ViewController的參數傳遞,也可以用在Controller及資料存取物件 (Data Access Object, DAO)的參數傳遞。

package com.example.demo.entity;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Customer {
 private String name;
 private String address;
 private int weight;

 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }

 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }

 public int getWeight() {
  return weight;
 }
 public void setWeight(int weight) {
  this.weight = weight;
 }
}

Spring Validation中,也將驗證的規則放在Entity中。

package com.example.demo.entity;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Customer {
 @NotNull
 @Size(min=1)
 private String name;
 @NotNull
 @Size(min=1)
 private String address;
 @Min(0)
 private int weight;

 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }

 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }

 public int getWeight() {
  return weight;
 }
 public void setWeight(int weight) {
  this.weight = weight;
 }
}

Data Access Object

Data Access Object (DAO)是負責存取資料庫的內容,基本上內容跟上面的範例一樣,詳細內容請參考Spring JPASpring JDBC

package com.example.demo.entity;

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

@Entity
public class Customer {
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Long id;
 private String name;
 private String address;
 private int weight;

 public Long getId() {
  return id;
}
public void setId(Long id) {
 this.id = id;
}

public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }

 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }

 public int getWeight() {
  return weight;
 }
 public void setWeight(int weight) {
  this.weight = weight;
 }
}

命名規則

  • 要有意義,所以名稱都應該有意義,避免類似「i」、「i」、「firstVariable」等無法代表變數內容的名稱。
  • 類別名: 類別名的第一個字一律大寫,如果是由多個字組成,每個字的開頭一律大寫,如:PurchaseOrder。
  • 物件名: 物件名的第一個字一律小寫,如果是由多個字組成,除第一個以外,每個字的開頭一律大寫,如:purchaseOrder。
  • 屬性(變數)名: 屬性的第一個字一律小寫,如果是由多個字組成,除第一個以外,每個字的開頭一律大寫,如:reorderPoint,習慣上不再冠類別名,(如:在Customer裡,不用customerName,而是,name)。
  • 方法名: 方法的第一個字一律小寫,如果是由多個字組成,除第一個以外,每個字的開頭一律大寫,如:getReorderPoint,另外,取得內容一律用get開頭 (稱為getter),設定內容一律用set開頭(稱為setter),回傳狀態一律用is開頭,如:isEmpty()。在eclipse可以直接產生setter跟getter。

參考資料