2009-10-07 93 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