面向接口編程

面向接口編程
一般在實現一個系統的時候,通常是將定義與實現合為一體,不加分離的,我認為最為理解的系統設計規范應該是所有的定義與實現分離,盡管這對于系統中某些復雜的情況有些繁煩。
面向接口編程設計
使用面向接口編程思想將層與層之間通過接口依賴,下層不是直接給上層提供服務,而是定義一組接口供上層調用。至于具體的業務實現,是開發中需要做的事情,在項目架構階段,只需要定義好層與層之間的接口依賴,將框架搭建起來,編譯可以直接通過。
為什么要有面向接口編程設計?
為了提高架構的靈活性,降低層和層之間的依賴(耦合)

在一個系統框架中一個接口層可以根據不同的業務對應的有不同的實現層提供服務。
舉個例子 多層架構中,前后端分離的情況下前端只做一些弱邏輯處理,表現層只控制網絡請求的輸入輸出(通過IBLL接口和業務邏輯層依賴),業務邏輯層執行和處理強邏輯,對應不同的業務可以編寫不同的服務(IBLL接口 提供Bll.pc或者Bll.mobile多套服務)供表現層調用,
數據持久化層一般只做一些原子性的操作
數據持久化層大部分使用關系型數據庫,也有使用搜索引擎的還有文件系統,非關系型數據庫的

?

依賴倒置
在軟件設計原則中,有一種重要的思想叫做依賴倒置。它的核心思想是:不能讓高層組件依賴底層組件,而且,不管高層組件和底層組件,兩者都應依賴于抽象。
那么,這個原則和我們上面的原則是否矛盾呢?其實并不矛盾。
因為這個原則定義中的“依賴”是指“具體依賴”,而上面定義中的依賴全部指“抽象依賴”。我對這兩種依賴的定義如下:

具體依賴——如果P層中有一個或一個以上的地方實例化了Q層中某個具體類,則說P層具體依賴于Q層。

抽象依賴——如果P層沒有實例化Q層中的具體類,而是在一個或一個以上的地方實例化了Q層中某個接口,則說P層抽象依賴于Q層,也叫接口依賴于Q層。

依賴注入:
我們設計的分層架構,層與層之間應該是松散耦合的。因為是單向單一調用,所以,這里的“松散耦合”實際是指上層類不能具體依賴于下層類,而應該依賴于下層提供的一個接口。這樣,上層類不能直接實例化下層中的類,而只持有接口,至于接口所指變量最終究竟是哪一個類,則由依賴注入機制決定。
層次劃分:
目前,典型的分層架構是三層架構,即自底向上依次是數據訪問層、業務邏輯層和表示層。

職責劃分:
目前,在典型的三層架構中,對層次各自的職責劃分并沒有一個統一的規范,綜合現有的成功實踐和.NET平臺的特殊性,在本文中將三層架構的職責劃分如下:

數據訪問層——負責與數據源的交互,即數據的插入、刪除、修改以及從數據庫中讀出數據等操作。對數據的正確性和有效性不負責,對數據的用途不了解,不負擔任何業務邏輯。

業務邏輯層——負責系統領域業務的處理,負責邏輯性數據的生成、處理及轉換。對流入的邏輯性數據的正確性及有效性負責,對流出的邏輯性數據及用戶性數據不負責,對數據的呈現樣式不負責。

表示層——負責接收用戶的輸入、將輸出呈現給用戶以及訪問安全性驗證。對流入的數據的正確性和有效性負責,對呈現樣式負責,對流出的數據正確性不負責,但負責在數據不正確時給出相應的異常信息。

在一個系統框架中一個接口層可以根據不同的業務對應的有不同的實現層提供服務。
舉個例子 多層架構中,前后端分離的情況下前端只做一些弱邏輯處理,表現層只控制網絡請求的輸入輸出(通過IBLL接口和業務邏輯層依賴),業務邏輯層執行和處理強邏輯,對應不同的業務可以編寫不同的服務(IBLL接口 提供Bll.pc或者Bll.mobile多套服務)供表現層調用,
數據持久化層一般只做一些原子性的操作
數據持久化層大部分使用關系型數據庫,也有使用搜索引擎的還有文件系統,非關系型數據庫的

轉載于:https://www.cnblogs.com/zzlblog/p/8522496.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252233.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252233.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252233.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java并發學習之一——線程的創建

與每個java語言中的元素一樣,線程是對象。在Java中,我們有兩種方式創建線程: 1、通過直接繼承thread類,然后覆蓋run方法。 2、構建一個實現Runnable接口的類,然后創建一個thread類對象并傳遞Runnable對象作為構造參數 …

day1||python

測試題: 0. Python 是什么類型的語言? Python是一種面向對象、解釋型、動態類型計算機程序設計語言解釋型:程序無需編譯成二進制代碼,而是在執行時對語句一條一條編譯動態類型:在程序執行過程中,可以改變變…

2.7萬字還原行業面貌,《2019 AI金融風控行業研究報告》正式上線!...

在金融科技領域,風險控制的重要性,從其關聯的金融業務和結合的技術維度可見一斑:風控涉及信用借貸、保險、支付、供應鏈金融等場景,并運用了包括生物特征識別、機器學習、自然語言處理、大數據、云計算等多項技術。 區別于美國有…

【原創】QT簡單計算器

代碼 //main.cpp#include "calculator_111.h" #include <QtWidgets/QApplication>int main(int argc, char *argv[]) { QApplication a(argc, argv); Calculator_111 w; w.show(); return a.exec(); /* //QT creator Calculator_111 win; win.show(); return…

cs堡壘機使用說明

一、堡壘機介紹 為了保證機房的網絡安全&#xff0c;IDC內所有服務器不被允許從辦公網直接ssh登錄&#xff0c;必須通過跳板機進行間接登錄。用戶通過跳板機執行的所有命令&#xff08;包括通過跳板機登錄的其他機器后的命令&#xff09;都會被保存并審計。 cs是我們登錄IDC服…

export和export default的區別

es6中export和export default的區別 export與export default均可用于導出常量、函數、文件、模塊&#xff1b;你可以在其它文件或模塊中通過import(常量 | 函數 | 文件 | 模塊)名的方式&#xff0c;將其導入&#xff0c;以便能夠對其進行使用&#xff1b;在一個文件或模塊中&am…

koa中間件機制詳解

轉自&#xff1a;https://cnodejs.org/topic/58fd8ec7523b9d0956dad945 koa是由express原班人馬打造的一個更小、更富有表現力、更健壯的web框架。 在我眼中&#xff0c;koa的確是比express輕量的多&#xff0c;koa給我的感覺更像是一個中間件框架&#xff0c;koa只是一個基礎的…

極度推薦的文章和網站

推薦文章---收錄中 因為是及時雨,這里就給他放在開頭啦&#xff1a;http://www.cnblogs.com/zhuzhenwei918/p/7241971.html webpack3.0配置指南&#xff1a;http://www.cnblogs.com/caideyipi/articles/7080010.html 超酷的偽元素網站&#xff1a;https://tympanus.net/Develop…

倍道而行:選擇排序

一、為什么學了之后過段時間又會忘記了&#xff1f; 因為沒有去運用它和認為面試需要而沒有真正的重視。現在給它賦予意義&#xff1a;1.那就是基礎牢固&#xff0c;才可觸類旁通2.真正記得和隨時可以拿出手&#xff0c;那么面試可以PK掉一大批人。不然看到一個精妙的算法就學一…

如何構建一個真實的推薦系統?

AI 前線導讀&#xff1a;隨著互聯網行業的井噴式發展&#xff0c;數據規模呈現爆炸式增長。大數據中蘊含了巨大的價值&#xff0c;但同時也來了很 “信息過載” 的問題。推薦系統作為一個廣泛應用的信息過濾系統&#xff0c;在很多領域取得了巨大的成功。在電子商務上&#xff…

volatile的適用場景

介紹 把代碼塊聲明為 synchronized&#xff0c;有兩個重要后果&#xff0c;通常是指該代碼具有 原子性&#xff08;atomicity&#xff09;和 可見性&#xff08;visibility&#xff09;。 原子性意味著個時刻&#xff0c;只有一個線程能夠執行一段代碼&#xff0c;這段代碼通過…

link和@import的區別

1、link屬于HTML標簽&#xff0c;import是css提供的 2、link是HTML標簽&#xff0c;沒有兼容問題&#xff0c;而import只在IE5以上才能識別 3、頁面被加載時&#xff0c;link會同時被加載&#xff0c;而import引用的css會等到頁面加載完再加載 4、link方式的樣式的權重高于impo…

6.java 代碼塊

代碼塊 在java中用{}括起來的稱為代碼塊&#xff0c;代碼塊可分為以下四種: 普通代碼塊構造代碼塊靜態代碼塊同步代碼塊普通代碼塊 在方法或語句中出現的{}就稱為普通代碼塊。普通代碼塊和一般語句的執行順序由他們在代碼中出現的次序決定&#xff0c;先出現先執行。 普通代碼塊…

C#如何測試代碼運行時間

第一種方式&#xff1a;System.Diagnostics.Stopwatch stopwatch new Stopwatch(); stopwatch.Start(); // 開始監視代碼運行時間 // 需要測試的代碼 .... stopwatch.Stop(); // 停止監視 TimeSpan timespan stopwatch.Elapsed; // 獲取當前實例測量得出的總時間 double …

0074 幾道面試題

昨天參加了惠裝網的面試&#xff0c;有些題不會做的&#xff0c;記錄下來 switch語句能否作用在byte、long、String上 Java1.7以前&#xff1a;byte、short、int、char Java1.7開始&#xff1a;新增String 因此switch語句不能作用在long上&#xff0c;看下面代碼&#xff1a; p…

SpringBoot入門之內嵌Tomcat配置

spring boot默認web程序啟用tomcat內嵌容器tomcat&#xff0c;監聽8080端口,servletPath默認為 / 。需要用到的就是端口、上下文路徑的修改&#xff0c;在spring boot中其修改方法極其簡單&#xff0c;實例如下&#xff1a; server.port8088 server.context-path/test 啟動程序…

第二十二章:動畫(六)

復合動畫您可以混合等待和未等待的調用來創建復合動畫。 例如&#xff0c;假設您希望按鈕在大小擴展的同時旋轉360度然后收縮。ViewExtensions類定義一個方法名稱ScaleTo&#xff0c;它為Scale屬性設置動畫&#xff0c;就像RotateTo為Rotate屬性設置動畫一樣。 Button大小的擴展…

C#操作Excel總結

0. 導入命名空間&#xff1a; 1234using Microsoft.Office.Core;using Microsoft.Office.Interop.Excel;using System.IO;using System.Reflection;1. 如何打開已有excel文檔&#xff0c;或者創建一個新的excel文檔 123Application app new Application();Workbooks wbks app…

Ubuntu16.04用源安裝Nginx+PHP5.6+MySQL5.6

安裝Nginx 1、首先添加nginx_signing.key(必須&#xff0c;否則出錯) $ wget http://nginx.org/keys/nginx_signing.key$ sudo apt-key add nginx_signing.key 2、添加]Nginx](http://nginx.org/)官方提供的源 $ echo "deb http://nginx.org/packages/ubuntu/ trusty ngin…

leetcode -39組合總數

搜就完事了&#xff0c;沒想著優化。唉~太菜&#xff0c;給一個位置標記位置&#xff0c;然后通過該位置向該位置及該位置以下尋找&#xff0c;這樣不存在什么重復回去查找問題。 如果總結大于目標值&#xff0c;回溯一下&#xff0c;如果不大于繼續。 class Solution { public…