掺入ORM成(半)SOA架构(Incorporating ORM into a (semi) SOA

2019-09-21 08:27发布

我探索的ORM的产品(重点是NHibernate的,考虑所有选项),并深信使用一个可能是我们的一些项目的一个很大的好处 - 但我有一个很难想象只是它将如何发挥在我们的系统。

我的理解是,一个ORM理想地被粘合起来,数据库和业务逻辑。 这是假设业务逻辑访问一个数据库,但在我们的系统,我们有卡在中间的Web服务。

我们目前的系统是相当简单的。 我们是.NET通和通和有:

  • 数据库。 随着表...和行。
    • 权限限制在存储过程执行权限,我们建立了基本验证并没有什么存储过程进入或离开该数据库不通过存储过程去。
  • 网页服务
    • 对DB存储过程执行CRUD操作
    • 目前通常使用的DataSet /数据表为他们的消息
  • 商业逻辑
    • 会谈到Web服务

添加一个ORM进来,似乎很自然地将它的数据库和web服务之间。 因此,客户端将使得对服务的请求,该服务将使用ORM检索结果作为对象,而不是作为数据表,并在客户端会收到来自网络的服务对象。

所以我的问题是barage:

  • 请问这种做法工作?

    • 做任何特别的ORM赞成这种类型的方法? 是否有任何大的ORM尤其不适合这个环境呢?
  • 有没有将使一些对网络服务的客户端的ORM互动的另一种实现(在客户端请求,从ORM提供者的物体,并有ORM提供商包裹Web服务通信)?

  • 我们目前单位的工作侧重于数据表和他们的行状态跟踪。

    • 如何将状态跟踪的多少将一个ORM提供,当我们把它粘和业务逻辑之间的web服务?
    • 将被要求我们映射对象提供自己的状态跟踪?

Answer 1:

你的互联网服务和存储过程层已经在做大多数低级别的ORM将执行的工作:在强类型的方式访问数据库。 这听起来像你的数据表从Web服务回来,你正在寻找那些数据表封装成类。

你会从“自动生成”功能,最ORM的产品提供,因为他们通常是向直接从SQL源创建的类面向得到很少的帮助。 在另一方面,如果你的Web服务允许列的发现返回它不是一个硬性的项目,以创建从传统的代码生成技术,包装类。 如果这些生成的类从基类的ORM的导出您可以使用基础设施的其余部分(实体集合,工作单位等)。

这是大多数虽然我见过的架构有很大不同。 我见过DataStore-> ORM->业务逻辑 - > Web服务==>消费者使用相当多。 这使得业务逻辑容易编写针对数据存储,同时提供网络服务,做决定怎么搞的业务逻辑繁重。 消费者(最终用户的应用程序,无论是台式机或Web演示文稿),则主要是为演示负责(因为它应该是在大多数情况下)。

在另一方面(除非我看错),看来你有兴趣DataStore-> Sproc-> Web服务===> ORM->业务逻辑 - >消费。 这不是我见过频繁。 我认为它的工作对你采取ORM在它看来你都在思考的方式。

我缺少的东西,或者是大部分业务逻辑的真正被客户端上执行?



Answer 2:

我会建议针对您的具体情况使用ORM,这是从谁经常使用的NHibernate有人为的到来。 在当前的设置中,你将不得不通过几个跳铁圈只是为了让您的应用程序的工作,你将无法从大多数的功能,如NHibernate的一个很好的ORM提供受益。

  • 与存储过程和ORM工作,一边是可以做到的,是难以配置和腿筋从它做什么的ORM。
  • 通过持久性可达性是一个巨大的好处使用NHibernate的时候,却因为你的业务层将不会提供给你的是“断开”。
  • NHibernate的是基于关闭的IDbConnection,所以试图钩住这件事在客户端通过Web服务将消除您使用会话(工作单位)

如果你想传递的对象,而不是数据表,为什么不使用的DTO呢? 这将使你的强类型的对象,但仍然会在你的安装工作。



文章来源: Incorporating ORM into a (semi) SOA architecture