2009-10-07 62 views
1

我有一組業務/域類(對於日曆)將在內部公共API中公開。在同一個API中,有直接鏡像底層數據庫結構(NHibernate映射,但不重要)的數據對象。數據對象中的業務邏輯與耦合與DTO(vs.?)

我需要做的是構建這些對象的類型化集合,因此日曆上的每一天都可以包含來自數據庫的一組約會,提醒等等。

一種解決方案是使用來自域模型標記接口「標記」每個數據對象:

public class CalendarAppointment : PersistentEntity, ICalendarObject

但我已經把業務/域模型的東西與我的數據模型。

另一個解決方案是包裝數據模型類如下,並且暴露/使用那些日曆API中:

public class Appointment : CalendarAppointment, ICalendarObject

但是這引入了非常明顯的耦合。

第三種解決方案是使用DTO,但是我需要公開DTO中數據對象中的每個字段......所以在首先創建DTO似乎沒有意義。

這是最好的選擇,還是有更好的選擇?

這是一個.NET 2.0項目,如果這有所作爲。

回答

0

我們認爲日曆對象隱式綁定到數據庫,所以這種耦合可以。我們結束了與解決方案#4(封裝FTW):

public class Appointment : ICalendarObject 
{ 
    public CalendarAppointment Item { get; } 
}
0

當您的業務領域模型和數據模型看起來非常相似時,它總是很想繞過DTO。

您是否考慮重新修改您的公共API,使其實際上看起來不那麼冗長?

如果你不能真正做到這一點,咬住子彈,並去DTO,因爲使用你的API發送NHibernate對象到客戶端代碼的價格通常是在血淚中支付。

+0

我應該澄清,我會編輯我的問題。我所說的API將在內部公開 - 計劃是它將用於開發我們的基礎產品,並且還用於擴展基礎產品的功能(這是遺留系統遷移的一部分,其中幾個客戶端具有巨大的與基礎產品的偏差)。我們已經將數據_結構_類(如上所述)從數據層查詢中分離出來,但是這兩件事都必須在API中公開。 – 2009-10-07 18:01:58