我正在研究 OData,它非常强大,但同时也让人感到不安。这相当于向远程用户公开您的数据源。除了几乎毫无注入点之外,没有服务、什么都没有,结果是一个近乎荒谬的两层架构。
我的担忧有:
1. 使用 OData 很难强制实施 DDD 等模式。 2. 用 OData 对一组 SOA 数据传输对象进行操作也很困难,因为这些对象通常不可查询。也就是说,在获取 DTO 后,数据库查询已经完成,但 OData 刚刚启动。根据它进行查询并没有多少价值,因为 DTO 已经在内存中了。 3. 我可以在数据库本身上创建一个视图,作为 OData 实体的表示,但这会将 UI 关注点放在持久化中。这是一个大忌。 4. 最好的方法是使用笨拙的 JavaScript 在 UI 层合并来自各种 DDD 服务的结果集——这是一个维护噩梦,重用记录很差。 5. 另一个可能性是编写一个 OData 实体的转换器(可能是 ViewModel 级别的类),然后将其转换为 DTO,再将其转换为域,然后转换为概念模型,ORM 可以处理其余部分。但这将需要大量资源。
简而言之,如何让 OData 与 SOA、OO 封装原则、DDD 和良好的 SOC 相容?
我的担忧有:
1. 使用 OData 很难强制实施 DDD 等模式。 2. 用 OData 对一组 SOA 数据传输对象进行操作也很困难,因为这些对象通常不可查询。也就是说,在获取 DTO 后,数据库查询已经完成,但 OData 刚刚启动。根据它进行查询并没有多少价值,因为 DTO 已经在内存中了。 3. 我可以在数据库本身上创建一个视图,作为 OData 实体的表示,但这会将 UI 关注点放在持久化中。这是一个大忌。 4. 最好的方法是使用笨拙的 JavaScript 在 UI 层合并来自各种 DDD 服务的结果集——这是一个维护噩梦,重用记录很差。 5. 另一个可能性是编写一个 OData 实体的转换器(可能是 ViewModel 级别的类),然后将其转换为 DTO,再将其转换为域,然后转换为概念模型,ORM 可以处理其余部分。但这将需要大量资源。
简而言之,如何让 OData 与 SOA、OO 封装原则、DDD 和良好的 SOC 相容?