使用ServiceStack自动查询时如何管理关注点分离

我在组织自动查询代码方面遇到一些问题。我的项目结构目前看起来像:

/Project
/Project.ServiceInterface
  Service.cs
/Project.Logic
  Manager.cs
  /Types
    DbModel.cs
/Project.ServiceModel
  Request.cs
  /Types
    DtoModel.cs

使用此设置,ServiceModel不了解逻辑模型。因此,我无法像在QueryDb<DbModel, DtoModel>没有本质上复制ServiceModel中所有DbModel对象或在ServiceModel中向Logic添加依赖项那样进行请求查询我也有自定义的AutoQuery服务实现,在这些实现中,我希望能够利用在其他地方使用DbModels编写的代码。

有没有人有任何建议或相关示例?我觉得我在错误地解决了这个问题,并使它变得比需要的更为复杂。谢谢。

神话

通过自动查询,您可以通过定义请求DTO创建服务,因为它所引用的所有类型也都必须是ServiceModel程序集,因此您需要将自动查询服务引用的数据模型移动到ServiceModel项目中,或者对DTO进行注释以便OrmLite可以使用它来查询您的RDBMS表,在该表中可以使用[Alias]名称不同的[Ignore*]属性以及取决于属性是否应存在于OrmLite或序列化中的属性,例如:

[Alias("MyTable")]
public class MyDto
{
    [Alias("DbName")]
    public string DtoName { get; set; }

    [Ignore] 
    public string IgnoredInOrmLite { get; set; }

    [IgnoreDataMember] 
    public string IgnoredInSerialization { get; set; }
}

否则,您将无法使用“自动查询”,并且需要创建“自定义服务”,其内部实现会利用您的数据模型,而这些数据模型对公共服务合同是隐藏的。

我个人建议将所需的数据模型移至ServiceModel程序集(该模型继续使用与其他DataModels相同的名称空间),因为OrmLite DataModels是POCO,像DTO一样,除了impl-free外,通常不需要任何其他引用。ServiceStack.Interfaces

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章