我是 Asp.Net MVC 的新手,想將我的項目拆分為具有 1- MVC 項目(表示層 UI 層)2- 業務邏輯層 BLL 的分層架構(在這里我想驗證數據視圖模型并將視圖模型轉換為數據庫模型使用自動映射器,然后想通過使用自動映射器轉換回 UI(MVC 項目)層 3 數據訪問層來發送回視圖模型,數據訪問層具有存儲庫 DB 上下文等,我只想在業務層中引用它們。我的困惑是在業務邏輯層和 MVC 項目 (UI) 層之間。我的視圖模型類位于 MVC 項目內的模型文件夾中,業務邏輯層引用了具有數據庫表類的數據訪問層。所以我的視圖模型在業務邏輯層中無法識別。如果我想添加 MVC 項目(我的視圖模型存在的地方)對業務邏輯層的引用,它會給出循環依賴錯誤。我在論壇和教程上進行了大量搜索,但未能找到解決方案或無法理解這個概念。我的業務邏輯層和數據訪問層是庫項目,而 UI 層是 MVC 項目是否有人可以通過將數據視圖模型發送到業務邏輯層并從業務邏輯層接收后視圖模型來舉例說明數據訪問層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); }我想在業務邏輯層中使用上面的類,而不是直接在控制器中使用。這是我的困惑如何編寫業務邏輯層并在具有循環依賴錯誤的業務邏輯層中使用自動映射器
1 回答

夢里花落0921
TA貢獻1772條經驗 獲得超6個贊
ViewModels 不應該是業務邏輯層的一部分,因為它們純粹是為了展示。你現在如何組織它使得業務需要 UI/View,這需要業務開始,這需要 UI/View 開始(重復...)
UI/View 可能知道業務層,但反過來就不知道了。因此,執行此操作的“正確”方法是首先將您的數據庫信息映射到一個普通的舊 C# 對象,您的 UI 層可能會通過業務層請求該對象。之后,UI 層可能會通過將其轉換為經過優化以顯示該信息的類 ViewModel 來完成其工作。這并不意味著您必須在控制器內部執行此操作,您可以在 UI/View 項目中添加其他類來處理邏輯。
UI/View 可以了解業務,業務可以了解數據訪問,但絕不會反過來。這樣你就不會得到循環依賴并且沒有糾纏的代碼。
我希望這對你有意義。
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消