使用 ServiceStack AutoQuery 时如何管理关注点分离
How to manage separation of concerns when using ServiceStack AutoQuery
我在组织 AutoQuery 代码时遇到了一些问题。我的项目结构目前如下所示:
/Project
/Project.ServiceInterface
Service.cs
/Project.Logic
Manager.cs
/Types
DbModel.cs
/Project.ServiceModel
Request.cs
/Types
DtoModel.cs
使用此设置,ServiceModel 不知道逻辑模型。因此,如果不在 ServiceModel 中复制所有 DbModel 对象或在 ServiceModel 中添加对 Logic 的依赖项,我就无法进行像 QueryDb<DbModel, DtoModel>
这样的请求查询。我也有自定义 AutoQuery 服务实现,在这些实现中,我希望能够利用在其他地方使用我的 DbModels 编写的代码。
有没有人有任何建议或相关示例?我觉得我正在错误地处理这个问题并使它变得比需要的更复杂。谢谢
Auto Query 允许您通过定义 Request DTO 来创建服务,因为它引用的所有类型也必须是 ServiceModel程序集,因此您需要将您的 AutoQuery 服务引用的数据模型移动到您的 ServiceModel 项目或注释您的 DTO,以便 OrmLite 可以使用它来查询您的 RDBMS Table 它可以使用名称不同的 [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; }
}
否则您将无法使用自动查询,并且需要创建自定义服务,其内部实现使用您的数据模型,而这些数据模型隐藏在您的 public 服务合同中。
就我个人而言,我建议将您需要的数据模型移动到您的 ServiceModel 程序集(继续使用与其他数据模型相同的命名空间),因为 OrmLite DataModels are POCOs像 DTO 通常不需要任何额外的引用,除了 impl-free ServiceStack.Interfaces.
我在组织 AutoQuery 代码时遇到了一些问题。我的项目结构目前如下所示:
/Project
/Project.ServiceInterface
Service.cs
/Project.Logic
Manager.cs
/Types
DbModel.cs
/Project.ServiceModel
Request.cs
/Types
DtoModel.cs
使用此设置,ServiceModel 不知道逻辑模型。因此,如果不在 ServiceModel 中复制所有 DbModel 对象或在 ServiceModel 中添加对 Logic 的依赖项,我就无法进行像 QueryDb<DbModel, DtoModel>
这样的请求查询。我也有自定义 AutoQuery 服务实现,在这些实现中,我希望能够利用在其他地方使用我的 DbModels 编写的代码。
有没有人有任何建议或相关示例?我觉得我正在错误地处理这个问题并使它变得比需要的更复杂。谢谢
Auto Query 允许您通过定义 Request DTO 来创建服务,因为它引用的所有类型也必须是 ServiceModel程序集,因此您需要将您的 AutoQuery 服务引用的数据模型移动到您的 ServiceModel 项目或注释您的 DTO,以便 OrmLite 可以使用它来查询您的 RDBMS Table 它可以使用名称不同的 [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; }
}
否则您将无法使用自动查询,并且需要创建自定义服务,其内部实现使用您的数据模型,而这些数据模型隐藏在您的 public 服务合同中。
就我个人而言,我建议将您需要的数据模型移动到您的 ServiceModel 程序集(继续使用与其他数据模型相同的命名空间),因为 OrmLite DataModels are POCOs像 DTO 通常不需要任何额外的引用,除了 impl-free ServiceStack.Interfaces.