我覺得持久性應該更多地鏈接到對象本身 比servlet。
他們都不是正確的,基本上,我們需要層應用程序正確,即,我們應該不能混淆這兩個前端(用戶界面)的擔憂和業務邏輯及以下檢查更多的解釋上層疊的Web應用程序。
我應該把DB功能放到Person obj中嗎?或者創建一些 新的「東西」來處理它?
不,您需要像使用DAO(數據訪問對象)或存儲庫層一樣分別處理數據訪問層。
一般而言,web應用程序的體系結構是這樣的:
HTML/JSP - >的Servlet & Controller類 - >服務層 - > DAO層 - >數據庫
這些層中的每一個是出於其自身原因,我們不應該混淆關注。
現在特別談論DAO層(看看這裏的DAO模式是如何工作的),有各種框架可以讓事情變得更容易,而ORM(對象關係映射)是您可能感興趣的概念。僅舉幾例,流行的ORM框架是Hibernate和Spring data JPA。
UPDATE:
所以,小服務程序接受該請求時,數據解串相匹配的JSON模式,一些 數據綁定類。然後將它們傳遞給 某些「服務層」,它會執行某種操作並生成與表結構相匹配的DAO對象並將其保存起來?
你就要成功了,你缺少的唯一的事情就是DAO對象是單實例類(不保存數據,只是他們提供的方法來訪問數據庫)和模型/實體Bean是真的用於保存數據。
可以參考下面的簡單的例子假設它正在訪問在數據庫中的PRODUCT
表:
ProductDAOImpl類(singleton對象):
public class ProductDAOImpl implements ProductDAO { //or ProductRepository
public boolean save(Product product) {
//add implementation
}
public List<Product> queryProducts() {
//add implementation
}
public Product queryUniqueProduct(String productId) {
//add implementation
}
//etc...any other methods you would like
}
產品類(一個對象每個客戶/用戶的要求):
public class Product { //It is an Entity class
private String id;
private String name;
private int price;
//all other fields
//getters and setters
}
如果請求和數據模型之間不匹配,該怎麼辦?
始終,確保兩個表現層Bean和實體(數據庫)模型bean應該是獨立的,即,它是不共享跨越這兩層豆,因爲一個處理業務邏輯等是一個很好的做法對於用戶界面(前端),兩者應該是鬆耦合。
因此,servlet接受請求,將數據反序列化爲一些匹配json模式的數據綁定類。然後它將這些傳遞給一些「服務層」,它執行某種操作並生成與表結構相匹配的DAO對象並將其保存下來? – MichaelB
添加了一個示例,請看上面的 – developer
如果請求和數據模型之間存在不匹配,那麼該怎麼辦......比如說,您將收到「person」json的POST,如「{name:joe,age:21,address:{street :假的,城市:西雅圖}}發送給「人」的控制,創造一個「人」 POJO和「的PersonDAO」,然後利用了「一個AddressDao」做任何數據操作 – MichaelB