Web services SOA:在不需要外部访问的情况下,实现服务比编写服务就绪代码更可取吗?

Web services SOA:在不需要外部访问的情况下,实现服务比编写服务就绪代码更可取吗?,web-services,architecture,service,soa,Web Services,Architecture,Service,Soa,我正在研究一个解决方案的初始架构,之前的一位顾问已经推荐了SOA方法。通过阅读Erl书籍并应用于以前的服务工作(以及一般的良好设计模式),我可以看到这种方法的好处。但是,这个特定的组目前没有实现web服务的任何传统需求——没有外部使用者,也没有与其他应用程序的集成 我想知道的是,严格使用web服务来坚持SOA有什么好处,而仅仅实现“服务就绪”的对象是无法做到的 举例说明。假设您将实体“Person”实现为服务。您必须实施: 1.业务对象/逻辑 2.转换器到服务数据结构 3.来自服务数据结构的转换

我正在研究一个解决方案的初始架构,之前的一位顾问已经推荐了SOA方法。通过阅读Erl书籍并应用于以前的服务工作(以及一般的良好设计模式),我可以看到这种方法的好处。但是,这个特定的组目前没有实现web服务的任何传统需求——没有外部使用者,也没有与其他应用程序的集成

我想知道的是,严格使用web服务来坚持SOA有什么好处,而仅仅实现“服务就绪”的对象是无法做到的

举例说明。假设您将实体“Person”实现为服务。您必须实施: 1.业务对象/逻辑 2.转换器到服务数据结构 3.来自服务数据结构的转换器 4.WSDL 5.服务数据结构(XML/JSON/etc) 6.断言

另一方面,如果不使用服务,只需实现#1,并确保其他代码通过松散引用(使用依赖项注入或包装器等)访问它。然后,如果以后发现需要服务,您可以让引用指向包装器对象中上面的#2/#3逻辑(因此所有调用方对象都不需要更新),并且实现相同数量的对象,而不必对您必须进行的开发量进行惩罚——不必创建额外的对象或代码,而只需提前完成


因此,如果无论服务是最初实现还是根据需要实现,必须完成的工作量都是相同的,并且当前不需要通过服务进行外部访问,那么有没有理由仅仅为了坚持SOA而最初将其作为服务实现?

一般来说,您最好等待

您可以设计和实现一个web服务,它只是一个公开底层功能的技术门面——问题是您是否会对底层功能进行一对一的“反映”?如果是-您是否以适合外部调用方的方式设计了底层内容?API有意义吗,它是否公开了应该是私有的成员,等等

另一个要考虑的因素是,你真的知道服务的呼叫者想要什么或需要什么吗?构建服务的风险在于(因为您基本上只是猜测),当第一批客户/呼叫者出现时,您可能需要重新编写服务。这可能导致各种各样的工作,包括测试用例、向后兼容性(如果它将更改降低到较低级别),等等


话虽如此,发布内容的优势在于,它可能有助于激发对服务的使用——让人们思考——一种更灵活的原则性方法。

如果您的应用程序是一个独立的客户端类型的应用程序(一个连接到服务的UI,只是为了从数据库中获取数据)实现类似SOA的体系结构通常是过火的。 然而,在安全性、可维护性和可维护性方面,必须使用web服务。e、 g.有些客户端需要访问防火墙外的数据,或者您更喜欢将业务逻辑/数据访问与UI分离,并将其放在一台服务器上,这样您就不需要每次出现总线时都重新部署应用程序。规则改变了

企业应用程序需要许多组件相互交互,并且需要许多开发人员在其中工作。在这种类型的scénario中,使用SOA类型的体系结构是一种方法。 采用SOA的主要原因是减少依赖性。 企业应用程序通常依赖于大量外部组件(逻辑或数据),您不希望通过共享程序集来集成这些组件。
假设您共享一个实现某些特定计算的组件,您会将此组件部署到所有依赖的应用程序吗?如果要更改某些计算逻辑,会发生什么情况?您是否会要求所有团队升级他们的参考资料,重新编译并重新部署他们的应用程序?

我最近在我的博客上发表了一篇文章,这位前架构师也选择不使用web服务,并认为共享程序集很好。结果是一片混乱。阅读更多。

正如我提到的,这取决于您的要求。如果它是一个单一的应用程序,你肯定永远不会集成这个应用程序,也永远不会重用总线。两层应用程序(UI/DB)的逻辑/数据访问已经足够好了。

尽管如此,这是一个体系结构决策,而且由于大多数体系结构决策,更改成本很高。当然,您以后仍然可以考虑web服务模型,但这并不像您想象的那么容易。即使使用基于接口的良好设计,重构现有应用程序以添加服务层通常也是一项很难完成的任务。可能出错的示例:不可序列化的数据结构、属性中的循环引用、构造函数重载、对某些内部行为的依赖性……

您真正的问题“为什么要使用SOA?”不一定是。。我可以看到SOA的许多方面,特别是在外部访问和集成是影响因素的情况下。我特别想问的是,在当前没有计划的外部访问或集成需求的情况下,实现服务而不是服务就绪对象是否有好处。这是一种设计模式:域存储()并不意味着您必须坚持它。是的,我知道——我想问的是,将模式实现为服务而不是以我上面描述的方式是否有优势。我试图找出在不需要外部访问的情况下,SOA中服务的合理性。谢谢,这篇文章内容丰富。然而