1. 程式人生 > >Action層, Service層 和 Dao層的功能區分

Action層, Service層 和 Dao層的功能區分

1.Action/Service/DAO簡介:

    Action是管理業務(Service)排程和管理跳轉的。

     Service是管理具體的功能的。

    Action只負責管理,而Service負責實施。

    DAO只完成增刪改查,雖然可以1-n,n-n,1-1關聯,模糊、動態、子查詢都可以。但是無論多麼複雜的查詢,dao只是封裝增刪改查。至於增刪查改如何去實現一個功能,dao是不管的。

     總結這三者,通過例子來解釋:

    Action像是服務員,顧客點什麼菜,菜上給幾號桌,都是ta的職責;

    Service是廚師,action送來的選單上的菜全是ta做的;

    Dao是廚房的小工,和原材料打交道的事情全是ta管。

    相互關係是,小工(dao)的工作是要滿足廚師(service)的要求,廚師要滿足服務員(action)轉達的客戶(頁面使用者)的要求,服務員自然就是為客戶服務嘍。

    現在最基本的分層方式,結合了SSH架構。Model層就是對應的資料庫表的實體類。Dao層是使用了Hibernate連線資料庫、操作資料庫(增刪改查)。Service層:引用對應的Dao資料庫操作。Action層:引用對應的Service層,在這裡結合Struts的配置檔案,跳轉到指定的頁面,當然也能接受頁面傳遞的請求資料,也可以做些計算處理。

     以上的Hibernate,Struts,都需要注入到Spring的配置檔案中,Spring把這些聯絡起來,成為一個整體。

2.三大框架Struts/Hibernate/Spring

     簡單地說:

   Struts——控制用的;

   Hibernate——操作資料庫的;

   Spring——解耦用的。

    詳細地說:

    Struts在SSH框架中起控制的作用,其核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,主要控制邏輯關係的處理。

    Hibernate是資料持久化層,是一種新的物件、關係的對映工具,提供了從Java類到資料表的對映,也提供了資料查詢和恢復等機制,大大減少資料訪問的複雜度。把對資料庫的直接操作,轉換為對持久物件的操作。

    Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。面向介面的程式設計,由容器控制程式之間的依賴關係,而非傳統實現中,由程式程式碼直接操控。這就是所謂“控制反轉”的概念所在:(依賴)控制權由應用程式碼中轉到了外部容器,控制權的轉移,是所謂反轉。依賴注入,即元件之間的依賴關係由容器在執行期決定,形象地說,即由容器動態地將某種依賴關係注入到元件之中,起到的主要作用是解耦。

    Struts、Spring、Hibernate在各層的作用:

  (1)Struts負責Web層:ActionFormBean接收網頁中表單提交的資料,然後通過Action進行處理,再Forward到對應的網頁。在Struts-config.xml中定義,ActionServlet會載入。

   (2) Spring負責業務層管理,即Service(或Manager)。

  • Service為action提供統計的呼叫介面,封裝持久層的DAO;
  • 可以寫一些自己的業務方法;
  • 統一的Javabean管理方法;
  • 宣告式事務管理;
  • 整合Hibernate。

  (3)Hibernate,負責持久化層,完成對資料庫的crud操作。提供OR/Mapping。它由一組.hbm.xml檔案和POJO,是跟資料庫中的表相對應的。然後定義DAO,這些是跟資料庫打交道的類,它們會使用PO。

3.框架業務邏輯分析:

      在Struts +Spring + Hibernate的系統中,

     物件的呼叫流程是:JSP—Action—Service—DAO—Hibernate

     資料的流向是:ActionFormBean接受使用者的資料,Action將資料從ActionFormBean中取出,封裝成VO或PO,再呼叫業務層的Bean類,完成各種業務處理後再Forward。而業務層Bean收到這個PO物件之後,會呼叫DAO介面方法,進行持久化操作。

     SSH框架的優點:

    Hibernate的最大好處就是根據資料庫的表,反向生成實體類,並且還有關係在裡面,還有就是它對資料的操作也很方便;

    Spring,省去了在類裡面new物件的過程,把這個呼叫與被呼叫的關係直接展示到了配置檔案裡,做任何操作都變得簡單了。

     簡單流程舉例說明:

    程式框架搭建好,並且把各種jar包匯入後,就開始進行業務邏輯分析——

    假設一個最基本的註冊功能:頁面有兩個文字框,一個使用者名稱(username)和一個密碼(password)。以QQ註冊網頁說明,這裡以暱稱和密碼為代表進行舉例。

 首先是action層:它是負責在頁面和程式之間傳輸資料的,還有作用是做頁面跳轉。頁面由使用者填寫表單資料,點選提交按鈕,頁面的表單資料由Hibernate自動封裝到該頁面表單所對應的ActionFrom(ActionFrom跟實體類不是一個東西,ActionFrom是頁面有什麼值,類裡就寫什麼屬性,是用來封裝表單資料用的;而實體類是完全按照資料庫的欄位生成的,實體類可以當做ActionFrom用,但ActionFrom絕對不可以當做實體類用),這樣表單資料就以ActionFrom物件的形式在Action的點選“提交按鈕”執行的那個方法裡存在了。這個時候需要做的就是把表單資料存入資料庫中。此時,Action的功能告一段落,接著是把資料傳入BIZ層。

      BIZE層(業務邏輯層):負責的是對資料的處理。如果沒有資料處理任務的話,此層只做單純的資料傳遞作用,而後又到了DAO層。

      DAO層(資料庫操作層):負責對資料向資料庫增刪改查的操作。

      在該註冊的框架中,如果不使用Spring的話,每個層之間的資料傳遞都需要new一個呼叫該層資料的類的例項。而使用了Spring的話,需要做的就是把DAO層和BIZ層的每個類都寫一個介面類,介面類裡寫實現類的方法,在呼叫的時候不new物件,直接用物件點(.)方法就可以,別忘了對每個物件加上set/get方法。


相關推薦

java中ActionServiceDao功能區分

封裝 滿足 ont 事務管理 簡單 聲明式 所在 框架搭建 調用接口 Action/Service/DAO簡介:Action是管理業務(Service)調度和管理跳轉的。Service是管理具體的功能的。Action只負責管理,而Service負責實施。DAO只完成增刪改查

ActionServiceDao功能區分

Action/Service/DAO簡介: Action是管理業務(Service)排程和管理跳轉的。 Service是管理具體的功能的。 Action只負責管理,而Service負責實施。 DAO只完成增刪改查,雖然可以1-n,n-n,1-1關聯,模糊、動態、子查詢都可以。但是無論多麼複雜的查詢,dao只是

JAVA中Action, Service ,modle Dao功能區分

首先這是現在最基本的分層方式,結合了SSH架構。modle層就是對應的資料庫表的實體類。Dao層是使用了hibernate連線資料庫、操作資料庫(增刪改查)。Service層:引用對應的Dao資料庫操作,在這裡可以編寫自己需要的程式碼(比如簡單的判斷)。Action層:引用

Action, Service Dao功能區分

1.Action/Service/DAO簡介:     Action是管理業務(Service)排程和管理跳轉的。      Service是管理具體的功能的。     Action只負責管理,而Service負責實施。     DAO只完成增刪改查,雖然可以1-

Java分層思想:Action, Service ,modle Dao功能區分

Dao主要做資料庫的互動工作:DAO層中封裝了資料庫的增刪查改方法 一般分DAO介面(定義資料增刪查改操作)和DAOImpl實現類(具體實現增刪查改方法) Model 是模型 存放你的實

JavaWeb三架構中ServiceDao物件單例化可行性

宣告:以下個人觀點,僅作參考;    閱讀正文的前提知識:   一. 單例模式:   單例概念(百度): 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類一個類

SSM框架下,spring中servicedao的關係

【部分轉載】 1、java web 中dao 層和service層都使用介面,是否是為使用介面而使用介面? 一個dao或者一個service都是一個介面,然後再一個類去實現,為什麼不直接使用一個類呢?在入門級(單表)的SSM+maven程式碼裡面,我們甚至可以看到dao和service的介面

使用MyBatis Generator自動生成實體、mapperdao

本人使用: 整合開發環境:idea 專案管理工具:maven 資料庫:oracle 框架:Spring+SpringMVC+myBatis 主要步驟: 在pom.xml中加入外掛依賴 寫mbgConfiguration.xml檔案,jdbc.propertie

spring的一個事務管理,在controllerdao都可以用

import org.springframework.transaction.support.DefaultTransactionDefinition; public PlatformTransactionManager getTransactionManager() { re

Spring通過XML配置c3p0連線池dao註解注入使用 jdbcTemplate

Spring通過註解配置c3p0連線池和dao使用 jdbcTemplate 1.Spring配置c3p0連線池 第一步:匯入c3p0的jar包 第二步:建立Spring配置檔案,配置連線池 平常我們寫c3p0連線池時是這樣寫的:

mybatis自動生成entitydao中Mapper介面中的各個方法的意義及example實體類的用法

package cn.lichenyang.emall.dao; import cn.lichenyang.emall.entity.TbContent; import cn.lichenyang.emall.entity.TbContentExample; import

MyBatis中的mapping.xmldao介面組合使用

Springboot與mybatis整合在application.properties檔案中mybatis.mapper-locations=classpath*:mapping/*.xmlmybatis中的mapping.xml的與Dao層組合使用bean實體類(@Data

mybatis-generator生成modeldao程式碼

1、建立資料夾myibatisGen 2、下載mybatis-generator-core-1.3.1.jar或者其它版本的jar包,到myibatisGen資料夾下 3、為生成程式碼建立配置檔案“generatorConfig.xml” 4、生成程式碼        ja

vxlan vs GRE(三組播組播如何對應起來)

由器 ams 之間 數據信息 控制 格式 tunnel network 處理 www.huawei.com/ilink/cnenterprise/download/HW_401028 http://feisky.xyz/sdn/basic/vxlan.html 華為的v

Java的ServiceManagerNative的ServiceManager的對應過程

轉自:https://blog.csdn.net/moonshine2016/article/details/54378358 參考:https://www.jianshu.com/p/9c023701c261   幾天前一個同事問Java層的Binder和Java層的Serv

TCP的分段IP的分片之間的關係 MTUMSS之間的關係

                首先說明:資料報的分段和分片確實發生,分段發生在傳輸層,分片發生在網路層。但是對於分段來說,這是經常發生在UDP傳輸層協議上的情況,對於傳輸層使用TCP協議的通道來說,這種事情很少發生。1,MTU(Maximum Transmission Unit,MTU),最大傳輸單元(1)

組播組播

平時常常說組播,其實只是多播的另外一種叫法。多播中,因為把參與多播的所有接收者稱為組,所以才有組播的說法。多播技術要比廣播技術複雜的多。多播技術對一些應用很重要,比如電視會議,聊天室等。 物理層多播 系統需要對網路介面進行配置,讓介面識別該地址。 ip

nginx七代理轉發代理轉發實戰

nginx原始碼編譯安裝,本安裝版本為V1.15.2 ./configure --with-stream --add-module=./nginx-module-vts --with-http_gzip_static_module --with-http_stub_stat

架構CS架構BS淺談

• C/S 和B/S 作為兩種不同的系統登入方式,各有優缺點,要做出正確的判斷就要對兩種架構有著明確的認識。下面就分別介紹這兩種結構的特點。C/S 結構(Client/Server 的簡稱,客戶機/伺服器模式)。在上個世紀八十年代及九十年代初便已經得到了大量應用,最直接的原因

在tensorflow下構建二神經網路神經網路解決10分類任務對比

繼剛才的邏輯迴歸解決的十分類任務意猶未盡,分別設計了二層和三層的神經網路對比解決這個10分類問題下面畫一個草圖代表三層神經網路的計算圖:import numpy as np import tensorflow as tf import matplotlib.pyplot as