我们有一个基于层的应用程序架构。它是用C#编写的,并使用.Net中可用的sql对象进行数据访问。其中一些是家庭建造的ORM,一些是存储过程。我们有许多使用这种架构来处理数据的Windows服务。扩展和性能一直是问题。我们团队中的新人正在推动将我们的数据访问转换为使用基于休息的数据服务。这将取代我们当前的数据访问层。
我不认为休息是为了我们的架构。我也对性能表示担忧。我不得不认为它会慢得多。我没有看到如何有效地进行Web服务,然后到数据库进行CRUD操作,这不会使我们的性能问题变得更糟。我知道休息可以通过缓存和进一步扩展能力来提高性能,但现在还没有解决。它只是一个数据访问替代品,现在没有花里胡哨的东西。除此之外,初始实现将不允许我们使用存储过程。所有处理都将是基于表格的CRUD操作,任何数据按摩都将在C#代码中完成,而不是基于集合的操作。
我可能很容易出错,但我可以看到灾难即将来临,我不知道我是对的还是我的小鸡。寻找任何指导,建议,案例研究参考。任何可以帮助我的情况或解决我的恐惧的事情。感谢。
答案 0 :(得分:0)
如果所有客户端(例如Windows服务等)都在使用存储过程或直接SQL访问,那就是紧密耦合。数据库模式的任何更改都意味着需要更新所有客户端以处理更改。如果架构永远不会改变,那就不是问题了。如果架构确实发生了变化,并且开发了其中一项服务的人员离开了,那么这是一个很大的问题。
如果数据库是从REST层后面的客户端抽象出来的,那就是松耦合。数据库模式的任何更改都与客户端无关。唯一需要改变的是REST层的数据访问层。面向端点的客户端不会更改。这些端点如何与数据库交互将发生变化。
基本上,从直接SQL转向REST是从系统设计中退一步。换句话说:
SELECT * FROM ORDERS WHERE NOT PAID
变为
https://api.com/orders/unpaid
,返回的对象是一个域对象,表示未付订单对象的列表。
因此客户离开了实施(选择*)并转向域解决方案。客户端和数据库之间没有更紧密的耦合,但客户端和域之间的耦合松散。
客户现在使用域语言“获取所有未付款的订单”,而不是用自己的语言与数据库交谈。他们不关心这些订单是如何存储的,或者在哪里。他们只是询问REST端点。
到目前为止,这只是实现,但是您对业务的理解将会增加,因为您将在域驱动设计(DDD)术语中讨论,因为REST端点将接受并返回域对象而不是原始SQL。
这对业务有利吗?开发人员在域级别了解业务是否有益?如果这些答案都是“是”,那么重写大量客户代码的成本/收益比是否会使REST积极到足以进行更改?拥有数据的REST /域接口是否会开辟新的数据查看方式?这会触及利润吗?
真正的问题是,将架构改为松散耦合的REST集成,以提高对业务对象的理解,并为更广泛的人才库打开大门(可能比SQL大师更多的REST编码器?)值得它在未来证明业务方面没有在短期内获得利润?
以DDD术语来思考业务是否值得从SQL迁移到REST?这种新的DDD体验是否会为未来的设计开辟新的大门?
这些是真正的问题。缓存,扩展等是REST实现问题,只有在你回答了上面提出的哲学问题后才会有用。
祝你好运,听起来像是一个激动人心的时刻!答案 1 :(得分:0)