我们的产品之一包含多个 WCF 服务,其业务层都位于同一数据访问层之上,该数据访问层提供对 NoSql 数据库 (mongodb) 的访问:
WCF WCF WCF
| | |
BL BL BL
| | |
Data Access Layer <-- PageInfoResult currently defined here
|
mongodb
PageInfoResult
因为每个服务都包含一个或多个方法,这些方法PageInfoResult
要么接受或返回特定类型((对于 WCF)。
例子:
[DataContract]
public class PageInfoResult
{
[BsonId]
[DataMember]
public string PageUrl { get; set; }
[BsonElement("status")]
[DataMember]
public int HttpStatusCode { get; set; }
[BsonElement("score")]
[DataMember]
public int OurProprietaryPageScore { get; set; }
[BsonElement("data")]
[DataMember]
public SomeOtherClass OtherData { get; set; }
// ... other properties ...
}
所以具体的问题是:
- 每个 WCF 服务是否应该重新定义然后绘制到 DAL 的数据模型,或者 DAL 是否可以合法地成为定义模型的唯一位置?
- 如果每个服务都应该重新定义 DAL 中的每个模型,那么服务模型是否应该从数据模型继承(反之亦然)?
在更一般的意义上:
- 定义非常相似(或相同)的服务和数据模型的正确的、面向对象的方法是什么?
- 在处理模式与无模式数据库(MsSql 与 MongoDB)时,方法是否存在差异?