我是 Asp.Net MVC 的新手,想將我的項(xiàng)目拆分為具有 1- MVC 項(xiàng)目(表示層 UI 層)2- 業(yè)務(wù)邏輯層 BLL 的分層架構(gòu)(在這里我想驗(yàn)證數(shù)據(jù)視圖模型并將視圖模型轉(zhuǎn)換為數(shù)據(jù)庫模型使用自動(dòng)映射器,然后想通過使用自動(dòng)映射器轉(zhuǎn)換回 UI(MVC 項(xiàng)目)層 3 數(shù)據(jù)訪問層來發(fā)送回視圖模型,數(shù)據(jù)訪問層具有存儲(chǔ)庫 DB 上下文等,我只想在業(yè)務(wù)層中引用它們。我的困惑是在業(yè)務(wù)邏輯層和 MVC 項(xiàng)目 (UI) 層之間。我的視圖模型類位于 MVC 項(xiàng)目內(nèi)的模型文件夾中,業(yè)務(wù)邏輯層引用了具有數(shù)據(jù)庫表類的數(shù)據(jù)訪問層。所以我的視圖模型在業(yè)務(wù)邏輯層中無法識(shí)別。如果我想添加 MVC 項(xiàng)目(我的視圖模型存在的地方)對業(yè)務(wù)邏輯層的引用,它會(huì)給出循環(huán)依賴錯(cuò)誤。我在論壇和教程上進(jìn)行了大量搜索,但未能找到解決方案或無法理解這個(gè)概念。我的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層是庫項(xiàng)目,而 UI 層是 MVC 項(xiàng)目是否有人可以通過將數(shù)據(jù)視圖模型發(fā)送到業(yè)務(wù)邏輯層并從業(yè)務(wù)邏輯層接收后視圖模型來舉例說明數(shù)據(jù)訪問層namespace DAL.Infrastructure.Contract{ public interface IBaseRepository<T> : IDisposable where T : class { IEnumerable<T> GetAll(); IEnumerable<T> FindIEnumerableByExpression(Expression<Func<T, bool>> predicate); T FindFirstOrDefaultByExpression(Expression<Func<T, bool>> predicate); T GetById(object Id); T Insert(T entity); T Delete(T entity); void Update(T entity); void Save(); }}namespace DAL.Infrastructure{ public class BaseRepository<T> : IBaseRepository<T> where T : class { public PMSEntities dbContext = null; public DbSet<T> dbSet = null; public BaseRepository() { this.dbContext = new PMSEntities(); dbSet = dbContext.Set<T>(); } public virtual IEnumerable<T> GetAll() { return dbSet.AsEnumerable<T>(); } public T GetById(object id) { return this.dbSet.Find(id); } public IEnumerable<T> FindIEnumerableByExpression(System.Linq.Expressions.Expression<Func<T, bool>> predicate) { IEnumerable<T> query = dbSet.Where(predicate).AsEnumerable(); return query; } public T FindFirstOrDefaultByExpression(System.Linq.Expressions.Expression<Func<T, bool>> predicate) { return this.dbSet.FirstOrDefault(predicate); }我想在業(yè)務(wù)邏輯層中使用上面的類,而不是直接在控制器中使用。這是我的困惑如何編寫業(yè)務(wù)邏輯層并在具有循環(huán)依賴錯(cuò)誤的業(yè)務(wù)邏輯層中使用自動(dòng)映射器
1 回答

夢里花落0921
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
ViewModels 不應(yīng)該是業(yè)務(wù)邏輯層的一部分,因?yàn)樗鼈兗兇馐菫榱苏故尽D悻F(xiàn)在如何組織它使得業(yè)務(wù)需要 UI/View,這需要業(yè)務(wù)開始,這需要 UI/View 開始(重復(fù)...)
UI/View 可能知道業(yè)務(wù)層,但反過來就不知道了。因此,執(zhí)行此操作的“正確”方法是首先將您的數(shù)據(jù)庫信息映射到一個(gè)普通的舊 C# 對象,您的 UI 層可能會(huì)通過業(yè)務(wù)層請求該對象。之后,UI 層可能會(huì)通過將其轉(zhuǎn)換為經(jīng)過優(yōu)化以顯示該信息的類 ViewModel 來完成其工作。這并不意味著您必須在控制器內(nèi)部執(zhí)行此操作,您可以在 UI/View 項(xiàng)目中添加其他類來處理邏輯。
UI/View 可以了解業(yè)務(wù),業(yè)務(wù)可以了解數(shù)據(jù)訪問,但絕不會(huì)反過來。這樣你就不會(huì)得到循環(huán)依賴并且沒有糾纏的代碼。
我希望這對你有意義。
- 1 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報(bào)
0/150
提交
取消