Entity中是否可以引用Repository
DDD裡講的Repository用於對一個entity的重建,因此Repository依賴於entity是很正常的一個關係。但是在使用中,會遇到entity本身需要訪問資料庫,如果呼叫repository來訪問的話,變成了雙向依賴,感覺不好。
例如:一個entity叫排班表,它下面對應每一天的班次安排。它們間算是一個聚合體吧。可以寫成這樣:
public class WorkShiftSchedule // 排班表
{
public IList DayArrangeList; // 每日的班次安排列表。
}
public class DayArrange // 每日排班明細
{
public WorkShiftSchedule OwnerSchedule; // 所屬的排班表
public DateTime Day; // 日期
public WorkShift WorkShiftPlan; // 安排的班次
}
但是,幾年下來,明細資訊越來越多,顯然用IList這樣的資料集就算用Lazy Load效能會出現很大問題。為了查某一週的排班資訊,卻要載入好幾年的排班明細,顯然不合理。DDD裡提到了,如果資料集不合適,可以選用查詢。想想也合乎業務需要,因為從使用者角度,不需要載入所有明細,只需要某天,或某個月內的排班情況。於是我改成了:
public class WorkShiftSchedule
{
public IList GetMonthArranges(string month){}
public DayArrange GetDayArrange(DateTime day){}
}
我的問題也因此產生了,GetMonthArranges需要查詢,那麼是否寫成:
public IList GetMonthArranges(string month)
{
return WorkShiftScheduleRepository.QueryDayArranges(this, month);
}
public class WorkShiftScheduleRepository
{
public static IList QueryDayArranges(WorkShiftSchedule schedule, string month){}
}
但一直覺得這樣似乎變成了Repository和Entity之間雙向依賴,容易造成混亂。但依DDD裡說的,DayArrange又是從屬於WorkShiftSchedule這個根的,所以一切訪問要透過WorkShiftSchedule。不然直在外部用Repository來查詢就好了,不經過WorkShiftSchedule。一直疑慮,還望前輩們指點迷津。
例如:一個entity叫排班表,它下面對應每一天的班次安排。它們間算是一個聚合體吧。可以寫成這樣:
public class WorkShiftSchedule // 排班表
{
public IList DayArrangeList; // 每日的班次安排列表。
}
public class DayArrange // 每日排班明細
{
public WorkShiftSchedule OwnerSchedule; // 所屬的排班表
public DateTime Day; // 日期
public WorkShift WorkShiftPlan; // 安排的班次
}
但是,幾年下來,明細資訊越來越多,顯然用IList這樣的資料集就算用Lazy Load效能會出現很大問題。為了查某一週的排班資訊,卻要載入好幾年的排班明細,顯然不合理。DDD裡提到了,如果資料集不合適,可以選用查詢。想想也合乎業務需要,因為從使用者角度,不需要載入所有明細,只需要某天,或某個月內的排班情況。於是我改成了:
public class WorkShiftSchedule
{
public IList GetMonthArranges(string month){}
public DayArrange GetDayArrange(DateTime day){}
}
我的問題也因此產生了,GetMonthArranges需要查詢,那麼是否寫成:
public IList GetMonthArranges(string month)
{
return WorkShiftScheduleRepository.QueryDayArranges(this, month);
}
public class WorkShiftScheduleRepository
{
public static IList QueryDayArranges(WorkShiftSchedule schedule, string month){}
}
但一直覺得這樣似乎變成了Repository和Entity之間雙向依賴,容易造成混亂。但依DDD裡說的,DayArrange又是從屬於WorkShiftSchedule這個根的,所以一切訪問要透過WorkShiftSchedule。不然直在外部用Repository來查詢就好了,不經過WorkShiftSchedule。一直疑慮,還望前輩們指點迷津。
[該貼被windflaw於2007年04月23日 21:15修改過]
相關文章
- [轉載] .NET 中可以有類似 JVM 的幻像引用嗎?JVM
- win10系統中Cryptographic Services服務是否可以禁用Win10
- Java中final修飾的方法是否可以被重寫Java
- Java中的四種引用方式(強引用、軟引用、弱引用、虛引用)Java
- Java/Android中的強引用、軟引用、弱引用、虛引用JavaAndroid
- ORACLE RAC 心跳是否可以直連Oracle
- vue元件,可以通過npm引用的元件Vue元件NPM
- 刪除Repository中的檔案
- js中在一個函式中引用另一個函式中的函式,可以這麼做JS函式
- .net中的attribute是否可以認為就是.net 的aop實現!?
- Entity Framework Tutorial Basics(8):Types of Entity in Entity FrameworkFramework
- 代理IP是否可以按用途分類
- 使用代理IP是否可以保持匿名性?
- Java中的引用Java
- 【iis】URL重寫可以引用原地址內容
- 如何判斷一個js物件是否存在迴圈引用JS物件
- 同步快速判斷視訊是否可以播放
- 檢視引數是否可以動態修改
- jdbc connection是否可以建立多個statementJDBC
- no such repository
- Java常見知識點彙總(⑲)——Java中的強引用、弱引用、軟引用、虛引用Java
- Less tips:宣告變數之前可以引用變數!變數
- java中的引用物件Java物件
- Java中的弱引用Java
- Java 中的方法引用Java
- PbootCMS授權碼是否可以用於不同埠? 授權碼是否可以用於 HTTPS 環境?bootHTTP
- 關於專案中 Repository 層的思考
- Entity Framework中 批量提交 事務處理Framework
- Entity Framework Core中的併發處理Framework
- DDD設計中領域模型是否可以依賴第三方? - Mathias Verraes模型
- Entity Framework Tutorial Basics(40):Validate EntityFramework
- Entity Framework Tutorial Basics(42):Colored EntityFramework
- Entity Framework Tutorial Basics(10):Entity LifecycleFramework
- Entity Framework Tutorial Basics(20):Persistence in Entity FrameworkFramework
- Entity Framework Tutorial Basics(27):Update Entity GraphFramework
- Entity Framework Tutorial Basics(2):What is Entity Framework?Framework
- Entity Framework Tutorial Basics(9):Entity RelationshipsFramework
- Entity Framework(實體框架)之Entity SQLFramework框架SQL