日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谈谈我对DI的理解

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈谈我对DI的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文中DI指依賴倒置。


依賴的概念

Baidu百科:依靠別人或事物而不能自立或自給。

軟件開發中的依賴:依賴描述了兩個模型元素之間的關系,如果被依賴的模型元素發生變化就會影響到另一個模型元素。


DI的概念

A. 上層模塊不應該依賴于下層模塊,它們共同依賴于一個抽象。
B. 抽象不能依賴于具象,具象依賴于抽象。

實例談開


在分層開發中,通常會有這樣的兩個模塊:DAL(數據訪問層)和BLL(業務邏輯層) 。 下面就以電子商務系統中的 訂單、產品、用戶 為例來說說這兩個模塊之間的依賴關系。


正向依賴

DAL:

public class OrderDao
{
??? public List<Orders> GetOrderByUserID(int userid)
??? {
??????? throw new NotImplementedException();
??? }
??? public List<Orders> GetOrderByProductID(int productID)
??? {
??????? throw new NotImplementedException();
??? }
}
BLL:


public class Order
{
??? private OrderDao orderDao;//對DAL中OrderDao的引用
??? public Order(OrderDao orderDao)
??? {
??????? orderDao = orderDao;
??? }
??? public List<Orders> GetOrderByUserID(int userid)
??? {
??????? List<Orders> list = null;
??????? list = orderDao.GetOrderByUserID(userid);
??????? return list;
??? }
??? public List<Orders> GetOrderByProductID(int productID)
??? {
??????? List<Orders> list = null;
??????? list = orderDao.GetOrderByProductID(productID);
??????? return list;
??? }
}
?BLL中Order持有了DAL中OrderDao的引用,這個時候BLL模塊依賴于DAL模塊。他們之間構成了緊耦合。如果要更換DAL模塊,顯然需要修改BLL中的代碼。

引入抽象

依賴倒置的思想告訴我們上層模塊(BLL)和下層模塊(DAL)都應當依賴于抽象。那么我們引入一個抽象模塊。


抽象模塊:

public interface IOrderDao
{
??? List<Orders> GetOrderByUserID(int userid);

??? List<Orders> GetOrderByProductID(int productID);
}
DAL:

public class OrderDao : IOrderDao//繼承于抽象
{
??? public List<Orders> GetOrderByUserID(int userid)
??? {
??????? throw new NotImplementedException();
??? }
??? public List<Orders> GetOrderByProductID(int productID)
??? {
??????? throw new NotImplementedException();
??? }
}
BLL:


public class Order
{
??? private IOrderDao orderDao;//依賴于抽象
??? public Order(IOrderDao orderdao)
??? {
??????? orderDao = orderdao;
??? }
??? public List<Orders> GetOrderByUserID(int userid)
??? {
??????? List<Orders> list = null;
??????? list = orderDao.GetOrderByUserID(userid);
??????? return list;
??? }
??? public List<Orders> GetOrderByProductID(int productID)
??? {
??????? List<Orders> list = null;
??????? list = orderDao.GetOrderByProductID(productID);
??????? return list;
??? }
}
現在BLL持有了對抽象模塊的引用,而DAL也依賴于該抽象模塊。抽象模塊的引入消除了BLL和DAL之間的依賴。那么這種方法是否完美呢?

接口的單一性


在一個業務驅動的系統中,如果與訂單相關的業務發生變化,會導致我們去修改 IOrderDao,相應的DAL中的OrderDao 和BLL的Order都會被修改。


什么原因呢?
上面的這種設計讓我們無法保持一個穩定的接口。面向對象設計中,有這樣的兩個原則:
單一職責原則(SRP):保證對象的細粒度和單一性。


開放-封閉原則(OCP):對于擴展開放,對于更改封閉。

于是有了下面的設計。


抽象模塊:


public interface IOrderUserDao
{
??? List<Orders> GetOrderByUserID(int userid);
}
public interface IOrderProductDao
{
??? List<Orders> GetOrderByProductID(int productID);
}
DAL:


public partial class OrderDao : IOrderUserDao
{
??? public List<Orders> GetOrderByUserID(int userid)
??? {
??????? throw new NotImplementedException();
??? }
}
public partial class OrderDao : IOrderProductDao
{
??? public List<Orders> GetOrderByProductID(int productID)
??? {
??????? throw new NotImplementedException();
??? }
}
BLL:


public class User
{
??? private IOrderUserDao orderDao;//依賴于抽象
??? public User(IOrderUserDao orderdao)
??? {
??????? orderDao = orderdao;
??? }
??? public List<Orders> GetOrderByUserID(int userid)
??? {
??????? List<Orders> list = null;
??????? list = orderDao.GetOrderByUserID(userid);
??????? return list;
??? }
}

public class Product
{
??? private IOrderProductDao orderDao;//依賴于抽象
??? public Product(IOrderProductDao orderdao)
??? {
??????? orderDao = orderdao;
??? }
??? public List<Orders> GetOrderByProductID(int productID)
??? {
??????? List<Orders> list = null;
??????? list = orderDao.GetOrderByProductID(productID);
??????? return list;
??? }
}
那么您的意見呢?


作者:青羽

總結

以上是生活随笔為你收集整理的谈谈我对DI的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91视频一区二区三区 | 一区二区成人精品 | 中文字幕av专区 | 一区二区三区视频网 | 免费黄色欧美 | 国产精品99精品久久免费 | 长篇高h肉爽文丝袜 | 国产毛片av | 18视频网站在线观看 | 日本激情视频在线观看 | 精品视频在线一区二区 | www噜噜噜 | 亚洲六月丁香色婷婷综合久久 | av地址在线 | 色偷偷综合网 | 伊人激情 | 两性午夜免费视频 | 色中文字幕在线观看 | 久久这里都是精品 | 亚洲二区视频 | 中文字幕中文字幕 | 一区二区三区四区五区视频 | 国产精品久久国产精品 | 成人里番精品一区二区 | 人妻激情偷乱视频一区二区三区 | 中文字幕一区av | 日本黄网站在线观看 | 浮生影视在线观看免费 | 天天综合中文字幕 | 精品国偷自产国产一区 | 欧美激情影院 | 色婷婷综合成人av | 老子影院午夜精品无码 | 免费观看污视频 | 国产精品一区二区在线看 | 欧美碰碰碰 | 国产二区精品视频 | 在线国产网站 | 夜夜操影院 | 就去色av| www噜噜噜| v在线 | 成人午夜在线观看视频 | 亚洲av色一区二区三区精品 | 麻豆中文字幕 | 国产精品国产三级国产播12软件 | 亚洲人xxx日本人18 | 日韩激情影院 | 久久99成人 | 成人av在线一区二区 | 国产超碰av | 日本a级黄 | 久久高清无码视频 | 性av免费| 欧美嫩草 | 粉嫩av网站 | 波多野结衣1区2区3区 | 夜夜草天天草 | av三级网站| 天天插天天射 | 国产精品久久久久久久久免费桃花 | 国产一区自拍视频 | 青青久久av北条麻妃黑人 | 四虎视频在线观看 | 黑人一级黄色片 | 久草热在线视频 | 九色av| 91玖玖| 欧美色图影院 | 国产精品欧美综合亚洲 | 亚洲一区二区三区视频 | 欧美老女人视频 | 国产嫩草影视 | 夏目彩春娇喘呻吟高潮迭起 | 日韩白浆 | 中文字幕成人动漫 | 色婷婷国产 | 蜜桃视频在线观看一区二区 | 国产老妇视频 | 国产特黄级aaaaa片免 | 九九热这里有精品视频 | 亚洲乱码国产乱码精品精大量 | 亚洲精品乱码久久久久久不卡 | 99综合网 | 久久久精品网站 | 第一av在线 | 久久精品a | 日日夜夜av| av在线不卡网站 | 婷婷亚洲精品 | 成人h视频 | 国产成人精品av | 性囗交免费视频观看 | 影音先锋成人资源网 | 91偷拍富婆spa盗摄在线 | 亚洲天天视频 | 欧美激情一区二区三级高清视频 | 国产精品久久久久久久久久久久久久久 | 男人的天堂国产 |